package handler import ( "strconv" "github.com/casehub/ticket-workbench/internal/dto" "github.com/casehub/ticket-workbench/internal/middleware" "github.com/casehub/ticket-workbench/internal/service" "github.com/gin-gonic/gin" "gorm.io/gorm" ) func ListTickets(db *gorm.DB) gin.HandlerFunc { return func(c *gin.Context) { var query dto.TicketListQuery if err := c.ShouldBindQuery(&query); err != nil { c.JSON(200, dto.Fail("参数错误")) return } if query.Page <= 0 { query.Page = 1 } if query.PageSize <= 0 { query.PageSize = 20 } result, err := service.ListTickets(db, query.Status, query.Category, query.Priority, query.Keyword, query.Page, query.PageSize) if err != nil { c.JSON(200, dto.Fail("查询失败")) return } c.JSON(200, dto.Success(result)) } } func GetTicket(db *gorm.DB) gin.HandlerFunc { return func(c *gin.Context) { idStr := c.Param("id") id, err := strconv.Atoi(idStr) if err != nil { c.JSON(200, dto.Fail("参数错误")) return } ticket, err := service.GetTicketByID(db, id) if err != nil { c.JSON(200, dto.Fail("工单不存在")) return } c.JSON(200, dto.Success(ticket)) } } func CreateTicket(db *gorm.DB) gin.HandlerFunc { return func(c *gin.Context) { var req dto.CreateTicketRequest if err := c.ShouldBindJSON(&req); err != nil { c.JSON(200, dto.Fail("参数错误")) return } user := middleware.GetCurrentUser(c) if user == nil { c.JSON(200, dto.Fail("未登录")) return } ticket, err := service.CreateTicket(db, req.Title, req.Content, req.Contactname, req.Contactphone, req.Source, req.Category, req.Priority, user.Userid) if err != nil { c.JSON(200, dto.Fail("创建失败")) return } c.JSON(200, dto.Success(ticket)) } } func UpdateTicket(db *gorm.DB) gin.HandlerFunc { return func(c *gin.Context) { idStr := c.Param("id") id, err := strconv.Atoi(idStr) if err != nil { c.JSON(200, dto.Fail("参数错误")) return } var req dto.UpdateTicketRequest if err := c.ShouldBindJSON(&req); err != nil { c.JSON(200, dto.Fail("参数错误")) return } user := middleware.GetCurrentUser(c) if user == nil { c.JSON(200, dto.Fail("未登录")) return } err = service.UpdateTicket(db, id, req.Title, req.Content, req.Contactname, req.Contactphone, req.Category, req.Priority, req.Handlerid, user.Userid) if err != nil { c.JSON(200, dto.Fail("更新失败")) return } c.JSON(200, dto.Success(nil)) } } func UpdateTicketStatus(db *gorm.DB) gin.HandlerFunc { return func(c *gin.Context) { idStr := c.Param("id") id, err := strconv.Atoi(idStr) if err != nil { c.JSON(200, dto.Fail("参数错误")) return } var req dto.UpdateStatusRequest if err := c.ShouldBindJSON(&req); err != nil { c.JSON(200, dto.Fail("参数错误")) return } user := middleware.GetCurrentUser(c) if user == nil { c.JSON(200, dto.Fail("未登录")) return } err = service.UpdateTicketStatus(db, id, req.Status, user.Userid) if err != nil { c.JSON(200, dto.Fail("更新失败")) return } c.JSON(200, dto.Success(nil)) } } func GetOperationLogs(db *gorm.DB) gin.HandlerFunc { return func(c *gin.Context) { idStr := c.Param("id") id, err := strconv.Atoi(idStr) if err != nil { c.JSON(200, dto.Fail("参数错误")) return } logs, err := service.GetOperationLogs(db, id) if err != nil { c.JSON(200, dto.Fail("查询失败")) return } c.JSON(200, dto.Success(logs)) } }