package request import ( "narasi-ahli-be/app/database/entity" "narasi-ahli-be/utils/paginator" ) // Chat History Sessions Request DTOs type ChatHistorySessionsQueryRequest struct { UserID *uint `json:"user_id"` AgentID *string `json:"agent_id"` SessionID *string `json:"session_id"` Pagination *paginator.Pagination `json:"pagination"` } type ChatHistorySessionsCreateRequest struct { UserID uint `json:"user_id" validate:"required"` AgentID string `json:"agent_id" validate:"required"` SessionID string `json:"session_id" validate:"required"` Title *string `json:"title"` Messages []ChatMessageRequest `json:"messages"` } type ChatMessageRequest struct { Type string `json:"type" validate:"required,oneof=user assistant"` Content string `json:"content" validate:"required"` } func (req ChatHistorySessionsCreateRequest) ToEntity() *entity.ChatSessions { title := "Chat Session" if req.Title != nil { title = *req.Title } return &entity.ChatSessions{ SessionID: req.SessionID, UserID: req.UserID, AgentID: req.AgentID, Title: title, MessageCount: len(req.Messages), Status: "active", } } type ChatHistorySessionsUpdateRequest struct { Title *string `json:"title"` Status *string `json:"status" validate:"omitempty,oneof=active archived deleted"` } func (req ChatHistorySessionsUpdateRequest) ToEntity() *entity.ChatSessions { entity := &entity.ChatSessions{} if req.Title != nil { entity.Title = *req.Title } if req.Status != nil { entity.Status = *req.Status } return entity } // Chat History Messages Request DTOs type ChatHistoryMessagesQueryRequest struct { SessionID string `json:"session_id" validate:"required"` Pagination *paginator.Pagination `json:"pagination"` } type ChatHistoryMessagesCreateRequest struct { SessionID string `json:"session_id" validate:"required"` MessageType string `json:"message_type" validate:"required,oneof=user assistant"` Content string `json:"content" validate:"required"` } func (req ChatHistoryMessagesCreateRequest) ToEntity() *entity.ChatMessagesNew { return &entity.ChatMessagesNew{ SessionID: req.SessionID, MessageType: req.MessageType, Content: req.Content, } } type ChatHistoryMessagesUpdateRequest struct { Content string `json:"content" validate:"required"` } func (req ChatHistoryMessagesUpdateRequest) ToEntity() *entity.ChatMessagesNew { return &entity.ChatMessagesNew{ Content: req.Content, } } // Context Request DTOs for query parameters type ChatHistorySessionsQueryRequestContext struct { UserID string `json:"user_id"` AgentID string `json:"agent_id"` SessionID string `json:"session_id"` } func (req ChatHistorySessionsQueryRequestContext) ToParamRequest() ChatHistorySessionsQueryRequest { var request ChatHistorySessionsQueryRequest if userIDStr := req.UserID; userIDStr != "" { // Parse user ID from string to uint // This will be handled in the controller } if agentID := req.AgentID; agentID != "" { request.AgentID = &agentID } if sessionID := req.SessionID; sessionID != "" { request.SessionID = &sessionID } return request } type ChatHistoryMessagesQueryRequestContext struct { SessionID string `json:"session_id"` } func (req ChatHistoryMessagesQueryRequestContext) ToParamRequest() ChatHistoryMessagesQueryRequest { var request ChatHistoryMessagesQueryRequest if sessionID := req.SessionID; sessionID != "" { request.SessionID = sessionID } return request }