2024-11-14 14:55:43 +00:00
|
|
|
|
package main
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"fmt"
|
|
|
|
|
"licserver/internal/api"
|
|
|
|
|
"licserver/internal/model"
|
|
|
|
|
"licserver/internal/service"
|
|
|
|
|
"licserver/internal/utils"
|
|
|
|
|
"log"
|
|
|
|
|
"os"
|
|
|
|
|
|
|
|
|
|
"golang.org/x/crypto/bcrypt"
|
|
|
|
|
"gorm.io/gorm"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// 初始化管理员账号
|
|
|
|
|
func initAdminUser(db *gorm.DB) error {
|
|
|
|
|
var count int64
|
|
|
|
|
db.Model(&model.User{}).Where("role = ?", "admin").Count(&count)
|
|
|
|
|
|
|
|
|
|
// 如果没有管理员账号,创建默认管理员
|
|
|
|
|
if count == 0 {
|
|
|
|
|
hashedPassword, err := bcrypt.GenerateFromPassword([]byte("admin"), bcrypt.DefaultCost)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
admin := model.User{
|
|
|
|
|
Username: "admin",
|
|
|
|
|
Password: string(hashedPassword),
|
|
|
|
|
Email: "admin@example.com",
|
|
|
|
|
Role: "admin",
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if err := db.Create(&admin).Error; err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
log.Println("已创建默认管理员账号:admin/admin")
|
|
|
|
|
}
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func main() {
|
|
|
|
|
// 加载配置
|
|
|
|
|
config, err := utils.LoadConfig()
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Fatalf("无法加载配置: %v", err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 初始化数据库
|
|
|
|
|
db, err := utils.InitDB(&config.Database)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Fatalf("无法初始化数据库: %v", err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 初始化管理员账号
|
|
|
|
|
if err := initAdminUser(db); err != nil {
|
|
|
|
|
log.Fatalf("初始化管理员账号失败: %v", err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 初始化服务
|
|
|
|
|
licenseService := service.NewLicenseService(db)
|
|
|
|
|
userService := service.NewUserService(db, config)
|
|
|
|
|
deviceService := service.NewDeviceService(db, licenseService)
|
|
|
|
|
monitorService := service.NewMonitorService(db)
|
|
|
|
|
uploadService := service.NewUploadService(db, config)
|
|
|
|
|
siteService := service.NewSiteService(config)
|
|
|
|
|
tokenService := service.NewTokenService(db)
|
2024-11-16 15:59:15 +00:00
|
|
|
|
dashboardService := service.NewDashboardService(db)
|
2024-11-14 14:55:43 +00:00
|
|
|
|
|
|
|
|
|
// 初始化处理器
|
|
|
|
|
userHandler := api.NewUserHandler(userService)
|
2024-11-16 15:59:15 +00:00
|
|
|
|
deviceHandler := api.NewDeviceHandler(deviceService, config)
|
2024-11-14 14:55:43 +00:00
|
|
|
|
monitorHandler := api.NewMonitorHandler(monitorService)
|
|
|
|
|
uploadHandler := api.NewUploadHandler(uploadService)
|
|
|
|
|
siteHandler := api.NewSiteHandler(siteService)
|
|
|
|
|
tokenHandler := api.NewTokenHandler(tokenService)
|
|
|
|
|
licenseHandler := api.NewLicenseHandler(licenseService)
|
2024-11-16 15:59:15 +00:00
|
|
|
|
dashboardHandler := api.NewDashboardHandler(dashboardService)
|
2024-11-14 14:55:43 +00:00
|
|
|
|
|
|
|
|
|
// 设置路由
|
|
|
|
|
router := api.SetupRouter(
|
|
|
|
|
userHandler,
|
|
|
|
|
deviceHandler,
|
|
|
|
|
monitorHandler,
|
|
|
|
|
config,
|
|
|
|
|
uploadHandler,
|
|
|
|
|
siteHandler,
|
|
|
|
|
tokenHandler,
|
|
|
|
|
licenseHandler,
|
2024-11-16 15:59:15 +00:00
|
|
|
|
dashboardHandler,
|
2024-11-14 14:55:43 +00:00
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// 创建必要的目录
|
|
|
|
|
dirs := []string{
|
|
|
|
|
"data",
|
|
|
|
|
"uploads",
|
|
|
|
|
"uploads/site",
|
|
|
|
|
"static/uploads",
|
|
|
|
|
"static/uploads/site",
|
|
|
|
|
"web/static/lib",
|
|
|
|
|
}
|
|
|
|
|
for _, dir := range dirs {
|
|
|
|
|
if err := os.MkdirAll(dir, 0755); err != nil {
|
|
|
|
|
log.Fatalf("创建目录失败: %v", err)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 启动服务器
|
|
|
|
|
addr := fmt.Sprintf(":%s", config.Server.Port)
|
|
|
|
|
log.Printf("服务器启动在 %s", addr)
|
|
|
|
|
if err := router.Run(addr); err != nil {
|
|
|
|
|
log.Fatalf("服务器启动失败: %v", err)
|
|
|
|
|
}
|
|
|
|
|
}
|