132 lines
3.5 KiB
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
|
|
}
|