compliance_handler.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package admin
  2. import (
  3. "strings"
  4. "github.com/Wei-Shaw/sub2api/internal/pkg/ip"
  5. "github.com/Wei-Shaw/sub2api/internal/pkg/response"
  6. "github.com/Wei-Shaw/sub2api/internal/server/middleware"
  7. "github.com/Wei-Shaw/sub2api/internal/service"
  8. "github.com/gin-gonic/gin"
  9. )
  10. type ComplianceHandler struct {
  11. settingService *service.SettingService
  12. }
  13. func NewComplianceHandler(settingService *service.SettingService) *ComplianceHandler {
  14. return &ComplianceHandler{settingService: settingService}
  15. }
  16. type AcceptAdminComplianceRequest struct {
  17. Phrase string `json:"phrase" binding:"required"`
  18. Language string `json:"language"`
  19. }
  20. func (h *ComplianceHandler) GetStatus(c *gin.Context) {
  21. subject, ok := middleware.GetAuthSubjectFromContext(c)
  22. if !ok {
  23. response.Unauthorized(c, "User not authenticated")
  24. return
  25. }
  26. status, err := h.settingService.GetAdminComplianceStatus(c.Request.Context(), subject.UserID)
  27. if err != nil {
  28. response.ErrorFrom(c, err)
  29. return
  30. }
  31. response.Success(c, status)
  32. }
  33. func (h *ComplianceHandler) Accept(c *gin.Context) {
  34. var req AcceptAdminComplianceRequest
  35. if err := c.ShouldBindJSON(&req); err != nil {
  36. response.BadRequest(c, "Invalid request: "+err.Error())
  37. return
  38. }
  39. subject, ok := middleware.GetAuthSubjectFromContext(c)
  40. if !ok {
  41. response.Unauthorized(c, "User not authenticated")
  42. return
  43. }
  44. status, err := h.settingService.AcceptAdminCompliance(c.Request.Context(), service.AdminComplianceAcceptInput{
  45. AdminUserID: subject.UserID,
  46. Phrase: req.Phrase,
  47. Language: req.Language,
  48. IPAddress: ip.GetClientIP(c),
  49. UserAgent: strings.TrimSpace(c.GetHeader("User-Agent")),
  50. })
  51. if err != nil {
  52. response.ErrorFrom(c, err)
  53. return
  54. }
  55. response.Success(c, status)
  56. }