findOrCreateGroupConversation static method
Implementation
static Future<ChatModel> findOrCreateGroupConversation({
int? conversationId,
List<String>? groupUserIds,
String? groupName,
String? picture,
}) async {
UserStatusHelper.setMyLastSeenAt();
try {
if (conversationId != null) {
// Tìm group chat hiện có
final existingChat = await getFromTable('chats').select('''
*,
chat_members (
user_id,
is_admin,
joined_at,
latest_seen_at
)
''').eq('id', conversationId).eq('is_group', true).single();
if (existingChat.isNotEmpty) {
return ChatModel.fromJson(existingChat);
}
}
// Tạo group chat mới
final timestamp = DateTime.now().millisecondsSinceEpoch;
final id = conversationId ?? timestamp;
// 1. Tạo chat mới
await getFromTable('chats').insert({
'id': id,
'name': groupName,
'picture': picture,
'is_group': true,
'created_by': loggedUsername,
'created_at': DateTime.now().toIso8601String(),
'encryption_key': EncryptionHelper.generateEncryptKey(),
});
// 2. Thêm các thành viên
final members = [...groupUserIds!, loggedUsername].map((userId) => ({
'chat_id': id,
'user_id': userId,
'joined_at': timestamp,
'latest_seen_at': timestamp,
'is_admin': userId == loggedUsername, // Creator là admin
}));
await getFromTable('chat_members').insert(members.toList());
return (await findConversationById(id))!;
} catch (e) {
chatV2Print('Error in findOrCreateGroupConversation: $e');
throw e;
}
}