117 lines
2.6 KiB
Dart
117 lines
2.6 KiB
Dart
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;
|
|
}
|
|
}
|