Some checks are pending
Backend CI / test (push) Waiting to run
Backend CI / build (push) Blocked by required conditions
Deploy Admin Panel / Deploy Admin Panel (push) Waiting to run
Deploy Admin Panel / Admin Panel Verification (push) Blocked by required conditions
Deploy Mnemo Cards / Deploy Backend (push) Waiting to run
Deploy Mnemo Cards / Deploy Web App (push) Blocked by required conditions
Deploy Mnemo Cards / Final Verification (push) Blocked by required conditions
58 lines
1.7 KiB
Dart
58 lines
1.7 KiB
Dart
import 'package:drift/drift.dart';
|
|
import 'package:drift_postgres/drift_postgres.dart';
|
|
import 'package:mnemo_cards_backend/user/admin_ids_service.dart';
|
|
|
|
import '../database/database.dart';
|
|
import 'task.dart' as task;
|
|
|
|
class CheckAdminsTask with task.Task {
|
|
@override
|
|
String get name => 'check_admins';
|
|
|
|
final AppDatabase _db;
|
|
|
|
CheckAdminsTask(this._db);
|
|
|
|
@override
|
|
Future<void> task() async {
|
|
// Получаем список ID админов из переменной окружения или файла
|
|
final adminIdsList = await AdminIdsService.getAdminIds();
|
|
if (adminIdsList.isEmpty) {
|
|
return;
|
|
}
|
|
|
|
List<String> adminIds = [];
|
|
for (final externalUserId in adminIdsList) {
|
|
print('$name processing admin ID: $externalUserId');
|
|
if (externalUserId.isNotEmpty) {
|
|
// Найти токен по externalUserId
|
|
final token = await _db.userDao.getTokenByExternalUserId(externalUserId);
|
|
|
|
if (token == null) {
|
|
continue;
|
|
}
|
|
|
|
// Получить пользователя по 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),
|
|
updatedAt: Value(PgDateTime(DateTime.now())),
|
|
),
|
|
);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// TODO: Implement logic to remove admin flag from users not in adminIdsList
|
|
// if needed in the future
|
|
}
|
|
|
|
@override
|
|
int get intervalSeconds => 300;
|
|
}
|