ai_config_controller.go 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. package controller
  2. import (
  3. "net/http"
  4. "github.com/2930134478/AI-CS/backend/service"
  5. "github.com/gin-gonic/gin"
  6. )
  7. // AIConfigController 负责处理 AI 配置相关的 HTTP 请求。
  8. type AIConfigController struct {
  9. aiConfigService *service.AIConfigService
  10. userService *service.UserService
  11. }
  12. // NewAIConfigController 创建 AI 配置控制器实例。
  13. func NewAIConfigController(aiConfigService *service.AIConfigService, userService *service.UserService) *AIConfigController {
  14. return &AIConfigController{aiConfigService: aiConfigService, userService: userService}
  15. }
  16. type createAIConfigRequest struct {
  17. Provider string `json:"provider" binding:"required"`
  18. APIURL string `json:"api_url" binding:"required"`
  19. APIKey string `json:"api_key" binding:"required"`
  20. Model string `json:"model" binding:"required"`
  21. ModelType string `json:"model_type"`
  22. IsActive bool `json:"is_active"`
  23. IsPublic bool `json:"is_public"` // 是否开放给访客使用
  24. Description string `json:"description"`
  25. }
  26. type updateAIConfigRequest struct {
  27. Provider *string `json:"provider"`
  28. APIURL *string `json:"api_url"`
  29. APIKey *string `json:"api_key"`
  30. Model *string `json:"model"`
  31. ModelType *string `json:"model_type"`
  32. IsActive *bool `json:"is_active"`
  33. IsPublic *bool `json:"is_public"` // 是否开放给访客使用
  34. Description *string `json:"description"`
  35. }
  36. // CreateAIConfig 创建 AI 配置。
  37. func (a *AIConfigController) CreateAIConfig(c *gin.Context) {
  38. if !requirePermission(c, a.userService, string(service.PermSettings)) {
  39. return
  40. }
  41. userID, err := parseUintParam(c, "user_id")
  42. if err != nil {
  43. c.JSON(http.StatusBadRequest, gin.H{"error": "user_id 不合法"})
  44. return
  45. }
  46. var req createAIConfigRequest
  47. if err := c.ShouldBindJSON(&req); err != nil {
  48. c.JSON(http.StatusBadRequest, gin.H{"error": "请求参数错误"})
  49. return
  50. }
  51. config, err := a.aiConfigService.CreateAIConfig(service.CreateAIConfigInput{
  52. UserID: uint(userID),
  53. Provider: req.Provider,
  54. APIURL: req.APIURL,
  55. APIKey: req.APIKey,
  56. Model: req.Model,
  57. ModelType: req.ModelType,
  58. IsActive: req.IsActive,
  59. IsPublic: req.IsPublic,
  60. Description: req.Description,
  61. })
  62. if err != nil {
  63. c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
  64. return
  65. }
  66. c.JSON(http.StatusOK, config)
  67. }
  68. // GetAIConfig 获取 AI 配置。
  69. func (a *AIConfigController) GetAIConfig(c *gin.Context) {
  70. if !requirePermission(c, a.userService, string(service.PermSettings)) {
  71. return
  72. }
  73. id, err := parseUintParam(c, "id")
  74. if err != nil {
  75. c.JSON(http.StatusBadRequest, gin.H{"error": "id 不合法"})
  76. return
  77. }
  78. config, err := a.aiConfigService.GetAIConfig(uint(id))
  79. if err != nil {
  80. c.JSON(http.StatusNotFound, gin.H{"error": "AI 配置不存在"})
  81. return
  82. }
  83. c.JSON(http.StatusOK, config)
  84. }
  85. // ListAIConfigs 获取指定用户的所有 AI 配置。
  86. func (a *AIConfigController) ListAIConfigs(c *gin.Context) {
  87. if !requirePermission(c, a.userService, string(service.PermSettings)) {
  88. return
  89. }
  90. userID, err := parseUintParam(c, "user_id")
  91. if err != nil {
  92. c.JSON(http.StatusBadRequest, gin.H{"error": "user_id 不合法"})
  93. return
  94. }
  95. configs, err := a.aiConfigService.ListAIConfigs(uint(userID))
  96. if err != nil {
  97. c.JSON(http.StatusInternalServerError, gin.H{"error": "查询失败"})
  98. return
  99. }
  100. c.JSON(http.StatusOK, configs)
  101. }
  102. // UpdateAIConfig 更新 AI 配置。
  103. func (a *AIConfigController) UpdateAIConfig(c *gin.Context) {
  104. if !requirePermission(c, a.userService, string(service.PermSettings)) {
  105. return
  106. }
  107. id, err := parseUintParam(c, "id")
  108. if err != nil {
  109. c.JSON(http.StatusBadRequest, gin.H{"error": "id 不合法"})
  110. return
  111. }
  112. var req updateAIConfigRequest
  113. if err := c.ShouldBindJSON(&req); err != nil {
  114. c.JSON(http.StatusBadRequest, gin.H{"error": "请求参数错误"})
  115. return
  116. }
  117. config, err := a.aiConfigService.UpdateAIConfig(service.UpdateAIConfigInput{
  118. ID: uint(id),
  119. Provider: req.Provider,
  120. APIURL: req.APIURL,
  121. APIKey: req.APIKey,
  122. Model: req.Model,
  123. ModelType: req.ModelType,
  124. IsActive: req.IsActive,
  125. IsPublic: req.IsPublic,
  126. Description: req.Description,
  127. })
  128. if err != nil {
  129. c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
  130. return
  131. }
  132. c.JSON(http.StatusOK, config)
  133. }
  134. // DeleteAIConfig 删除 AI 配置。
  135. func (a *AIConfigController) DeleteAIConfig(c *gin.Context) {
  136. if !requirePermission(c, a.userService, string(service.PermSettings)) {
  137. return
  138. }
  139. id, err := parseUintParam(c, "id")
  140. if err != nil {
  141. c.JSON(http.StatusBadRequest, gin.H{"error": "id 不合法"})
  142. return
  143. }
  144. if err := a.aiConfigService.DeleteAIConfig(uint(id)); err != nil {
  145. c.JSON(http.StatusInternalServerError, gin.H{"error": "删除失败"})
  146. return
  147. }
  148. c.JSON(http.StatusOK, gin.H{"message": "删除成功"})
  149. }