forked from eatvio/eatvio_app
71 lines
2.5 KiB
Dart
71 lines
2.5 KiB
Dart
import 'package:eatvio_app/features/chat/models/chat_message_model.dart';
|
|
import 'package:eatvio_app/features/plans/models/chosen_plan_model.dart';
|
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
|
|
|
part 'chat_room_pagination_model.freezed.dart';
|
|
part 'chat_room_pagination_model.g.dart';
|
|
|
|
@freezed
|
|
abstract class ChatRoomPaginationModel with _$ChatRoomPaginationModel {
|
|
const factory ChatRoomPaginationModel({
|
|
@JsonKey(name: "chatRooms") required ChatRooms chatRooms,
|
|
@JsonKey(name: "number_of_unread_chat_rooms") required int unreadChatsCount,
|
|
}) = _ChatRoomPreviewModel;
|
|
|
|
factory ChatRoomPaginationModel.fromJson(Map<String, dynamic> json) => _$ChatRoomPaginationModelFromJson(json);
|
|
}
|
|
|
|
@freezed
|
|
abstract class ChatRooms with _$ChatRooms {
|
|
const factory ChatRooms({
|
|
@JsonKey(name: "data") required List<ChatRoom> data,
|
|
@JsonKey(name: "last_page") required int lastPage,
|
|
@JsonKey(name: "current_page") required int currentPage,
|
|
}) = _ChatRooms;
|
|
|
|
factory ChatRooms.fromJson(Map<String, dynamic> json) => _$ChatRoomsFromJson(json);
|
|
}
|
|
|
|
@freezed
|
|
abstract class ChatRoom with _$ChatRoom {
|
|
const factory ChatRoom({
|
|
@JsonKey(name: "id") required String id,
|
|
@JsonKey(name: "room_name") required String roomName,
|
|
@JsonKey(name: "last_message", fromJson: parseLastMessage) required ChatMessageModel? lastMessage,
|
|
@JsonKey(name: "users") required Users users,
|
|
@JsonKey(name: "unread_messages_count") required int unreadMessagesCount,
|
|
@JsonKey(name: 'chosen_plan', fromJson: parseChosenPlan) required ChosenPlanModel? chosenPlan,
|
|
}) = _ChatRoom;
|
|
|
|
factory ChatRoom.fromJson(Map<String, dynamic> json) => _$ChatRoomFromJson(json);
|
|
}
|
|
|
|
ChatMessageModel? parseLastMessage(dynamic json) {
|
|
if (json is List) {
|
|
return null;
|
|
}
|
|
return ChatMessageModel.fromJson(json);
|
|
}
|
|
|
|
@freezed
|
|
abstract class Users with _$Users {
|
|
const factory Users({
|
|
@JsonKey(name: "from_chat_user") required ChatUser fromChatUser,
|
|
@JsonKey(name: "to_chat_user") required ChatUser toChatUser,
|
|
}) = _Users;
|
|
|
|
factory Users.fromJson(Map<String, dynamic> json) => _$UsersFromJson(json);
|
|
}
|
|
|
|
@freezed
|
|
abstract class ChatUser with _$ChatUser {
|
|
const factory ChatUser({
|
|
@JsonKey(name: "id") required int id,
|
|
@JsonKey(name: "name") required String name,
|
|
@JsonKey(name: "profile_photo_path") required String? profilePhotoPath,
|
|
@JsonKey(name: "profile_photo_url") required String profilePhotoUrl,
|
|
}) = _ChatUser;
|
|
|
|
factory ChatUser.fromJson(Map<String, dynamic> json) => _$ChatUserFromJson(json);
|
|
}
|