49 lines
1.3 KiB
Dart
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;
|
|
}
|