This commit is contained in:
2026-04-26 21:26:15 +08:00
parent 95bf0c3342
commit 7a7e28684c
10 changed files with 390 additions and 193 deletions
+17 -48
View File
@@ -1,68 +1,37 @@
package main
import (
"fmt"
"github.com/gin-gonic/gin"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"level_go/internal/api"
"level_go/internal/router"
"level_go/internal/service"
"level_go/pkg/config"
"level_go/pkg/config" // 引入配置包
"log"
)
func main() {
// 1. 加载配置
// 1. 初始化配置
config.InitConfig()
dbConf := config.AppConfig.Database
// 2. 连接数据库
dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=%s&parseTime=True&loc=Local",
dbConf.User, dbConf.Password, dbConf.Host, dbConf.Port, dbConf.Dbname, dbConf.Charset)
// 2. 使用配置中的 DSN 连接数据库
dsn := config.GetDSN()
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
panic("数据库连接失败: " + err.Error())
log.Fatal("数据库连接失败:", err)
}
// 3. 注入 Service
stockSvc := &service.StockService{DB: db}
// 3. 依赖注入
commonSrv := &service.CommonService{DB: db}
stockSrv := &service.StockService{DB: db}
// 4. 路由设置
r := gin.Default()
commonHandler := &api.CommonHandler{Service: commonSrv}
stockHandler := &api.StockHandler{Service: stockSrv}
// 跨域中间件
r.Use(func(c *gin.Context) {
c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
c.Writer.Header().Set("Access-Control-Allow-Methods", "GET, POST, OPTIONS")
c.Writer.Header().Set("Access-Control-Allow-Headers", "Content-Type")
if c.Request.Method == "OPTIONS" {
c.AbortWithStatus(204)
return
}
c.Next()
})
// 4. 启动路由
r := router.NewRouter(commonHandler, stockHandler)
api := r.Group("/api/v1")
{
api.GET("/stock/analyze", func(c *gin.Context) {
start := c.Query("start_date")
end := c.Query("end_date")
if start == "" || end == "" {
c.JSON(400, gin.H{"error": "参数缺失"})
return
}
data, err := stockSvc.AnalyzePerformance(start, end)
if err != nil {
c.JSON(500, gin.H{"error": err.Error()})
return
}
c.JSON(200, data)
})
}
// 5. 启动
port := fmt.Sprintf(":%d", config.AppConfig.Server.Port)
fmt.Printf("服务已启动,监听端口 %s\n", port)
port := config.GetServerPort()
log.Printf("服务启动于端口 %s", port)
r.Run(port)
}