Improve error handling in HiveCategoryRepository
This commit is contained in:
@@ -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');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user