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

119 lines
3.0 KiB
Go

package request
import (
"narasi-ahli-be/app/database/entity"
"narasi-ahli-be/utils/paginator"
)
// AI Chat Sessions Request DTOs
type AIChatSessionsQueryRequest struct {
Status *string `json:"status"`
Pagination *paginator.Pagination `json:"pagination"`
}
type AIChatSessionsCreateRequest struct {
Title string `json:"title" validate:"required,min=2,max=255"`
AgentID *string `json:"agentId"`
}
func (req AIChatSessionsCreateRequest) ToEntity() *entity.AIChatSessions {
return &entity.AIChatSessions{
AISessionID: "", // Will be generated in service layer
AgentID: req.AgentID,
Title: req.Title,
MessageCount: 0,
Status: "active",
}
}
type AIChatSessionsUpdateRequest struct {
Title string `json:"title" validate:"required,min=2,max=255"`
Status string `json:"status" validate:"required,oneof=active archived deleted"`
}
func (req AIChatSessionsUpdateRequest) ToEntity() *entity.AIChatSessions {
return &entity.AIChatSessions{
Title: req.Title,
Status: req.Status,
}
}
// AI Chat Messages Request DTOs
type AIChatMessagesQueryRequest struct {
SessionID uint `json:"sessionId" validate:"required"`
Pagination *paginator.Pagination `json:"pagination"`
}
type AIChatMessagesCreateRequest struct {
SessionID uint `json:"sessionId" validate:"required"`
MessageType string `json:"messageType" validate:"required,oneof=user assistant"`
Content string `json:"content" validate:"required,min=1"`
}
func (req AIChatMessagesCreateRequest) ToEntity() *entity.AIChatMessages {
return &entity.AIChatMessages{
SessionID: req.SessionID,
MessageType: req.MessageType,
Content: req.Content,
}
}
type AIChatMessagesUpdateRequest struct {
Content string `json:"content" validate:"required,min=1"`
}
func (req AIChatMessagesUpdateRequest) ToEntity() *entity.AIChatMessages {
return &entity.AIChatMessages{
Content: req.Content,
}
}
type AIChatSessionsQueryRequestContext struct {
Status string `json:"status"`
}
func (req AIChatSessionsQueryRequestContext) ToParamRequest() AIChatSessionsQueryRequest {
var request AIChatSessionsQueryRequest
if status := req.Status; status != "" {
request.Status = &status
}
return request
}
type AIChatMessagesQueryRequestContext struct {
SessionID string `json:"sessionId"`
}
func (req AIChatMessagesQueryRequestContext) ToParamRequest() AIChatMessagesQueryRequest {
var request AIChatMessagesQueryRequest
if sessionIDStr := req.SessionID; sessionIDStr != "" {
// Parse session ID from string to uint
// This will be handled in the controller
}
return request
}
// AI Chat Logs Request DTOs
type AIChatLogsQueryRequest struct {
LogType *string `json:"logType"`
Pagination *paginator.Pagination `json:"pagination"`
}
type AIChatLogsQueryRequestContext struct {
LogType string `json:"logType"`
}
func (req AIChatLogsQueryRequestContext) ToParamRequest() AIChatLogsQueryRequest {
var request AIChatLogsQueryRequest
if logType := req.LogType; logType != "" {
request.LogType = &logType
}
return request
}