narasiahli-be/app/module/communications/request/communications.request.go

91 lines
2.6 KiB
Go

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
}