Files
ai_wht_wechat/go_backend/controller/feedback_controller.go
2026-01-06 19:36:42 +08:00

105 lines
2.8 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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)
}