Files
forkmessager/client-mobile/lib/features/chat/data/models/chat_model.dart
Халимов Рустам 0b013def2e Отображение чатов
2026-05-14 22:56:42 +03:00

117 lines
2.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:isar/isar.dart';
import '../../domain/entities/chat.dart';
import '../../domain/entities/user.dart';
import '../../domain/entities/message.dart';
import 'message_model.dart';
part 'chat_model.g.dart';
@collection
class ChatModel {
Id isarId = Isar.autoIncrement;
@Index(unique: true, replace: true)
late String id;
late String type;
late String title;
String? avatarUrl;
late List<UserModel> participants;
LastMessageModel? lastMessage;
DateTime? lastMessageTime;
int unreadCount = 0;
bool isMuted = false;
bool isPinned = false;
Chat toEntity() {
return Chat(
id: id,
type: type,
title: title,
avatarUrl: avatarUrl,
participants: participants.map((u) => u.toEntity()).toList(),
lastMessage: lastMessage?.toEntity(),
lastMessageTime: lastMessageTime,
unreadCount: unreadCount,
isMuted: isMuted,
isPinned: isPinned,
);
}
static ChatModel fromEntity(Chat chat) {
return ChatModel()
..id = chat.id
..type = chat.type
..title = chat.title
..avatarUrl = chat.avatarUrl
..participants = chat.participants?.map((u) => UserModel.fromEntity(u)).toList() ?? []
..lastMessage = chat.lastMessage != null ? LastMessageModel.fromEntity(chat.lastMessage!) : null
..lastMessageTime = chat.lastMessageTime
..unreadCount = chat.unreadCount
..isMuted = chat.isMuted
..isPinned = chat.isPinned;
}
}
@embedded
class LastMessageModel {
late String id;
late String content;
late String messageType;
DateTime? createdAt;
Message toEntity() {
return Message(
id: id,
chatId: '', // Не критично для превью в списке чатов
senderId: '',
content: content,
messageType: messageType,
createdAt: createdAt,
);
}
static LastMessageModel fromEntity(Message message) {
return LastMessageModel()
..id = message.id
..content = message.content
..messageType = message.messageType
..createdAt = message.createdAt;
}
}
@embedded
class UserModel {
late String id;
late String name;
String? avatarUrl;
String? role;
DateTime? lastSeen;
bool? isOnline;
User toEntity() {
return User(
id: id,
name: name,
avatarUrl: avatarUrl,
role: role,
lastSeen: lastSeen,
isOnline: isOnline,
);
}
static UserModel fromEntity(User user) {
return UserModel()
..id = user.id
..name = user.name
..avatarUrl = user.avatarUrl
..role = user.role
..lastSeen = user.lastSeen
..isOnline = user.isOnline;
}
}