email_notification_config_controller.go 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. package controller
  2. import (
  3. "net/http"
  4. "strings"
  5. "github.com/2930134478/AI-CS/backend/service"
  6. "github.com/gin-gonic/gin"
  7. )
  8. // EmailNotificationConfigController 离线邮件通知配置
  9. type EmailNotificationConfigController struct {
  10. configSvc *service.EmailNotificationConfigService
  11. offline *service.OfflineEmailService
  12. users *service.UserService
  13. }
  14. // NewEmailNotificationConfigController 创建控制器
  15. func NewEmailNotificationConfigController(
  16. configSvc *service.EmailNotificationConfigService,
  17. offline *service.OfflineEmailService,
  18. users *service.UserService,
  19. ) *EmailNotificationConfigController {
  20. return &EmailNotificationConfigController{
  21. configSvc: configSvc,
  22. offline: offline,
  23. users: users,
  24. }
  25. }
  26. // Get GET /agent/email-notification-config
  27. func (e *EmailNotificationConfigController) Get(c *gin.Context) {
  28. if !requirePermission(c, e.users, string(service.PermSettings)) {
  29. return
  30. }
  31. if _, err := parseUintQuery(c, "user_id"); err != nil {
  32. c.JSON(http.StatusBadRequest, gin.H{"error": "user_id 不合法"})
  33. return
  34. }
  35. result, err := e.configSvc.GetForAPI()
  36. if err != nil {
  37. c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
  38. return
  39. }
  40. c.JSON(http.StatusOK, result)
  41. }
  42. // Update PUT /agent/email-notification-config
  43. func (e *EmailNotificationConfigController) Update(c *gin.Context) {
  44. if !requirePermission(c, e.users, string(service.PermSettings)) {
  45. return
  46. }
  47. var req struct {
  48. UserID uint `json:"user_id" binding:"required"`
  49. Enabled *bool `json:"enabled"`
  50. SMTPHost *string `json:"smtp_host"`
  51. SMTPPort *int `json:"smtp_port"`
  52. SMTPUser *string `json:"smtp_user"`
  53. SMTPPassword *string `json:"smtp_password"`
  54. FromEmail *string `json:"from_email"`
  55. FromName *string `json:"from_name"`
  56. OfflineDelaySeconds *int `json:"offline_delay_seconds"`
  57. }
  58. if err := c.ShouldBindJSON(&req); err != nil {
  59. c.JSON(http.StatusBadRequest, gin.H{"error": "请求参数错误"})
  60. return
  61. }
  62. result, err := e.configSvc.Update(req.UserID, service.UpdateEmailNotificationConfigInput{
  63. Enabled: req.Enabled,
  64. SMTPHost: req.SMTPHost,
  65. SMTPPort: req.SMTPPort,
  66. SMTPUser: req.SMTPUser,
  67. SMTPPassword: req.SMTPPassword,
  68. FromEmail: req.FromEmail,
  69. FromName: req.FromName,
  70. OfflineDelaySeconds: req.OfflineDelaySeconds,
  71. })
  72. if err != nil {
  73. c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
  74. return
  75. }
  76. c.JSON(http.StatusOK, result)
  77. }
  78. // Reset DELETE /agent/email-notification-config
  79. func (e *EmailNotificationConfigController) Reset(c *gin.Context) {
  80. if !requirePermission(c, e.users, string(service.PermSettings)) {
  81. return
  82. }
  83. userID, err := parseUintQuery(c, "user_id")
  84. if err != nil {
  85. c.JSON(http.StatusBadRequest, gin.H{"error": "user_id 不合法"})
  86. return
  87. }
  88. result, err := e.configSvc.ResetToEnv(uint(userID))
  89. if err != nil {
  90. c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
  91. return
  92. }
  93. c.JSON(http.StatusOK, result)
  94. }
  95. // SendTest POST /agent/email-notification-config/test
  96. func (e *EmailNotificationConfigController) SendTest(c *gin.Context) {
  97. if !requirePermission(c, e.users, string(service.PermSettings)) {
  98. return
  99. }
  100. var req struct {
  101. UserID uint `json:"user_id" binding:"required"`
  102. To string `json:"to" binding:"required"`
  103. }
  104. if err := c.ShouldBindJSON(&req); err != nil {
  105. c.JSON(http.StatusBadRequest, gin.H{"error": "请求参数错误"})
  106. return
  107. }
  108. userSummary, err := e.users.GetUser(req.UserID)
  109. if err != nil || userSummary == nil || userSummary.Role != "admin" {
  110. c.JSON(http.StatusForbidden, gin.H{"error": "仅管理员可发送测试邮件"})
  111. return
  112. }
  113. to := strings.TrimSpace(req.To)
  114. if to == "" {
  115. c.JSON(http.StatusBadRequest, gin.H{"error": "收件邮箱不能为空"})
  116. return
  117. }
  118. if err := e.offline.SendTestEmail(to); err != nil {
  119. c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
  120. return
  121. }
  122. c.JSON(http.StatusOK, gin.H{"message": "测试邮件已发送"})
  123. }