feat(analytics): booster + daily-reward events
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -61,4 +61,16 @@ class AnalyticsService {
|
||||
void tutorialFinished({required bool skipped}) {
|
||||
_backend.logEvent('tutorial_finished', {'skipped': skipped ? 1 : 0});
|
||||
}
|
||||
|
||||
void boosterUsed({required String type}) =>
|
||||
_backend.logEvent('booster_used', {'type': type});
|
||||
|
||||
void boosterGranted(
|
||||
{required String type, required int count, required String source}) =>
|
||||
_backend.logEvent(
|
||||
'booster_granted', {'type': type, 'count': count, 'source': source});
|
||||
|
||||
void dailyRewardClaimed({required int day, required bool doubled}) =>
|
||||
_backend.logEvent(
|
||||
'daily_reward_claimed', {'day': day, 'doubled': doubled ? 1 : 0});
|
||||
}
|
||||
|
||||
@@ -30,6 +30,14 @@ class DailyRewardNotifier extends Notifier<DailyResolution> {
|
||||
await inv.grant(entry.key, entry.value * (doubled ? 2 : 1));
|
||||
}
|
||||
await _save.recordDailyClaim(_cal.ymd(_now()), r.day);
|
||||
ref.read(analyticsProvider).dailyRewardClaimed(day: r.day, doubled: doubled);
|
||||
for (final e in reward.entries) {
|
||||
ref.read(analyticsProvider).boosterGranted(
|
||||
type: e.key.name,
|
||||
count: e.value * (doubled ? 2 : 1),
|
||||
source: 'daily',
|
||||
);
|
||||
}
|
||||
state = _resolve();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -151,6 +151,7 @@ class GameSessionNotifier extends Notifier<GameViewState?> {
|
||||
}
|
||||
if (!apply()) return BoosterUseResult.invalidTarget;
|
||||
await inv.consume(type);
|
||||
ref.read(analyticsProvider).boosterUsed(type: type.name);
|
||||
_publish(lastPlacement: null);
|
||||
return BoosterUseResult.success;
|
||||
}
|
||||
|
||||
@@ -47,4 +47,23 @@ void main() {
|
||||
});
|
||||
expect(backend.events[3].$2, {'score': 500, 'new_best': 1});
|
||||
});
|
||||
|
||||
test('booster + daily events carry their fields', () {
|
||||
final backend = _RecordingBackend();
|
||||
final a = AnalyticsService(backend);
|
||||
|
||||
a.boosterUsed(type: 'hammer');
|
||||
a.boosterGranted(type: 'hammer', count: 2, source: 'daily');
|
||||
a.dailyRewardClaimed(day: 7, doubled: true);
|
||||
|
||||
expect(backend.events.map((e) => e.$1).toList(), [
|
||||
'booster_used',
|
||||
'booster_granted',
|
||||
'daily_reward_claimed',
|
||||
]);
|
||||
expect(backend.events[0].$2, {'type': 'hammer'});
|
||||
expect(backend.events[1].$2,
|
||||
{'type': 'hammer', 'count': 2, 'source': 'daily'});
|
||||
expect(backend.events[2].$2, {'day': 7, 'doubled': 1});
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user