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';
|
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';
|
|
|
|
|
|
2025-12-13 14:48:00 +00:00
|
|
|
final AppDatabase _db;
|
2025-12-20 18:26:15 +00:00
|
|
|
|
2025-12-13 14:48:00 +00:00
|
|
|
CheckAdminsTask(this._db);
|
|
|
|
|
|
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
|
2025-12-20 18:26:15 +00:00
|
|
|
final token = await _db.userDao.getTokenByExternalUserId(
|
|
|
|
|
externalUserId,
|
|
|
|
|
);
|
|
|
|
|
|
2025-12-13 14:48:00 +00:00
|
|
|
if (token == null) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
2025-12-20 18:26:15 +00:00
|
|
|
|
2025-12-13 14:48:00 +00:00
|
|
|
// Получить пользователя по userId из токена
|
|
|
|
|
final user = await _db.userDao.getUserById(token.userId);
|
|
|
|
|
if (user != null) {
|
|
|
|
|
adminIds.add(user.id);
|
|
|
|
|
if (!user.admin) {
|
|
|
|
|
// Установить admin = true
|
|
|
|
|
await _db.userDao.updateUserPartial(
|
|
|
|
|
UsersCompanion(
|
|
|
|
|
id: Value(user.id),
|
|
|
|
|
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
|
|
|
}
|
|
|
|
|
}
|
2025-12-13 14:48:00 +00:00
|
|
|
// TODO: Implement logic to remove admin flag from users not in adminIdsList
|
|
|
|
|
// if needed in the future
|
2025-11-16 11:25:27 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
int get intervalSeconds => 300;
|
|
|
|
|
}
|