import 'package:drift/drift.dart'; import 'package:drift_postgres/drift_postgres.dart'; import 'package:mnemo_cards_backend/user/admin_ids_service.dart'; import 'package:mnemo_cards_backend/repository/export.dart'; import '../database/database.dart'; import 'task.dart' as task; class CheckAdminsTask with task.Task { @override String get name => 'check_admins'; final UserRepository _userRepository; CheckAdminsTask(this._userRepository); @override Future task() async { // Получаем список ID админов из переменной окружения или файла final adminIdsList = await AdminIdsService.getAdminIds(); if (adminIdsList.isEmpty) { return; } List adminIds = []; for (final externalUserId in adminIdsList) { print('$name processing admin ID: $externalUserId'); if (externalUserId.isNotEmpty) { // Найти токен по externalUserId final rawUser = await _userRepository.getUserByExternalId( externalUserId, ); final userId = rawUser?.id; if (userId == null) { continue; } // Получить пользователя по userId из токена final user = await _userRepository.getUserById(userId); if (user != null && user.id != null) { adminIds.add(user.id!); if (!user.admin) { // Установить admin = true await _userRepository.updateUserPartial( UsersCompanion( id: Value(user.id!), admin: const Value(true), updatedAt: Value(PgDateTime(DateTime.now())), ), ); } } } } } @override int get intervalSeconds => 300; }