Files
forkmessager/client-mobile/lib/features/chat/data/models/chat_model.dart
T

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;
}
}