mnemo_cards/mnemo_cards_backend/lib/cron/add_free_packs.dart
2025-11-16 14:25:27 +03:00

49 lines
1.3 KiB
Dart

import 'package:isar/isar.dart';
import 'package:mnemo_cards_backend/cron/task.dart';
import 'package:mnemo_cards_backend/packs/free_packs_distributor.dart';
import 'package:mnemo_cards_common_backend/mnemo_cards_common_backend.dart';
import '../main.dart';
class AddFreePacks with Task {
final FreePacksDistributor _freePacksDistributor;
AddFreePacks(this._freePacksDistributor);
@override
String get name => 'add_free_packs';
@override
Future<void> task() async {
final freePacks = await _freePacksDistributor.getFreePacks();
print('$name found ${freePacks.length} free packs');
if (freePacks.isEmpty) {
print('No free packs found');
return;
}
final users = await isar.txn(() => isar.userModels
.filter()
.anyOf(freePacks, (u, f) => u.not().packs((p) => p.idEqualTo(f.id)))
.findAll());
print(
'Found ${users.length} users for ${freePacks.length} free packs: ${freePacks.map((e) => e.title).join(',')}',
);
for (final user in users) {
try {
await isar.writeTxn(
() async {
await (user.packs..addAll(freePacks)).save();
},
);
} catch (e) {
print('$name on user ${user.id}: $e');
}
}
}
@override
int get intervalSeconds => 600;
}