feat: реализовать привязку тегов к пользователю

This commit is contained in:
2025-06-10 23:33:07 +03:00
parent 1b1fe1e89f
commit fbefda5042
4 changed files with 41 additions and 2 deletions
@@ -31,4 +31,13 @@ class HiveTagRepository implements ITagRepository {
Future<void> delete(String id) async {
await _box.delete(id);
}
// Комментарий: Реализуем новый метод, объявленный в интерфейсе ITagRepository.
@override
Future<List<Tag>> getAllByUser(String userId) async {
// Комментарий: Мы используем метод `where` для фильтрации всех записей в хранилище Hive.
// Он перебирает все теги (`_box.values`) и возвращает только те,
// у которых поле `userId` совпадает с идентификатором, переданным в метод.
return _box.values.where((tag) => tag.userId == userId).toList();
}
}
@@ -6,4 +6,10 @@ abstract class ITagRepository {
Future<void> add(Tag tag);
Future<void> update(Tag tag);
Future<void> delete(String id);
// Комментарий: Добавляем новый абстрактный метод в интерфейс.
// Все классы, которые реализуют этот интерфейс, должны будут предоставить
// реализацию этого метода. Это гарантирует, что наш репозиторий
// сможет получать теги для конкретного пользователя.
Future<List<Tag>> getAllByUser(String userId);
}
+15
View File
@@ -13,10 +13,19 @@ class Tag {
/// Название тега (например: "Важное", "Работа")
final String name;
// Комментарий: Добавляем новое поле для хранения идентификатора пользователя.
// Это позволит нам связать каждый тег с конкретным пользователем.
// Мы используем аннотацию @HiveField(2), чтобы указать Hive, как сохранять это поле.
@HiveField(2)
final String userId;
/// Конструктор с обязательными параметрами
Tag({
String? id,
required this.name,
// Комментарий: Добавляем userId в конструктор как обязательный параметр.
// Теперь при создании тега необходимо будет указать, какому пользователю он принадлежит.
required this.userId,
}) : id = id ?? IdGenerator.generateId();
/// Преобразование объекта в Map
@@ -24,6 +33,9 @@ class Tag {
return {
'id': id,
'name': name,
// Комментарий: Добавляем userId в Map. Это нужно для сохранения
// данных в форматах, которые не работают напрямую с объектами Dart (например, при отправке на сервер).
'userId': userId,
};
}
@@ -32,6 +44,9 @@ class Tag {
return Tag(
id: map['id'],
name: map['name'],
// Комментарий: Извлекаем userId из Map при создании объекта.
// Это позволяет восстановить полный объект Tag из данных, например, из базы данных.
userId: map['userId'],
);
}
}
+11 -2
View File
@@ -2,28 +2,37 @@ import '../models/tag.dart';
/// Утилиты для работы с тегами
class TagUtils {
/// Возвращает список предопределенных тегов
static List<Tag> getDefaultTags() {
// Комментарий: Мы изменили сигнатуру метода, добавив параметр `userId`.
// Это необходимо, потому что конструктор `Tag` теперь требует `userId`.
/// Возвращает список предопределенных тегов для конкретного пользователя
static List<Tag> getDefaultTags(String userId) {
return [
Tag(
id: 'tag_important',
name: 'Важное',
// Комментарий: Передаем `userId` при создании каждого тега по умолчанию.
// Таким образом, эти теги будут принадлежать конкретному пользователю.
userId: userId,
),
Tag(
id: 'tag_work',
name: 'Работа',
userId: userId,
),
Tag(
id: 'tag_family',
name: 'Семья',
userId: userId,
),
Tag(
id: 'tag_friends',
name: 'Друзья',
userId: userId,
),
Tag(
id: 'tag_holiday',
name: 'Отпуск',
userId: userId,
),
];
}