mnemo_cards/mnemo_cards_backend/lib/main.dart
Dmitry d9f23d9e2d
Some checks are pending
Backend CI / test (push) Waiting to run
Backend CI / build (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
main
2025-12-11 23:57:26 +03:00

119 lines
3.5 KiB
Dart

import 'dart:developer';
import 'dart:io';
import 'package:isar/isar.dart';
import 'package:mnemo_cards_backend/api/mnemo_shelf.dart';
import 'package:mnemo_cards_backend/cron/add_free_packs.dart';
import 'package:mnemo_cards_backend/cron/backup.dart';
import 'package:mnemo_cards_backend/cron/cron_executor.dart';
import 'package:mnemo_cards_backend/cron/generate_promocodes.dart';
import 'package:mnemo_cards_backend/discounts/discounts_manager.dart';
import 'package:mnemo_cards_backend/user/user_manager.dart';
import 'package:mnemo_cards_common_backend/mnemo_cards_common_backend.dart';
import 'package:mnemo_cards_backend/tests/test_manager.dart';
import 'api/di/injector.dart';
import 'cron/check_admins.dart';
import 'cron/check_payment.dart';
import 'cron/delete_old_archives.dart';
import 'cron/discount_campaign_task.dart';
import 'cron/tasks_seeder.dart';
import 'cron/test_generator.dart';
import 'cron/update_online_users.dart';
import 'packs/free_packs_distributor.dart';
late Isar isar;
late final String WORK_DIR;
Future<Isar> _initIsar(
String dir,
bool debugMode,
) async {
var attempt = 0;
while (attempt < 5) {
print('Attempt $attempt to initialize Isar');
try {
return isar = await IsarConnector().connect(
dir: dir,
name: 'db',
inspector: debugMode,
);
} catch (e, s) {
print('Error initializing Isar: $e');
log('Error initializing Isar: $e', error: e, stackTrace: s);
}
await Future.delayed(Duration(seconds: attempt * 10));
attempt++;
}
throw Exception('Failed to initialize Isar');
}
void main() async {
// WidgetsFlutterBinding.ensureInitialized();
// final dir = (await getApplicationDocumentsDirectory()).path;
// Чтение переменных окружения вместо CLI аргументов
final dir = Platform.environment['ISAR_DIR'] ?? 'isar';
final backupDir = Platform.environment['BACKUP_DIR'] ??
'../mnemo_cards_telegram_bot/backups/';
WORK_DIR = Platform.environment['WORK_DIR'] ?? '/root/mnemo_cards_backend';
print(
'running server in ${(await Process.run('pwd', [], runInShell: true)).stdout}',
);
// For rustore payments
final rustoreEnabled = false;
if (rustoreEnabled) {
final pythonInit = await Process.run(
workingDirectory: WORK_DIR,
'./prepare_python.sh',
[],
runInShell: true,
);
print(pythonInit.stdout);
print(pythonInit.stderr);
// if (pythonInit.stderr != null) {
// throw Exception('Not inited');
// }
} else {
log('\n\n*******\nRUSTORE IS DISABLED\n******\n\n', level: 1000);
}
// await Isar.initializeIsarCore(download: true);
final debugMode = Platform.environment['DEBUG'] == 'true' ||
Platform.environment['DEBUG'] == '1';
_initIsar(dir, debugMode).then((isar) async {
getIt.registerSingleton<Isar>(isar);
configureDependencies();
await getIt<MnemoShelf>().initV2();
// ignore: unawaited_futures
CronManager([
DeleteOldArchives(),
CheckAdminsTask(),
TestGeneratorTask(getIt.get<TestManager>()),
getIt.get<CheckPaymentTask>(),
AddFreePacks(getIt.get<FreePacksDistributor>()),
Backup(backupDir),
GeneratePromocodes(),
DiscountCampaignTask(getIt.get<DiscountsManager>()),
UpdateOnlineUsersTask(getIt.get<UserManager>()),
TasksSeederTask(),
]).init();
});
ProcessSignal.sigterm.watch().listen((signal) async {
try {
await isar.close();
} catch (e, s) {
log('Error closing Isar: $e', error: e, stackTrace: s);
print('Error closing Isar: $e');
}
exit(0);
});
}