105 lines
2.8 KiB
Go
105 lines
2.8 KiB
Go
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)
|
||
}
|