91 lines
2.6 KiB
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
|
||
|
|
}
|