179 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			179 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
| import 'package:freezed_annotation/freezed_annotation.dart';
 | |
| import 'package:island/models/file.dart';
 | |
| import 'package:island/models/realm.dart';
 | |
| import 'package:island/models/account.dart';
 | |
| 
 | |
| part 'chat.freezed.dart';
 | |
| part 'chat.g.dart';
 | |
| 
 | |
| @freezed
 | |
| sealed class SnChatRoom with _$SnChatRoom {
 | |
|   const factory SnChatRoom({
 | |
|     required String id,
 | |
|     required String? name,
 | |
|     required String? description,
 | |
|     required int type,
 | |
|     @Default(false) bool isPublic,
 | |
|     @Default(false) bool isCommunity,
 | |
|     required SnCloudFile? picture,
 | |
|     required SnCloudFile? background,
 | |
|     required String? realmId,
 | |
|     required SnRealm? realm,
 | |
|     required DateTime createdAt,
 | |
|     required DateTime updatedAt,
 | |
|     required DateTime? deletedAt,
 | |
|     required List<SnChatMember>? members,
 | |
|   }) = _SnChatRoom;
 | |
| 
 | |
|   factory SnChatRoom.fromJson(Map<String, dynamic> json) =>
 | |
|       _$SnChatRoomFromJson(json);
 | |
| }
 | |
| 
 | |
| @freezed
 | |
| sealed class SnChatMessage with _$SnChatMessage {
 | |
|   const factory SnChatMessage({
 | |
|     required DateTime createdAt,
 | |
|     required DateTime updatedAt,
 | |
|     DateTime? deletedAt,
 | |
|     required String id,
 | |
|     @Default('text') String type,
 | |
|     String? content,
 | |
|     String? nonce,
 | |
|     @Default({}) Map<String, dynamic> meta,
 | |
|     @Default([]) List<String> membersMentioned,
 | |
|     DateTime? editedAt,
 | |
|     @Default([]) List<SnCloudFile> attachments,
 | |
|     @Default([]) List<SnChatReaction> reactions,
 | |
|     String? repliedMessageId,
 | |
|     String? forwardedMessageId,
 | |
|     required String senderId,
 | |
|     required SnChatMember sender,
 | |
|     required String chatRoomId,
 | |
|   }) = _SnChatMessage;
 | |
| 
 | |
|   factory SnChatMessage.fromJson(Map<String, dynamic> json) =>
 | |
|       _$SnChatMessageFromJson(json);
 | |
| }
 | |
| 
 | |
| @freezed
 | |
| sealed class SnChatReaction with _$SnChatReaction {
 | |
|   const factory SnChatReaction({
 | |
|     required DateTime createdAt,
 | |
|     required DateTime updatedAt,
 | |
|     required DateTime? deletedAt,
 | |
|     required String id,
 | |
|     required String messageId,
 | |
|     required String senderId,
 | |
|     required SnChatMember sender,
 | |
|     required String symbol,
 | |
|     required int attitude,
 | |
|   }) = _SnChatReaction;
 | |
| 
 | |
|   factory SnChatReaction.fromJson(Map<String, dynamic> json) =>
 | |
|       _$SnChatReactionFromJson(json);
 | |
| }
 | |
| 
 | |
| @freezed
 | |
| sealed class SnChatMember with _$SnChatMember {
 | |
|   const factory SnChatMember({
 | |
|     required DateTime createdAt,
 | |
|     required DateTime updatedAt,
 | |
|     required DateTime? deletedAt,
 | |
|     required String id,
 | |
|     required String chatRoomId,
 | |
|     required SnChatRoom? chatRoom,
 | |
|     required String accountId,
 | |
|     required SnAccount account,
 | |
|     required String? nick,
 | |
|     required int role,
 | |
|     required int notify,
 | |
|     required DateTime? joinedAt,
 | |
|     required DateTime? breakUntil,
 | |
|     required DateTime? timeoutUntil,
 | |
|     required bool isBot,
 | |
|     required SnAccountStatus? status,
 | |
|     // Frontend data
 | |
|     DateTime? lastTyped,
 | |
|   }) = _SnChatMember;
 | |
| 
 | |
|   factory SnChatMember.fromJson(Map<String, dynamic> json) =>
 | |
|       _$SnChatMemberFromJson(json);
 | |
| }
 | |
| 
 | |
| @freezed
 | |
| sealed class SnChatSummary with _$SnChatSummary {
 | |
|   const factory SnChatSummary({
 | |
|     required int unreadCount,
 | |
|     required SnChatMessage? lastMessage,
 | |
|   }) = _SnChatSummary;
 | |
| 
 | |
|   factory SnChatSummary.fromJson(Map<String, dynamic> json) =>
 | |
|       _$SnChatSummaryFromJson(json);
 | |
| }
 | |
| 
 | |
| class MessageChangeAction {
 | |
|   static const String create = "create";
 | |
|   static const String update = "update";
 | |
|   static const String delete = "delete";
 | |
| }
 | |
| 
 | |
| @freezed
 | |
| sealed class MessageSyncResponse with _$MessageSyncResponse {
 | |
|   const factory MessageSyncResponse({
 | |
|     @Default([]) List<SnChatMessage> messages,
 | |
|     required DateTime currentTimestamp,
 | |
|   }) = _MessageSyncResponse;
 | |
| 
 | |
|   factory MessageSyncResponse.fromJson(Map<String, dynamic> json) =>
 | |
|       _$MessageSyncResponseFromJson(json);
 | |
| }
 | |
| 
 | |
| @freezed
 | |
| sealed class ChatRealtimeJoinResponse with _$ChatRealtimeJoinResponse {
 | |
|   const factory ChatRealtimeJoinResponse({
 | |
|     required String provider,
 | |
|     required String endpoint,
 | |
|     required String token,
 | |
|     required String callId,
 | |
|     required String roomName,
 | |
|     required bool isAdmin,
 | |
|     required List<CallParticipant> participants,
 | |
|   }) = _ChatRealtimeJoinResponse;
 | |
| 
 | |
|   factory ChatRealtimeJoinResponse.fromJson(Map<String, dynamic> json) =>
 | |
|       _$ChatRealtimeJoinResponseFromJson(json);
 | |
| }
 | |
| 
 | |
| @freezed
 | |
| sealed class CallParticipant with _$CallParticipant {
 | |
|   const factory CallParticipant({
 | |
|     required String identity,
 | |
|     required String name,
 | |
|     required DateTime joinedAt,
 | |
|   }) = _CallParticipant;
 | |
| 
 | |
|   factory CallParticipant.fromJson(Map<String, dynamic> json) =>
 | |
|       _$CallParticipantFromJson(json);
 | |
| }
 | |
| 
 | |
| @freezed
 | |
| sealed class SnRealtimeCall with _$SnRealtimeCall {
 | |
|   const factory SnRealtimeCall({
 | |
|     required String id,
 | |
|     required DateTime createdAt,
 | |
|     required DateTime updatedAt,
 | |
|     required DateTime? deletedAt,
 | |
|     required DateTime? endedAt,
 | |
|     required String senderId,
 | |
|     required SnChatMember sender,
 | |
|     required String roomId,
 | |
|     required SnChatRoom room,
 | |
|     required Map<String, dynamic> upstreamConfig,
 | |
|     String? providerName,
 | |
|     String? sessionId,
 | |
|   }) = _SnRealtimeCall;
 | |
| 
 | |
|   factory SnRealtimeCall.fromJson(Map<String, dynamic> json) =>
 | |
|       _$SnRealtimeCallFromJson(json);
 | |
| }
 |