feat: реализовать привязку тегов к пользователю
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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'],
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
),
|
||||
];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user