Отображение чатов
This commit is contained in:
@@ -0,0 +1,116 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,53 @@
|
||||
import 'package:isar/isar.dart';
|
||||
import '../../domain/entities/message.dart';
|
||||
|
||||
part 'message_model.g.dart';
|
||||
|
||||
@collection
|
||||
class MessageModel {
|
||||
Id isarId = Isar.autoIncrement;
|
||||
|
||||
@Index(unique: true, replace: true)
|
||||
late String id;
|
||||
|
||||
@Index()
|
||||
late String chatId;
|
||||
|
||||
late String senderId;
|
||||
late String content;
|
||||
late String messageType;
|
||||
|
||||
@Index()
|
||||
DateTime? createdAt;
|
||||
|
||||
DateTime? updatedAt;
|
||||
bool isRead = false;
|
||||
|
||||
// For simplicity, store media as a JSON string or ignore for now
|
||||
String? mediaJson;
|
||||
|
||||
Message toEntity() {
|
||||
return Message(
|
||||
id: id,
|
||||
chatId: chatId,
|
||||
senderId: senderId,
|
||||
content: content,
|
||||
messageType: messageType,
|
||||
createdAt: createdAt,
|
||||
updatedAt: updatedAt,
|
||||
isRead: isRead,
|
||||
);
|
||||
}
|
||||
|
||||
static MessageModel fromEntity(Message message) {
|
||||
return MessageModel()
|
||||
..id = message.id
|
||||
..chatId = message.chatId
|
||||
..senderId = message.senderId
|
||||
..content = message.content
|
||||
..messageType = message.messageType
|
||||
..createdAt = message.createdAt
|
||||
..updatedAt = message.updatedAt
|
||||
..isRead = message.isRead ?? false;
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user