committtttt
This commit is contained in:
142
backend/internal/routes/routes.go
Normal file
142
backend/internal/routes/routes.go
Normal file
@@ -0,0 +1,142 @@
|
||||
package routes
|
||||
|
||||
import (
|
||||
"github.com/gin-gonic/gin"
|
||||
|
||||
"customer-support-system/internal/auth"
|
||||
"customer-support-system/internal/handlers"
|
||||
)
|
||||
|
||||
// SetupRoutes configures all the routes for the application
|
||||
func SetupRoutes() *gin.Engine {
|
||||
// Create a new Gin engine
|
||||
r := gin.Default()
|
||||
|
||||
// Add CORS middleware
|
||||
r.Use(CORSMiddleware())
|
||||
|
||||
// Create handlers
|
||||
userHandler := handlers.NewUserHandler()
|
||||
conversationHandler := handlers.NewConversationHandler()
|
||||
knowledgeHandler := handlers.NewKnowledgeHandler()
|
||||
aiHandler := handlers.NewAIHandler()
|
||||
|
||||
// Health check endpoint
|
||||
r.GET("/health", func(c *gin.Context) {
|
||||
c.JSON(200, gin.H{
|
||||
"status": "ok",
|
||||
})
|
||||
})
|
||||
|
||||
// API version 1 group
|
||||
v1 := r.Group("/api/v1")
|
||||
{
|
||||
// Public routes (no authentication required)
|
||||
public := v1.Group("/public")
|
||||
{
|
||||
// User authentication routes
|
||||
public.POST("/register", userHandler.Register)
|
||||
public.POST("/login", userHandler.Login)
|
||||
}
|
||||
|
||||
// Protected routes (authentication required)
|
||||
protected := v1.Group("")
|
||||
protected.Use(auth.AuthMiddleware())
|
||||
{
|
||||
// User routes
|
||||
user := protected.Group("/user")
|
||||
{
|
||||
user.GET("/profile", userHandler.GetProfile)
|
||||
user.PUT("/profile", userHandler.UpdateProfile)
|
||||
user.PUT("/change-password", userHandler.ChangePassword)
|
||||
}
|
||||
|
||||
// Conversation routes
|
||||
conversations := protected.Group("/conversations")
|
||||
{
|
||||
conversations.GET("", conversationHandler.ListConversations)
|
||||
conversations.POST("", conversationHandler.CreateConversation)
|
||||
conversations.GET("/:id", conversationHandler.GetConversation)
|
||||
conversations.PUT("/:id", conversationHandler.UpdateConversation)
|
||||
conversations.DELETE("/:id", conversationHandler.DeleteConversation)
|
||||
conversations.GET("/:id/stats", conversationHandler.GetConversationStats)
|
||||
|
||||
// Message routes
|
||||
conversations.POST("/:id/messages", conversationHandler.CreateMessage)
|
||||
conversations.GET("/:id/messages", conversationHandler.GetMessages)
|
||||
conversations.PUT("/:id/messages/:messageId", conversationHandler.UpdateMessage)
|
||||
conversations.DELETE("/:id/messages/:messageId", conversationHandler.DeleteMessage)
|
||||
|
||||
// AI interaction routes
|
||||
conversations.POST("/:id/ai", conversationHandler.SendMessageWithAI)
|
||||
}
|
||||
|
||||
// Knowledge base routes
|
||||
knowledge := protected.Group("/knowledge")
|
||||
{
|
||||
knowledge.GET("", knowledgeHandler.ListKnowledgeEntries)
|
||||
knowledge.GET("/search", knowledgeHandler.SearchKnowledge)
|
||||
knowledge.GET("/categories", knowledgeHandler.GetCategories)
|
||||
knowledge.GET("/tags", knowledgeHandler.GetTags)
|
||||
knowledge.GET("/popular", knowledgeHandler.GetPopularKnowledge)
|
||||
knowledge.GET("/recent", knowledgeHandler.GetRecentKnowledge)
|
||||
knowledge.GET("/best-match", knowledgeHandler.FindBestMatch)
|
||||
knowledge.GET("/stats", knowledgeHandler.GetKnowledgeStats)
|
||||
knowledge.GET("/:id", knowledgeHandler.GetKnowledgeEntry)
|
||||
knowledge.POST("/:id/rate", knowledgeHandler.RateKnowledgeEntry)
|
||||
}
|
||||
|
||||
// AI routes
|
||||
ai := protected.Group("/ai")
|
||||
{
|
||||
ai.POST("/query", aiHandler.QueryAI)
|
||||
ai.POST("/analyze-complexity", aiHandler.AnalyzeComplexity)
|
||||
ai.GET("/models", aiHandler.GetAvailableModels)
|
||||
ai.POST("/openai", aiHandler.QueryOpenAI)
|
||||
ai.POST("/ollama", aiHandler.QueryOllama)
|
||||
}
|
||||
|
||||
// Admin routes (admin role required)
|
||||
admin := protected.Group("/admin")
|
||||
admin.Use(auth.RoleMiddleware("admin"))
|
||||
{
|
||||
// User management
|
||||
admin.GET("/users", userHandler.AdminGetUsers)
|
||||
admin.GET("/users/:id", userHandler.AdminGetUser)
|
||||
admin.PUT("/users/:id", userHandler.AdminUpdateUser)
|
||||
admin.DELETE("/users/:id", userHandler.AdminDeleteUser)
|
||||
|
||||
// Knowledge base management
|
||||
admin.POST("/knowledge", knowledgeHandler.CreateKnowledgeEntry)
|
||||
admin.PUT("/knowledge/:id", knowledgeHandler.UpdateKnowledgeEntry)
|
||||
admin.DELETE("/knowledge/:id", knowledgeHandler.DeleteKnowledgeEntry)
|
||||
}
|
||||
|
||||
// Agent routes (agent or admin role required)
|
||||
agent := protected.Group("/agent")
|
||||
agent.Use(auth.RoleMiddleware("agent", "admin"))
|
||||
{
|
||||
// Additional agent-only endpoints can be added here
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return r
|
||||
}
|
||||
|
||||
// CORSMiddleware adds CORS headers to the response
|
||||
func CORSMiddleware() gin.HandlerFunc {
|
||||
return func(c *gin.Context) {
|
||||
c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
|
||||
c.Writer.Header().Set("Access-Control-Allow-Credentials", "true")
|
||||
c.Writer.Header().Set("Access-Control-Allow-Headers", "Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization, accept, origin, Cache-Control, X-Requested-With")
|
||||
c.Writer.Header().Set("Access-Control-Allow-Methods", "POST, OPTIONS, GET, PUT, DELETE")
|
||||
|
||||
if c.Request.Method == "OPTIONS" {
|
||||
c.AbortWithStatus(204)
|
||||
return
|
||||
}
|
||||
|
||||
c.Next()
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user