Files
ai_wht_wechat/go_backend/controller/feedback_controller.go

105 lines
2.8 KiB
Go
Raw Permalink Normal View History

2026-01-06 19:36:42 +08:00
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)
}