71 lines
3.2 KiB
Dart
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();
|
|
}
|
|
}
|