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

132 lines
3.5 KiB
Go

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:"userId"`
AgentID *string `json:"agentId"`
SessionID *string `json:"sessionId"`
Pagination *paginator.Pagination `json:"pagination"`
}
type ChatHistorySessionsCreateRequest struct {
UserID uint `json:"userId" validate:"required"`
AgentID string `json:"agentId" validate:"required"`
SessionID string `json:"sessionId" 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:"sessionId" validate:"required"`
Pagination *paginator.Pagination `json:"pagination"`
}
type ChatHistoryMessagesCreateRequest struct {
SessionID string `json:"sessionId" validate:"required"`
MessageType string `json:"messageType" 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:"userId"`
AgentID string `json:"agentId"`
SessionID string `json:"sessionId"`
}
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:"sessionId"`
}
func (req ChatHistoryMessagesQueryRequestContext) ToParamRequest() ChatHistoryMessagesQueryRequest {
var request ChatHistoryMessagesQueryRequest
if sessionID := req.SessionID; sessionID != "" {
request.SessionID = sessionID
}
return request
}