103 lines
2.8 KiB
Go
103 lines
2.8 KiB
Go
package main
|
|
|
|
import (
|
|
"electricity_bill_calc/cache"
|
|
"electricity_bill_calc/config"
|
|
"electricity_bill_calc/global"
|
|
"electricity_bill_calc/logger"
|
|
"electricity_bill_calc/model"
|
|
"electricity_bill_calc/repository"
|
|
"electricity_bill_calc/router"
|
|
"electricity_bill_calc/service"
|
|
"fmt"
|
|
"time"
|
|
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
func init() {
|
|
l := logger.Named("Init")
|
|
err := config.SetupSetting()
|
|
if err != nil {
|
|
l.Fatal("服务配置文件加载失败!", zap.Error(err))
|
|
}
|
|
l.Info("服务配置已经完成加载。")
|
|
|
|
err = global.SetupDatabaseConnection()
|
|
if err != nil {
|
|
l.Fatal("主数据库连接失败!", zap.Error(err))
|
|
}
|
|
l.Info("主数据库已经连接。")
|
|
|
|
err = global.SetupRedisConnection()
|
|
if err != nil {
|
|
l.Fatal("主缓存数据库连接失败!", zap.Error(err))
|
|
}
|
|
l.Info("主缓存数据库已经连接。")
|
|
|
|
err = intializeSingularity()
|
|
if err != nil {
|
|
l.Fatal("奇点账号初始化失败。", zap.Error(err))
|
|
}
|
|
l.Info("奇点账号已经完成初始化。")
|
|
}
|
|
|
|
func intializeSingularity() error {
|
|
l := logger.Named("Init", "Singularity")
|
|
singularityExists, err := repository.UserRepository.IsUserExists("000")
|
|
if err != nil {
|
|
l.Error("检测奇点账号失败。", zap.Error(err))
|
|
return fmt.Errorf("检测奇点账号失败: %w", err)
|
|
}
|
|
if singularityExists {
|
|
l.Info("奇点账号已经存在,跳过剩余初始化步骤。")
|
|
return nil
|
|
}
|
|
singularityId := "000"
|
|
singularityExpires, err := model.ParseDate("2099-12-31")
|
|
if err != nil {
|
|
l.Error("奇点用户账号过期时间解析失败。", zap.Error(err))
|
|
return fmt.Errorf("奇点用户账号过期时间解析失败: %w", err)
|
|
}
|
|
singularity := &model.ManagementAccountCreationForm{
|
|
Id: &singularityId,
|
|
Username: "singularity",
|
|
Name: "Singularity",
|
|
Type: 2,
|
|
Enabled: true,
|
|
Expires: singularityExpires,
|
|
}
|
|
verifyCode, err := service.UserService.CreateUserAccount(
|
|
singularity.IntoUser(),
|
|
singularity.IntoUserDetail())
|
|
if err != nil {
|
|
l.Error("创建奇点账号失败。", zap.Error(err))
|
|
return fmt.Errorf("创建奇点账号失败: %w", err)
|
|
}
|
|
logger.Info(
|
|
fmt.Sprintf("奇点账号已经完成创建, 首次登录需要使用验证码 [%s] 重置密码。", *verifyCode),
|
|
zap.String("账号名称", "singularity"),
|
|
zap.String("验证码", *verifyCode),
|
|
)
|
|
return nil
|
|
}
|
|
|
|
// 清理Redis缓存中的孤儿键。
|
|
func RedisOrphanCleanup() {
|
|
cleanLogger := logger.Named("Cache").With(zap.String("function", "Cleanup"))
|
|
for range time.Tick(2 * time.Minute) {
|
|
cleanLogger.Info("Proceeding cleanup orphan keys.")
|
|
err := cache.ClearOrphanRelationItems()
|
|
if err != nil {
|
|
cleanLogger.Error("Orphan keys clear failed.")
|
|
continue
|
|
}
|
|
}
|
|
}
|
|
|
|
func main() {
|
|
go RedisOrphanCleanup()
|
|
app := router.App()
|
|
app.Listen(fmt.Sprintf(":%d", config.ServerSettings.HttpPort))
|
|
}
|