package request import ( "narasi-ahli-be/app/database/entity" "narasi-ahli-be/utils/paginator" ) // Conversations Request DTOs type ConversationsQueryRequest struct { Pagination *paginator.Pagination `json:"pagination"` } type ConversationsCreateRequest struct { Participant2ID uint `json:"participant2Id" validate:"required"` } func (req ConversationsCreateRequest) ToEntity() *entity.Conversations { return &entity.Conversations{ Participant1ID: 0, // Will be set in service layer Participant2ID: req.Participant2ID, } } // Chat Messages Request DTOs type ChatMessagesQueryRequest struct { ConversationID uint `json:"conversationId" validate:"required"` Pagination *paginator.Pagination `json:"pagination"` } type ChatMessagesCreateRequest struct { ConversationID uint `json:"conversationId" validate:"required"` MessageText string `json:"messageText"` MessageType string `json:"messageType" validate:"required,oneof=text image file audio"` } func (req ChatMessagesCreateRequest) ToEntity() *entity.ChatMessages { return &entity.ChatMessages{ ConversationID: req.ConversationID, SenderID: 0, // Will be set in service layer MessageText: &req.MessageText, MessageType: req.MessageType, IsRead: false, } } type ChatMessagesFileUploadRequest struct { ConversationID uint `json:"conversationId" validate:"required"` MessageType string `json:"messageType" validate:"required,oneof=image file audio"` FileName string `json:"fileName"` FileSize int64 `json:"fileSize"` } func (req ChatMessagesFileUploadRequest) ToEntity(fileURL string) *entity.ChatMessages { return &entity.ChatMessages{ ConversationID: req.ConversationID, SenderID: 0, // Will be set in service layer MessageType: req.MessageType, FileURL: &fileURL, FileName: &req.FileName, FileSize: &req.FileSize, IsRead: false, } } type ChatMessagesMarkReadRequest struct { MessageID uint `json:"messageId" validate:"required"` } type ConversationsQueryRequestContext struct { // No specific query parameters for conversations list } func (req ConversationsQueryRequestContext) ToParamRequest() ConversationsQueryRequest { return ConversationsQueryRequest{} } type ChatMessagesQueryRequestContext struct { ConversationID string `json:"conversationId"` } func (req ChatMessagesQueryRequestContext) ToParamRequest() ChatMessagesQueryRequest { var request ChatMessagesQueryRequest if conversationIDStr := req.ConversationID; conversationIDStr != "" { // Parse conversation ID from string to uint // This will be handled in the controller } return request }