Improve error handling in HiveCategoryRepository

This commit is contained in:
2025-07-10 18:23:17 +03:00
parent 4edde8a01b
commit adafdb88f8
@@ -1,3 +1,4 @@
import 'dart:async'; // Добавлено для Future
import 'package:hive_ce/hive.dart';
import '/data/repositories/interfaces/icategory_repository.dart';
import '/models/category.dart';
@@ -9,68 +10,109 @@ class HiveCategoryRepository implements ICategoryRepository {
@override
Future<List<Category>> getAll() async {
return _box.values.toList();
try {
return _box.values.toList();
} catch (e) {
throw Exception('Ошибка получения категорий: $e');
}
}
@override
Future<Category?> getById(String id) async {
return _box.get(id);
try {
return _box.get(id);
} catch (e) {
throw Exception('Ошибка получения категории: $e');
}
}
@override
Future<void> add(Category category) async {
await _box.put(category.id, category);
try {
await _box.put(category.id, category);
} catch (e) {
throw Exception('Ошибка добавления категории: $e');
}
}
@override
Future<void> update(Category category) async {
await add(category);
try {
await add(category);
} catch (e) {
throw Exception('Ошибка обновления категории: $e');
}
}
@override
Future<void> delete(String id) async {
await _box.delete(id);
try {
await _box.delete(id);
} catch (e) {
throw Exception('Ошибка удаления категории: $e');
}
}
@override
Future<List<Category>> getIncomeCategories() async {
return _box.values.where((c) => c.isIncome).toList();
try {
return _box.values.where((c) => c.isIncome).toList();
} catch (e) {
throw Exception('Ошибка получения категорий доходов: $e');
}
}
@override
Future<List<Category>> getExpenseCategories() async {
return _box.values.where((c) => !c.isIncome).toList();
try {
return _box.values.where((c) => !c.isIncome).toList();
} catch (e) {
throw Exception('Ошибка получения категорий расходов: $e');
}
}
// Новые методы для работы с пользователями
@override
Future<List<Category>> getAllByUser(String userId) async {
// Фильтруем все категории по userId
return _box.values.where((c) => c.userId == userId).toList();
try {
return _box.values.where((c) => c.userId == userId).toList();
} catch (e) {
throw Exception('Ошибка получения категорий пользователя: $e');
}
}
@override
Future<List<Category>> getIncomeCategoriesByUser(String userId) async {
// Получаем только категории доходов конкретного пользователя
return _box.values
.where((c) => c.userId == userId && c.isIncome)
.toList();
try {
return _box.values
.where((c) => c.userId == userId && c.isIncome)
.toList();
} catch (e) {
throw Exception('Ошибка получения категорий доходов пользователя: $e');
}
}
@override
Future<List<Category>> getExpenseCategoriesByUser(String userId) async {
// Получаем только категории расходов конкретного пользователя
return _box.values
.where((c) => c.userId == userId && !c.isIncome)
.toList();
try {
return _box.values
.where((c) => c.userId == userId && !c.isIncome)
.toList();
} catch (e) {
throw Exception('Ошибка получения категорий расходов пользователя: $e');
}
}
@override
Future<void> addAll(List<Category> categories) async {
final Map<String, Category> categoryMap = {
for (var cat in categories) cat.id: cat
};
await _box.putAll(categoryMap);
try {
final Map<String, Category> categoryMap = {
for (var cat in categories) cat.id: cat
};
await _box.putAll(categoryMap);
} catch (e) {
throw Exception('Ошибка пакетного добавления категорий: $e');
}
}
}