package controller import ( "ai_xhs/common" "ai_xhs/models" "ai_xhs/service" "net/http" "strconv" "github.com/gin-gonic/gin" ) // CreateFeedbackRequest 创建反馈请求 type CreateFeedbackRequest struct { FeedbackType string `json:"feedback_type" binding:"required"` Description string `json:"description" binding:"required,max=500"` ContactInfo string `json:"contact_info"` Nickname string `json:"nickname"` } // FeedbackController 反馈控制器 type FeedbackController struct { feedbackService *service.FeedbackService } // NewFeedbackController 创建反馈控制器 func NewFeedbackController(feedbackService *service.FeedbackService) *FeedbackController { return &FeedbackController{ feedbackService: feedbackService, } } // CreateFeedback 创建反馈 func (fc *FeedbackController) CreateFeedback(c *gin.Context) { var req CreateFeedbackRequest if err := c.ShouldBindJSON(&req); err != nil { common.Error(c, common.CodeInvalidParams, "参数错误: "+err.Error()) return } // 从上下文获取员工ID employeeID, exists := c.Get("employee_id") if !exists { common.Error(c, common.CodeUnauthorized, "未登录") return } feedback := &models.Feedback{ FeedbackType: req.FeedbackType, Description: req.Description, ContactInfo: req.ContactInfo, Nickname: req.Nickname, CreatedUserID: employeeID.(int), Status: "待处理", } if err := fc.feedbackService.CreateFeedback(feedback); err != nil { common.Error(c, common.CodeInternalError, "提交反馈失败: "+err.Error()) return } common.SuccessWithMessage(c, "反馈提交成功", feedback) } // GetFeedbackList 获取反馈列表 func (fc *FeedbackController) GetFeedbackList(c *gin.Context) { page, _ := strconv.Atoi(c.DefaultQuery("page", "1")) pageSize, _ := strconv.Atoi(c.DefaultQuery("page_size", "10")) feedbackType := c.Query("feedback_type") status := c.Query("status") // 从上下文获取员工ID(仅查看自己的反馈) employeeID, exists := c.Get("employee_id") if !exists { common.Error(c, common.CodeUnauthorized, "未登录") return } feedbacks, total, err := fc.feedbackService.GetFeedbackList(employeeID.(int), page, pageSize, feedbackType, status) if err != nil { common.Error(c, common.CodeInternalError, "获取反馈列表失败: "+err.Error()) return } c.JSON(http.StatusOK, common.SuccessResponseWithPage(feedbacks, total, page, pageSize, "获取成功")) } // GetFeedbackDetail 获取反馈详情 func (fc *FeedbackController) GetFeedbackDetail(c *gin.Context) { idStr := c.Param("id") id, err := strconv.Atoi(idStr) if err != nil { common.Error(c, common.CodeInvalidParams, "无效的反馈ID") return } feedback, err := fc.feedbackService.GetFeedbackByID(id) if err != nil { common.Error(c, common.CodeNotFound, "反馈不存在") return } common.SuccessWithMessage(c, "获取成功", feedback) }