import 'package:equatable/equatable.dart'; import 'package:hive_ce/hive.dart'; import '../../utils/id_generator.dart'; part 'tag.g.dart'; @HiveType(typeId: 1001) class Tag extends Equatable { @HiveField(0) /// Уникальный идентификатор тега final String id; @HiveField(1) /// Название тега (например: "Важное", "Работа") final String name; @HiveField(3) /// Дата и время последнего обновления объекта final DateTime updatedAt; /// Конструктор с обязательными параметрами Tag({ String? id, required this.name, // Комментарий: Добавляем userId в конструктор как обязательный параметр. // Теперь при создании тега необходимо будет указать, какому пользователю он принадлежит. DateTime? updatedAt, // Добавлено поле updatedAt, теперь необязательное }) : id = id ?? IdGenerator.generateId(), updatedAt = updatedAt ?? DateTime.now(); // Устанавливаем текущее время по умолчанию /// Преобразование объекта в Map Map toMap() { return { 'id': id, 'name': name, // Комментарий: Добавляем userId в Map. Это нужно для сохранения // данных в форматах, которые не работают напрямую с объектами Dart (например, при отправке на сервер). 'updatedAt': updatedAt.toIso8601String(), // Добавлено updatedAt в Map }; } /// Создание объекта из Map factory Tag.fromMap(Map map) { return Tag( id: map['id'], name: map['name'], // Комментарий: Извлекаем userId из Map при создании объекта. // Это позволит восстановить полный объект Tag из данных, например, из базы данных. updatedAt: DateTime.parse(map['updatedAt']), // Добавлено updatedAt при создании из Map ); } /// Метод для создания копии объекта с возможностью изменения полей Tag copyWith({ String? id, String? name, String? userId, }) { return Tag( id: id ?? this.id, name: name ?? this.name, updatedAt: DateTime.now(), // Обновляем updatedAt при каждом копировании ); } // Используем Equatable для сравнения объектов по их свойствам. // В данном случае, мы считаем теги уникальными по их 'id'. @override List get props => [id]; }