Files
BudgetApp/lib/data/database/hive_service.dart
T

71 lines
3.2 KiB
Dart

import 'package:hive_ce_flutter/hive_flutter.dart';
import '../../models/app_settings.dart';
import '../../models/category.dart';
import '../../models/global_settings.dart';
import '../../models/sms_handler_settings.dart';
import '../../models/sms_message.dart';
import '../../models/tag.dart';
import '../../models/transaction_record.dart';
import '../../models/user.dart';
import 'package:budget_app/hive/hive_registrar.g.dart';
/// Сервис для управления Hive Box.
/// Отвечает за инициализацию, открытие и закрытие глобальных и пользовательских хранилищ.
class HiveService {
// --- Глобальные Box ---
// Эти хранилища не зависят от пользователя и инициализируются один раз.
static late final Box<User> users;
static late final Box<GlobalSettings> globalSettings;
/// Инициализация глобальных Hive Box.
/// Должен вызываться при старте приложения.
static Future<void> initGlobalBoxes() async {
await Hive.initFlutter();
// Регистрация адаптеров Hive...
Hive.registerAdapters();
// Открытие глобальных хранилищ
users = await Hive.openBox<User>('users');
globalSettings = await Hive.openBox<GlobalSettings>('global_settings');
}
// --- Пользовательские Box ---
// Эти хранилища привязаны к конкретному пользователю.
// Они открываются после входа пользователя в систему.
static late Box<Category> categories;
static late Box<Tag> tags;
static late Box<TransactionRecord> transactions;
static late Box<AppSettings> appSettings;
static late Box<SmsHandlerSettings> smsHandlerSettings;
static late Box<SmsMessage> smsMessages;
/// Инициализация Hive Box для конкретного пользователя.
/// [userId] - Уникальный идентификатор пользователя.
static Future<void> initUserBoxes(String userId) async {
// Открываем Box'ы с именами, включающими userId для изоляции данных.
// Например: 'categories_user123'
categories = await Hive.openBox<Category>('categories_\$userId');
tags = await Hive.openBox<Tag>('tags_\$userId');
transactions = await Hive.openBox<TransactionRecord>(
'transactions_\$userId',
);
appSettings = await Hive.openBox<AppSettings>('app_settings_\$userId');
smsHandlerSettings = await Hive.openBox<SmsHandlerSettings>(
'sms_handler_settings_\$userId',
);
smsMessages = await Hive.openBox<SmsMessage>('sms_messages_\$userId');
}
/// Закрытие пользовательских Hive Box.
/// Должен вызываться при выходе пользователя из системы.
static Future<void> closeUserBoxes() async {
await categories.close();
await tags.close();
await transactions.close();
await appSettings.close();
await smsHandlerSettings.close();
await smsMessages.close();
}
}