SHA256
68 lines
1.9 KiB
Go
68 lines
1.9 KiB
Go
// AShareView 服务端入口
|
|
// A股市场数据可视化平台后端,提供市场概览、指数行情、K线叠加对比等 API
|
|
package main
|
|
|
|
import (
|
|
"ashareview-server/config"
|
|
"ashareview-server/handler"
|
|
"ashareview-server/repository"
|
|
"ashareview-server/router"
|
|
"ashareview-server/service"
|
|
"fmt"
|
|
"log"
|
|
"time"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"gorm.io/driver/mysql"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
func main() {
|
|
// 加载配置
|
|
cfg := config.Load()
|
|
|
|
// 连接 MySQL
|
|
db, err := gorm.Open(mysql.Open(cfg.DB.DSN()), &gorm.Config{})
|
|
if err != nil {
|
|
log.Fatalf("failed to connect database: %v", err)
|
|
}
|
|
fmt.Println("Database connected successfully")
|
|
|
|
// 异步创建常用索引,已存在则跳过
|
|
go func() {
|
|
time.Sleep(3 * time.Second)
|
|
indexes := []struct {
|
|
name string
|
|
sql string
|
|
}{
|
|
{"idx_sd_date", "ALTER TABLE stock_daily ADD INDEX idx_sd_date (date)"},
|
|
{"idx_sd_code_date", "ALTER TABLE stock_daily ADD INDEX idx_sd_code_date (code, date)"},
|
|
{"idx_sd_date_pct", "ALTER TABLE stock_daily ADD INDEX idx_sd_date_pct (date, pct_change)"},
|
|
}
|
|
for _, idx := range indexes {
|
|
var cnt int64
|
|
db.Raw("SELECT COUNT(*) FROM information_schema.statistics WHERE table_schema = DATABASE() AND table_name = 'stock_daily' AND index_name = ?", idx.name).Scan(&cnt)
|
|
if cnt == 0 {
|
|
if err := db.Exec(idx.sql).Error; err == nil {
|
|
fmt.Printf("index created: %s\n", idx.name)
|
|
}
|
|
}
|
|
}
|
|
}()
|
|
|
|
// 分层初始化: Repository -> Service -> Handler
|
|
stockRepo := repository.NewStockRepo(db)
|
|
dashboardSvc := service.NewDashboardService(stockRepo)
|
|
dashboardHandler := handler.NewDashboardHandler(dashboardSvc)
|
|
|
|
// 启动 HTTP 服务
|
|
r := gin.Default()
|
|
router.Setup(r, dashboardHandler)
|
|
|
|
addr := fmt.Sprintf(":%s", cfg.Server.Port)
|
|
fmt.Printf("Server running on http://localhost%s\n", addr)
|
|
if err := r.Run(addr); err != nil {
|
|
log.Fatalf("failed to start server: %v", err)
|
|
}
|
|
}
|