123 lines
3.3 KiB
Go
123 lines
3.3 KiB
Go
package request
|
|
|
|
import (
|
|
"narasi-ahli-be/app/database/entity"
|
|
"narasi-ahli-be/utils/paginator"
|
|
"strconv"
|
|
"time"
|
|
)
|
|
|
|
// Chat Session Requests
|
|
type ChatSessionQueryRequest struct {
|
|
Type *string `json:"type"` // 'personal' or 'group'
|
|
Pagination *paginator.Pagination `json:"pagination"`
|
|
}
|
|
|
|
type ChatSessionCreateRequest struct {
|
|
Name *string `json:"name" validate:"omitempty,min=2,max=255"` // null for personal chat
|
|
Type string `json:"type" validate:"required,oneof=personal group"`
|
|
UserIDs []uint `json:"userIds" validate:"required,min=1"` // participants (excluding creator)
|
|
}
|
|
|
|
func (req ChatSessionCreateRequest) ToEntity(createdBy uint) *entity.ChatSessions {
|
|
return &entity.ChatSessions{
|
|
Name: req.Name,
|
|
Type: req.Type,
|
|
CreatedBy: createdBy,
|
|
}
|
|
}
|
|
|
|
type ChatSessionUpdateRequest struct {
|
|
Name *string `json:"name" validate:"omitempty,min=2,max=255"`
|
|
}
|
|
|
|
func (req ChatSessionUpdateRequest) ToEntity() *entity.ChatSessions {
|
|
return &entity.ChatSessions{
|
|
Name: req.Name,
|
|
}
|
|
}
|
|
|
|
type ChatSessionQueryRequestContext struct {
|
|
Type string `json:"type"`
|
|
}
|
|
|
|
func (req ChatSessionQueryRequestContext) ToParamRequest() ChatSessionQueryRequest {
|
|
var request ChatSessionQueryRequest
|
|
|
|
if chatType := req.Type; chatType != "" {
|
|
request.Type = &chatType
|
|
}
|
|
|
|
return request
|
|
}
|
|
|
|
// Chat Message Requests
|
|
type ChatMessageQueryRequest struct {
|
|
ChatSessionID uint `json:"chatSessionId" validate:"required"`
|
|
UserID uint `json:"userId"` // Will be set in service layer
|
|
Pagination *paginator.Pagination `json:"pagination"`
|
|
}
|
|
|
|
type ChatMessageCreateRequest struct {
|
|
ChatSessionID uint `json:"chatSessionId" validate:"required"`
|
|
Message string `json:"message" validate:"required,min=1,max=1000"`
|
|
MessageType string `json:"messageType" validate:"omitempty,oneof=text image file user assistant"`
|
|
}
|
|
|
|
func (req ChatMessageCreateRequest) ToEntity(senderID uint) *entity.ChatMessages {
|
|
messageType := req.MessageType
|
|
if messageType == "" {
|
|
messageType = "text"
|
|
}
|
|
|
|
return &entity.ChatMessages{
|
|
ChatSessionID: req.ChatSessionID,
|
|
SenderID: senderID,
|
|
Message: req.Message,
|
|
MessageType: messageType,
|
|
}
|
|
}
|
|
|
|
type ChatMessageUpdateRequest struct {
|
|
Message string `json:"message" validate:"required,min=1,max=1000"`
|
|
}
|
|
|
|
func (req ChatMessageUpdateRequest) ToEntity() *entity.ChatMessages {
|
|
return &entity.ChatMessages{
|
|
Message: req.Message,
|
|
IsEdited: true,
|
|
EditedAt: &time.Time{},
|
|
}
|
|
}
|
|
|
|
type ChatMessageQueryRequestContext struct {
|
|
ChatSessionID string `json:"chatSessionId"`
|
|
}
|
|
|
|
func (req ChatMessageQueryRequestContext) ToParamRequest() ChatMessageQueryRequest {
|
|
var request ChatMessageQueryRequest
|
|
|
|
if chatSessionId := req.ChatSessionID; chatSessionId != "" {
|
|
chatSessionIdUint, err := strconv.ParseUint(chatSessionId, 10, 0)
|
|
if err == nil {
|
|
request.ChatSessionID = uint(chatSessionIdUint)
|
|
}
|
|
}
|
|
|
|
return request
|
|
}
|
|
|
|
// Chat Participant Requests
|
|
type ChatParticipantCreateRequest struct {
|
|
ChatSessionID uint `json:"chatSessionId" validate:"required"`
|
|
UserID uint `json:"userId" validate:"required"`
|
|
}
|
|
|
|
func (req ChatParticipantCreateRequest) ToEntity() *entity.ChatParticipants {
|
|
return &entity.ChatParticipants{
|
|
ChatSessionID: req.ChatSessionID,
|
|
UserID: req.UserID,
|
|
IsActive: true,
|
|
}
|
|
}
|