修复: 代码审查4个必改项+4个建议改进

- 工单编号改为业务格式 TK-yyMMdd-NNN
- 类型断言加 comma-ok 防 panic
- priority 用指针区分未传/P0
- json.Marshal 错误处理
- 提取 ParseID 公共函数消除重复
- HTTP client 包级别复用
- LIKE 查询特殊字符转义
- interface{} → any
- auth 中间件用 dto.Fail 统一响应
This commit is contained in:
2026-05-13 19:01:06 +08:00
parent c5c2a64a48
commit e94f160782
8 changed files with 67 additions and 70 deletions

View File

@@ -2,10 +2,10 @@ package service
import (
"fmt"
"strings"
"time"
"github.com/casehub/ticket-workbench/internal/model"
"github.com/google/uuid"
"gorm.io/gorm"
)
@@ -30,7 +30,9 @@ func ListTickets(db *gorm.DB, status *int16, category string, priority *int16, k
query = query.Where("priority = ?", *priority)
}
if keyword != "" {
query = query.Where("title LIKE ? OR content LIKE ?", "%"+keyword+"%", "%"+keyword+"%")
escaped := strings.ReplaceAll(keyword, "%", "\\%")
escaped = strings.ReplaceAll(escaped, "_", "\\_")
query = query.Where("title LIKE ? OR content LIKE ?", "%"+escaped+"%", "%"+escaped+"%")
}
if err := query.Count(&total).Error; err != nil {
@@ -55,8 +57,11 @@ func GetTicketByID(db *gorm.DB, ticketid int) (*model.TicketInfo, error) {
}
func CreateTicket(db *gorm.DB, title, content, contactname, contactphone, source, category string, priority int16, submitterid int) (*model.TicketInfo, error) {
ticketno := fmt.Sprintf("TKT%s", uuid.New().String()[:8])
now := time.Now()
dateStr := now.Format("060102")
var count int64
db.Model(&model.TicketInfo{}).Where("DATE(createtime) = CURDATE()").Count(&count)
ticketno := fmt.Sprintf("TK-%s-%03d", dateStr, count+1)
ticket := &model.TicketInfo{
Ticketno: ticketno,
@@ -82,7 +87,7 @@ func CreateTicket(db *gorm.DB, title, content, contactname, contactphone, source
return ticket, nil
}
func UpdateTicket(db *gorm.DB, ticketid int, title, content, contactname, contactphone, category string, priority int16, handlerid *int, operatorid int) error {
func UpdateTicket(db *gorm.DB, ticketid int, title, content, contactname, contactphone, category string, priority *int16, handlerid *int, operatorid int) error {
updates := map[string]interface{}{
"updatetime": time.Now(),
}
@@ -101,8 +106,8 @@ func UpdateTicket(db *gorm.DB, ticketid int, title, content, contactname, contac
if category != "" {
updates["category"] = category
}
if priority >= 0 {
updates["priority"] = priority
if priority != nil {
updates["priority"] = *priority
}
if handlerid != nil {
updates["handlerid"] = handlerid