Files
BudgetApp/lib/models/user.dart
T
2025-06-27 23:31:16 +03:00

102 lines
4.6 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import 'package:hive_ce/hive.dart';
import '../utils/id_generator.dart';
// Указываем Hive, что это модель для хранения в базе данных
// typeId: 3 - уникальный идентификатор типа для Hive (у нас уже есть 0,1,2)
part 'user.g.dart';
@HiveType(typeId: 1003)
/// Модель пользователя приложения
/// Содержит основную информацию для идентификации пользователя
class User {
/// Уникальный идентификатор пользователя
@HiveField(0) // Поле 0 в Hive - первое поле модели
final String id;
/// Имя пользователя для отображения в интерфейсе
@HiveField(1) // Поле 1 в Hive - второе поле модели
final String name;
/// Email пользователя (может использоваться для входа в будущем)
@HiveField(2) // Поле 2 в Hive - третье поле модели
final String email;
@HiveField(3) // Поле 3 в Hive - язык пользователя
final String languageCode; // Переименовано с 'language' на 'languageCode'
@HiveField(4)
/// Дата и время последнего обновления объекта
final DateTime updatedAt;
@HiveField(5) // Новое поле для режима темы (светлая/темная)
final bool isDarkMode;
@HiveField(6) // Новое поле для валюты по умолчанию
final String defaultCurrency;
/// Конструктор пользователя
/// id генерируется автоматически, если не передан
User({
String? id, // Опциональный параметр - если null, сгенерируется автоматически
required this.name, // Обязательный параметр
required this.email, // Обязательный параметр
this.languageCode = 'ru', // Язык по умолчанию - русский
DateTime? updatedAt, // Добавлено поле updatedAt, теперь необязательное
this.isDarkMode = false, // По умолчанию светлая тема
this.defaultCurrency = 'RUB', // Валюта по умолчанию - RUB
}) : id = id ?? IdGenerator.generateId(), // Если id не передан, генерируем новый
updatedAt = updatedAt ?? DateTime.now(); // Устанавливаем текущее время по умолчанию
/// Преобразование объекта в Map для сохранения в JSON или передачи по сети
Map<String, dynamic> toMap() {
return {
'id': id,
'name': name,
'email': email,
'languageCode': languageCode, // Обновлено имя поля
'updatedAt': updatedAt.toIso8601String(), // Добавлено updatedAt в Map
'isDarkMode': isDarkMode,
'defaultCurrency': defaultCurrency,
};
}
/// Создание объекта User из Map (например, при загрузке из JSON)
factory User.fromMap(Map<String, dynamic> map) {
return User(
id: map['id'],
name: map['name'],
email: map['email'],
languageCode: map['languageCode'] ?? 'ru', // Обновлено имя поля
updatedAt: DateTime.parse(map['updatedAt']), // Добавлено updatedAt при создании из Map
isDarkMode: map['isDarkMode'] ?? false,
defaultCurrency: map['defaultCurrency'] ?? 'RUB',
);
}
/// Переопределяем toString для удобного отображения в логах
@override
String toString() {
return 'User(id: $id, name: $name, email: $email, languageCode: $languageCode, isDarkMode: $isDarkMode, defaultCurrency: $defaultCurrency)';
}
/// Метод для создания копии объекта с возможностью изменения полей
User copyWith({
String? id,
String? name,
String? email,
String? languageCode, // Обновлено имя поля
bool? isDarkMode,
String? defaultCurrency,
}) {
return User(
id: id ?? this.id,
name: name ?? this.name,
email: email ?? this.email,
languageCode: languageCode ?? this.languageCode, // Обновлено имя поля
updatedAt: DateTime.now(), // Обновляем updatedAt при каждом копировании
isDarkMode: isDarkMode ?? this.isDarkMode,
defaultCurrency: defaultCurrency ?? this.defaultCurrency,
);
}
}