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 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; }