Files
ticket-workbench/backend/main.go
绝尘 4793b1a533 新增: AI工单处理工作台 v1.0
- Go Gin 后端 (19个源文件): 认证、工单CRUD、GLM AI分析、状态流转、备注、操作日志
- Arco Design Vue 前端: 登录、工单列表/详情/创建、AI分析触发与确认
- MySQL 5表: ticket_user/ticket_info/ticket_ai_analysis/ticket_operation_log/ticket_note
- 部署: tk.1216.top HTTPS, Nginx反代
2026-05-13 17:05:49 +08:00

90 lines
2.1 KiB
Go

package main
import (
"fmt"
"log"
"os"
"github.com/casehub/ticket-workbench/internal/config"
"github.com/casehub/ticket-workbench/internal/handler"
"github.com/casehub/ticket-workbench/internal/middleware"
"github.com/gin-gonic/gin"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"gorm.io/gorm/logger"
)
func main() {
cfg, err := config.Load("config.yaml")
if err != nil {
log.Fatalf("Failed to load config: %v", err)
}
dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local",
cfg.Database.User,
cfg.Database.Password,
cfg.Database.Host,
cfg.Database.Port,
cfg.Database.DBName,
)
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
Logger: logger.Default.LogMode(logger.Info),
})
if err != nil {
log.Fatalf("Failed to connect database: %v", err)
}
sqlDB, err := db.DB()
if err != nil {
log.Fatalf("Failed to get database instance: %v", err)
}
sqlDB.SetMaxIdleConns(10)
sqlDB.SetMaxOpenConns(100)
gin.SetMode(gin.ReleaseMode)
r := gin.Default()
r.Use(middleware.CORS())
authMiddleware := middleware.Auth(db)
api := r.Group("/api")
{
auth := api.Group("/auth")
{
auth.POST("/login", handler.Login(db))
auth.POST("/logout", handler.Logout())
auth.GET("/me", authMiddleware, handler.UserInfo())
}
tickets := api.Group("/tickets")
tickets.Use(authMiddleware)
{
tickets.GET("", handler.ListTickets(db))
tickets.POST("", handler.CreateTicket(db))
tickets.GET("/:id", handler.GetTicket(db))
tickets.PUT("/:id", handler.UpdateTicket(db))
tickets.PUT("/:id/status", handler.UpdateTicketStatus(db))
tickets.POST("/:id/analyze", handler.AnalyzeTicket(db, cfg))
tickets.GET("/:id/analysis", handler.GetAnalysis(db))
tickets.PUT("/:id/analysis", handler.ConfirmAnalysis(db))
tickets.GET("/:id/notes", handler.ListNotes(db))
tickets.POST("/:id/notes", handler.AddNote(db))
tickets.GET("/:id/logs", handler.GetOperationLogs(db))
}
}
addr := fmt.Sprintf(":%d", cfg.Server.Port)
if os.Getenv("PORT") != "" {
addr = ":" + os.Getenv("PORT")
}
log.Printf("Server starting on %s", addr)
if err := r.Run(addr); err != nil {
log.Fatalf("Failed to start server: %v", err)
}
}