committtttt

This commit is contained in:
Dev
2025-09-13 06:48:55 +03:00
commit 2d49f69be6
32 changed files with 6478 additions and 0 deletions

View File

@@ -0,0 +1,261 @@
package models
import (
"net/http"
"time"
"github.com/gin-gonic/gin"
)
// User Request/Response types
type CreateUserRequest struct {
Username string `json:"username" binding:"required,min=3,max=50"`
Email string `json:"email" binding:"required,email"`
Password string `json:"password" binding:"required,min=6"`
FirstName string `json:"firstName"`
LastName string `json:"lastName"`
Role string `json:"role"`
}
type LoginRequest struct {
Username string `json:"username" binding:"required"`
Password string `json:"password" binding:"required"`
}
type LoginResponse struct {
Token string `json:"token"`
User SafeUser `json:"user"`
}
type UpdateUserRequest struct {
FirstName string `json:"firstName"`
LastName string `json:"lastName"`
Email string `json:"email" binding:"omitempty,email"`
Active *bool `json:"active"`
Role string `json:"role"`
}
type ChangePasswordRequest struct {
CurrentPassword string `json:"currentPassword" binding:"required"`
NewPassword string `json:"newPassword" binding:"required,min=6"`
}
// Conversation Request/Response types
type CreateConversationRequest struct {
Title string `json:"title" binding:"required,min=1,max=100"`
Department string `json:"department" binding:"required"`
Priority string `json:"priority" binding:"oneof=low medium high urgent"`
Tags string `json:"tags"`
}
type UpdateConversationRequest struct {
Title string `json:"title"`
Status string `json:"status" binding:"oneof=active closed escalated"`
Department string `json:"department"`
Priority string `json:"priority" binding:"oneof=low medium high urgent"`
Tags string `json:"tags"`
AgentID *uint `json:"agentId"`
}
type CreateMessageRequest struct {
ConversationID uint `json:"conversationId" binding:"required"`
Content string `json:"content" binding:"required,min=1,max=5000"`
Type string `json:"type" binding:"oneof=text image file system"`
}
type UpdateMessageRequest struct {
Content string `json:"content" binding:"omitempty,min=1,max=5000"`
Status string `json:"status" binding:"oneof=sent delivered read"`
}
type ConversationListResponse struct {
Conversations []Conversation `json:"conversations"`
Total int64 `json:"total"`
Page int `json:"page"`
PageSize int `json:"pageSize"`
}
type MessageListResponse struct {
Messages []Message `json:"messages"`
Total int64 `json:"total"`
Page int `json:"page"`
PageSize int `json:"pageSize"`
}
type ConversationStats struct {
TotalMessages int64 `json:"totalMessages"`
AverageSentiment float64 `json:"averageSentiment"`
ResponseTime int64 `json:"responseTime"` // in seconds
FirstMessageAt time.Time `json:"firstMessageAt"`
LastMessageAt time.Time `json:"lastMessageAt"`
}
// Knowledge Base Request/Response types
type CreateKnowledgeBaseRequest struct {
Question string `json:"question" binding:"required,min=1,max=500"`
Answer string `json:"answer" binding:"required,min=1,max=5000"`
Category string `json:"category" binding:"required,min=1,max=100"`
Tags string `json:"tags"`
Priority int `json:"priority" binding:"min=1,max=10"`
}
type UpdateKnowledgeBaseRequest struct {
Question string `json:"question" binding:"omitempty,min=1,max=500"`
Answer string `json:"answer" binding:"omitempty,min=1,max=5000"`
Category string `json:"category" binding:"omitempty,min=1,max=100"`
Tags string `json:"tags"`
Priority int `json:"priority" binding:"omitempty,min=1,max=10"`
Active *bool `json:"active"`
}
type CreateKnowledgeBaseFeedbackRequest struct {
KnowledgeBaseID uint `json:"knowledgeBaseId" binding:"required"`
Helpful bool `json:"helpful"`
Comment string `json:"comment" binding:"max=500"`
}
type KnowledgeBaseSearchRequest struct {
Query string `json:"query" binding:"required,min=1,max=100"`
Category string `json:"category"`
Tags string `json:"tags"`
Page int `json:"page" binding:"min=1"`
PageSize int `json:"pageSize" binding:"min=1,max=100"`
}
type KnowledgeBaseListResponse struct {
Entries []KnowledgeBase `json:"entries"`
Total int64 `json:"total"`
Page int `json:"page"`
PageSize int `json:"pageSize"`
}
type KnowledgeBaseSearchResponse struct {
Results []KnowledgeBaseSearchResult `json:"results"`
Total int64 `json:"total"`
Query string `json:"query"`
Page int `json:"page"`
PageSize int `json:"pageSize"`
}
type KnowledgeBaseSearchResult struct {
KnowledgeBase
RelevanceScore float64 `json:"relevanceScore"`
MatchedFields []string `json:"matchedFields"`
}
type KnowledgeBaseStats struct {
TotalEntries int64 `json:"totalEntries"`
TotalViews int64 `json:"totalViews"`
AverageHelpful float64 `json:"averageHelpful"` // Average helpful rating
TopCategories []CategoryStat `json:"topCategories"`
TopTags []TagStat `json:"topTags"`
}
type CategoryStat struct {
Category string `json:"category"`
Count int64 `json:"count"`
}
type TagStat struct {
Tag string `json:"tag"`
Count int64 `json:"count"`
}
// AI Model Request/Response types
type CreateAIModelRequest struct {
Name string `json:"name" binding:"required,min=1,max=100"`
Type string `json:"type" binding:"required,oneof=openai local custom"`
Endpoint string `json:"endpoint"`
APIKey string `json:"apiKey"`
Model string `json:"model" binding:"required,min=1,max=100"`
MaxTokens int `json:"maxTokens" binding:"min=1,max=100000"`
Temperature float64 `json:"temperature" binding:"min=0,max=2"`
TopP float64 `json:"topP" binding:"min=0,max=1"`
Priority int `json:"priority" binding:"min=1,max=10"`
Description string `json:"description" binding:"max=500"`
}
type UpdateAIModelRequest struct {
Name string `json:"name" binding:"omitempty,min=1,max=100"`
Type string `json:"type" binding:"omitempty,oneof=openai local custom"`
Endpoint string `json:"endpoint"`
APIKey string `json:"apiKey"`
Model string `json:"model" binding:"omitempty,min=1,max=100"`
MaxTokens int `json:"maxTokens" binding:"omitempty,min=1,max=100000"`
Temperature float64 `json:"temperature" binding:"omitempty,min=0,max=2"`
TopP float64 `json:"topP" binding:"omitempty,min=0,max=1"`
Active *bool `json:"active"`
Priority int `json:"priority" binding:"omitempty,min=1,max=10"`
Description string `json:"description" binding:"omitempty,max=500"`
}
type AIModelListResponse struct {
Models []AIModel `json:"models"`
Total int64 `json:"total"`
Page int `json:"page"`
PageSize int `json:"pageSize"`
}
type AIInteractionListResponse struct {
Interactions []AIInteraction `json:"interactions"`
Total int64 `json:"total"`
Page int `json:"page"`
PageSize int `json:"pageSize"`
}
type AIFallbackListResponse struct {
Fallbacks []AIFallback `json:"fallbacks"`
Total int64 `json:"total"`
Page int `json:"page"`
PageSize int `json:"pageSize"`
}
type AIStats struct {
TotalInteractions int64 `json:"totalInteractions"`
TotalFallbacks int64 `json:"totalFallbacks"`
AverageResponseTime float64 `json:"averageResponseTime"` // in milliseconds
TotalTokensUsed int64 `json:"totalTokensUsed"`
TotalCost float64 `json:"totalCost"`
ModelStats []AIModelStats `json:"modelStats"`
SuccessRate float64 `json:"successRate"`
}
type AIModelStats struct {
AIModel AIModel `json:"aiModel"`
InteractionsCount int64 `json:"interactionsCount"`
FallbacksCount int64 `json:"fallbacksCount"`
AverageResponseTime float64 `json:"averageResponseTime"`
SuccessRate float64 `json:"successRate"`
TokensUsed int64 `json:"tokensUsed"`
Cost float64 `json:"cost"`
}
// Common Response types
type ErrorResponse struct {
Error string `json:"error"`
Message string `json:"message"`
Status int `json:"status"`
}
type SuccessResponse struct {
Message string `json:"message"`
Data interface{} `json:"data,omitempty"`
Status int `json:"status"`
}
// Response helpers
func NewErrorResponse(c *gin.Context, message string, statusCode int) {
c.JSON(statusCode, ErrorResponse{
Error: http.StatusText(statusCode),
Message: message,
Status: statusCode,
})
}
func NewSuccessResponse(c *gin.Context, message string, data interface{}, statusCode int) {
c.JSON(statusCode, SuccessResponse{
Message: message,
Data: data,
Status: statusCode,
})
}