116 lines
2.8 KiB
Go
116 lines
2.8 KiB
Go
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)
|
||
dashboardService := service.NewDashboardService(db)
|
||
|
||
// 初始化处理器
|
||
userHandler := api.NewUserHandler(userService)
|
||
deviceHandler := api.NewDeviceHandler(deviceService, config)
|
||
monitorHandler := api.NewMonitorHandler(monitorService)
|
||
uploadHandler := api.NewUploadHandler(uploadService)
|
||
siteHandler := api.NewSiteHandler(siteService)
|
||
tokenHandler := api.NewTokenHandler(tokenService)
|
||
licenseHandler := api.NewLicenseHandler(licenseService)
|
||
dashboardHandler := api.NewDashboardHandler(dashboardService)
|
||
|
||
// 设置路由
|
||
router := api.SetupRouter(
|
||
userHandler,
|
||
deviceHandler,
|
||
monitorHandler,
|
||
config,
|
||
uploadHandler,
|
||
siteHandler,
|
||
tokenHandler,
|
||
licenseHandler,
|
||
dashboardHandler,
|
||
)
|
||
|
||
// 创建必要的目录
|
||
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)
|
||
}
|
||
}
|