Files
kefu_cloud/server/internal/handler/router.go
T
yml2213 318ba8a563 实现租户系统设置落库:欢迎语、工作时间与通知开关
- 新增 TenantSetting 模型与 /api/settings 读写接口
- 设置页接通基本资料、自动回复、工作时间、通知偏好
- Widget 初始化使用欢迎语/离线提示,非工作时间不自动分配
- 补充设置持久化与 Widget 提示集成测试
2026-07-15 11:27:15 +08:00

116 lines
3.8 KiB
Go

package handler
import (
"github.com/gin-gonic/gin"
"kefu-sys/server/internal/middleware"
)
func SetupRoutes(r *gin.Engine) {
auth := NewAuthHandler()
session := NewSessionHandler()
customer := NewCustomerHandler()
knowledge := NewKnowledgeHandler()
stats := NewStatisticsHandler()
admin := NewAdminHandler()
channel := NewChannelHandler()
settings := NewSettingsHandler()
ws := NewWsHandler()
widget := NewWidgetHandler()
api := r.Group("/api")
// 公开接口
api.POST("/login", auth.Login)
// widget 接口
widgetApi := api.Group("/widget")
widgetApi.POST("/init", widget.Init)
widgetApi.GET("/init", widget.Init)
widgetApi.POST("/message", widget.SendMessage)
widgetApi.POST("/leave-message", widget.LeaveMessage)
widgetApi.GET("/messages", widget.GetMessages)
widgetApi.GET("/ws", widget.Connect)
widgetApi.POST("/rating", widget.SubmitRating)
// 需要认证的接口
authRequired := api.Group("")
authRequired.Use(middleware.AuthRequired())
{
// WebSocket
authRequired.GET("/ws", ws.Connect)
// 会话管理
authRequired.GET("/agents/available", session.ListAvailableAgents)
sessions := authRequired.Group("/sessions")
sessions.GET("", session.List)
sessions.GET("/:id", session.Get)
sessions.POST("", session.Create)
sessions.POST("/:id/assign", session.Assign)
sessions.POST("/:id/transfer", session.Transfer)
sessions.POST("/:id/end", session.End)
sessions.PUT("/:id/priority", session.UpdatePriority)
sessions.POST("/:id/messages", session.SendMessage)
sessions.POST("/:id/read", session.MarkRead)
sessions.POST("/:id/notes", session.AddNote)
// 客户管理
customers := authRequired.Group("/customers")
customers.GET("", customer.List)
customers.GET("/:id", customer.Get)
customers.POST("", customer.Create)
customers.PUT("/:id", customer.Update)
customers.DELETE("/:id", customer.Delete)
// 知识库
kb := authRequired.Group("/knowledge")
kb.GET("/categories", knowledge.ListCategories)
kb.POST("/categories", knowledge.CreateCategory)
kb.GET("/entries", knowledge.ListEntries)
kb.POST("/entries", knowledge.CreateEntry)
kb.PUT("/entries/:id", knowledge.UpdateEntry)
kb.DELETE("/entries/:id", knowledge.DeleteEntry)
// 渠道设置(租户级)
channels := authRequired.Group("/channels")
channels.GET("", channel.List)
channels.POST("", channel.Create)
channels.PUT("/:id", channel.Update)
// 租户系统设置
settingsGroup := authRequired.Group("/settings")
settingsGroup.GET("", settings.Get)
settingsGroup.PUT("", settings.Update)
// 统计
statistics := authRequired.Group("/statistics")
statistics.GET("/kpi", stats.KPIs)
statistics.GET("/trend", stats.SessionTrend)
statistics.GET("/response-distribution", stats.ResponseDistribution)
statistics.GET("/performance", stats.AgentPerformance)
statistics.GET("/channels", stats.ChannelDistribution)
// 管理端接口(需要管理员权限)
adminGroup := authRequired.Group("/admin")
adminGroup.Use(middleware.PlatformRequired())
{
adminGroup.GET("/stats", admin.Stats)
adminGroup.GET("/tenants", admin.ListTenants)
adminGroup.GET("/tenants/:id", admin.GetTenant)
adminGroup.POST("/tenants", admin.CreateTenant)
adminGroup.PUT("/tenants/:id", admin.UpdateTenant)
adminGroup.POST("/tenants/:id/suspend", admin.SuspendTenant)
adminGroup.POST("/tenants/:id/resume", admin.ResumeTenant)
adminGroup.GET("/plans", admin.ListPlans)
adminGroup.POST("/plans", admin.CreatePlan)
adminGroup.PUT("/plans/:id", admin.UpdatePlan)
adminGroup.GET("/logs", admin.ListLogs)
adminGroup.GET("/announcements", admin.ListAnnouncements)
adminGroup.POST("/announcements", admin.CreateAnnouncement)
adminGroup.PUT("/announcements/:id", admin.UpdateAnnouncement)
adminGroup.DELETE("/announcements/:id", admin.DeleteAnnouncement)
}
}
}