mnemo_cards/mnemo_cards_backend/lib/cron/check_admins.dart

61 lines
1.8 KiB
Dart
Raw Normal View History

2025-12-13 14:48:00 +00:00
import 'package:drift/drift.dart';
2025-12-13 23:35:14 +00:00
import 'package:drift_postgres/drift_postgres.dart';
2025-12-11 17:49:15 +00:00
import 'package:mnemo_cards_backend/user/admin_ids_service.dart';
2026-01-09 17:21:18 +00:00
import 'package:mnemo_cards_backend/repository/export.dart';
2025-11-16 11:25:27 +00:00
2025-12-13 14:48:00 +00:00
import '../database/database.dart';
import 'task.dart' as task;
2025-11-16 11:25:27 +00:00
2025-12-13 14:48:00 +00:00
class CheckAdminsTask with task.Task {
2025-11-16 11:25:27 +00:00
@override
String get name => 'check_admins';
2026-01-08 16:07:56 +00:00
final UserRepository _userRepository;
2025-12-20 18:26:15 +00:00
2026-01-08 16:32:25 +00:00
CheckAdminsTask(this._userRepository);
2025-12-13 14:48:00 +00:00
2025-11-16 11:25:27 +00:00
@override
Future<void> task() async {
2025-12-11 17:49:15 +00:00
// Получаем список ID админов из переменной окружения или файла
final adminIdsList = await AdminIdsService.getAdminIds();
if (adminIdsList.isEmpty) {
2025-12-11 00:51:18 +00:00
return;
}
2025-12-11 17:49:15 +00:00
2025-12-13 20:55:50 +00:00
List<String> adminIds = [];
2025-12-13 14:48:00 +00:00
for (final externalUserId in adminIdsList) {
print('$name processing admin ID: $externalUserId');
if (externalUserId.isNotEmpty) {
// Найти токен по externalUserId
2026-01-08 16:58:13 +00:00
final rawUser = await _userRepository.getUserByExternalId(
externalUserId,
);
2026-01-08 16:32:25 +00:00
final userId = rawUser?.id;
2025-12-20 18:26:15 +00:00
2026-01-08 16:32:25 +00:00
if (userId == null) {
2025-12-13 14:48:00 +00:00
continue;
}
2025-12-20 18:26:15 +00:00
2025-12-13 14:48:00 +00:00
// Получить пользователя по userId из токена
2026-01-08 16:32:25 +00:00
final user = await _userRepository.getUserById(userId);
2026-01-08 16:07:56 +00:00
if (user != null && user.id != null) {
adminIds.add(user.id!);
2025-12-13 14:48:00 +00:00
if (!user.admin) {
// Установить admin = true
2026-01-08 16:07:56 +00:00
await _userRepository.updateUserPartial(
2025-12-13 14:48:00 +00:00
UsersCompanion(
2026-01-08 16:07:56 +00:00
id: Value(user.id!),
2025-12-13 14:48:00 +00:00
admin: const Value(true),
2025-12-13 23:35:14 +00:00
updatedAt: Value(PgDateTime(DateTime.now())),
2025-12-13 14:48:00 +00:00
),
);
2025-11-16 11:25:27 +00:00
}
2025-12-13 14:48:00 +00:00
}
2025-11-16 11:25:27 +00:00
}
}
}
@override
int get intervalSeconds => 300;
}