feat: add auto migrate and init account

This commit is contained in:
engigu
2024-01-07 21:30:59 +08:00
parent 312c591063
commit 63f6e93894
9 changed files with 116 additions and 36 deletions
+3 -1
View File
@@ -12,6 +12,7 @@ import (
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"message-nest/migrate"
"message-nest/models" "message-nest/models"
"message-nest/pkg/logging" "message-nest/pkg/logging"
"message-nest/pkg/setting" "message-nest/pkg/setting"
@@ -26,9 +27,10 @@ var (
) )
func init() { func init() {
logging.Setup()
migrate.Setup()
setting.Setup() setting.Setup()
models.Setup() models.Setup()
logging.Setup()
table.Setup() table.Setup()
env_service.Setup() env_service.Setup()
cron_service.Setup() cron_service.Setup()
+63
View File
@@ -0,0 +1,63 @@
package migrate
import (
"errors"
"fmt"
"github.com/jinzhu/gorm"
"message-nest/models"
"message-nest/pkg/logging"
"message-nest/pkg/setting"
)
func InitAuthTableData() {
initSection := "init"
initAuthKey := "account"
initAccount := "admin"
initAccountPasswd := "123456"
settingO, err := models.GetSettingByKey(initSection, initAuthKey)
if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
logging.Logger.Error(fmt.Sprintf("查询账号初始化失败!"))
return
}
if settingO.Value == "1" {
// 已经初始化过
return
}
err = models.AddUser(initAccount, initAccountPasswd)
if err != nil {
logging.Logger.Error(fmt.Sprintf("添加初始化admin账号失败!"))
return
} else {
logging.Logger.Error(fmt.Sprintf("初始化admin账号成功!您的账号:%s 密码:%s", initAccount, initAccountPasswd))
}
err = models.AddOneSetting(models.Settings{Section: initSection, Key: initAuthKey, Value: "1"})
if err != nil {
logging.Logger.Error(fmt.Sprintf("标记admin账号初始化状态失败!"))
return
}
}
func Setup() {
setting.Setup()
db := models.Setup()
defer func(db *gorm.DB) {
err := db.Close()
if err != nil {
}
}(db)
db.AutoMigrate(
&models.Auth{},
&models.SendTasks{},
&models.SendWays{},
&models.SendTasksLogs{},
&models.SendTasksIns{},
&models.Settings{},
)
InitAuthTableData()
}
+19 -5
View File
@@ -1,18 +1,21 @@
package models package models
import "github.com/jinzhu/gorm" import (
"errors"
"github.com/jinzhu/gorm"
)
type Auth struct { type Auth struct {
ID int `gorm:"primary_key" json:"id"` ID int `json:"id" gorm:"type:int(11) AUTO_INCREMENT comment 'id';primary_key" json:"id"`
Username string `json:"username"` Username string `json:"username" gorm:"type:varchar(100) comment '用户名';default:'';"`
Password string `json:"password"` Password string `json:"password" gorm:"type:varchar(100) comment '密码';default:'';"`
} }
// CheckAuth 检查用户信息 // CheckAuth 检查用户信息
func CheckAuth(username, password string) (bool, error) { func CheckAuth(username, password string) (bool, error) {
var auth Auth var auth Auth
err := db.Select("id").Where(Auth{Username: username, Password: password}).First(&auth).Error err := db.Select("id").Where(Auth{Username: username, Password: password}).First(&auth).Error
if err != nil && err != gorm.ErrRecordNotFound { if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
return false, err return false, err
} }
@@ -30,3 +33,14 @@ func EditUser(username string, data interface{}) error {
} }
return nil return nil
} }
func AddUser(account string, password string) error {
auth := Auth{
Username: account,
Password: password,
}
if err := db.Create(&auth).Error; err != nil {
return err
}
return nil
}
+12 -11
View File
@@ -14,25 +14,25 @@ import (
var db *gorm.DB var db *gorm.DB
type IDModel struct { type IDModel struct {
ID int `gorm:"primary_key" json:"id"` ID int `gorm:"type:int(11) AUTO_INCREMENT comment 'id';primary_key" json:"id"`
CreatedBy string `json:"created_by"` CreatedBy string `json:"created_by" gorm:"type:varchar(100) comment '创建人';default:'';"`
ModifiedBy string `json:"modified_by"` ModifiedBy string `json:"modified_by" gorm:"type:varchar(100) comment '修改人';default:'';"`
CreatedOn util.Time `json:"created_on"` CreatedOn util.Time `json:"created_on" gorm:"type:timestamp comment '创建时间';default:current_timestamp;"`
ModifiedOn util.Time `json:"modified_on"` ModifiedOn util.Time `json:"modified_on" gorm:"type:timestamp comment '更新时间';default:current_timestamp on update current_timestamp;"`
} }
type UUIDModel struct { type UUIDModel struct {
ID uuid.UUID `gorm:"primary_key" json:"id"` ID uuid.UUID `gorm:"type:varchar(36) comment 'id';primary_key" json:"id"`
CreatedBy string `json:"created_by"` CreatedBy string `json:"created_by" gorm:"type:varchar(100) comment '创建人';default:'';"`
ModifiedBy string `json:"modified_by"` ModifiedBy string `json:"modified_by" gorm:"type:varchar(100) comment '修改人';default:'';"`
CreatedOn util.Time `json:"created_on"` CreatedOn util.Time `json:"created_on" gorm:"type:timestamp comment '创建时间';default:current_timestamp;"`
ModifiedOn util.Time `json:"modified_on"` ModifiedOn util.Time `json:"modified_on" gorm:"type:timestamp comment '更新时间';default:current_timestamp on update current_timestamp;"`
} }
// Setup initializes the database instance // Setup initializes the database instance
func Setup() { func Setup() *gorm.DB {
var err error var err error
connStr := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local", connStr := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local",
setting.DatabaseSetting.User, setting.DatabaseSetting.User,
@@ -58,6 +58,7 @@ func Setup() {
db.Callback().Delete().Replace("gorm:delete", deleteCallback) db.Callback().Delete().Replace("gorm:delete", deleteCallback)
db.DB().SetMaxIdleConns(10) db.DB().SetMaxIdleConns(10)
db.DB().SetMaxOpenConns(100) db.DB().SetMaxOpenConns(100)
return db
} }
// CloseDB closes database connection (unnecessary) // CloseDB closes database connection (unnecessary)
+6 -6
View File
@@ -3,12 +3,12 @@ package models
type SendTasksIns struct { type SendTasksIns struct {
UUIDModel UUIDModel
TaskID string `json:"task_id"` TaskID string `json:"task_id" gorm:"type:varchar(36) comment '任务id';default:'';index:task_id"`
WayID string `json:"way_id"` WayID string `json:"way_id" gorm:"type:varchar(36) comment '渠道id';default:'';index:way_id"`
WayType string `json:"way_type"` WayType string `json:"way_type" gorm:"type:varchar(100) comment '渠道类型';default:'';index:way_type"`
ContentType string `json:"content_type"` ContentType string `json:"content_type" gorm:"type:varchar(100) comment '实例类型';default:'';index:content_type"`
Config string `json:"config"` Config string `json:"config" gorm:"type:text comment '实例配置';"`
Extra string `json:"extra"` Extra string `json:"extra" gorm:"type:text comment '额外信息';"`
} }
// InsEmailConfig 实例里面的邮箱config // InsEmailConfig 实例里面的邮箱config
+1 -1
View File
@@ -11,7 +11,7 @@ import (
type SendTasks struct { type SendTasks struct {
UUIDModel UUIDModel
Name string `json:"name"` Name string `json:"name" gorm:"type:varchar(100) comment '任务名称';default:'';"`
} }
// AddSendTaskWithID 添加实例的时候添加任务 // AddSendTaskWithID 添加实例的时候添加任务
+6 -6
View File
@@ -7,13 +7,13 @@ import (
) )
type SendTasksLogs struct { type SendTasksLogs struct {
ID int `gorm:"primary_key" json:"id"` ID int `gorm:"primary_key" json:"id" `
TaskID string `json:"task_id"` TaskID string `json:"task_id" gorm:"type:varchar(36) comment '任务id';default:'';index:task_id"`
Log string `json:"log"` Log string `json:"log" gorm:"type:text comment '日志';"`
Status int `json:"status"` Status int `json:"status" gorm:"type:int comment '状态';default:0;"`
CreatedOn util.Time `json:"created_on"` CreatedOn util.Time `json:"created_on" gorm:"type:timestamp comment '创建时间';default:current_timestamp;"`
ModifiedOn util.Time `json:"modified_on"` ModifiedOn util.Time `json:"modified_on" gorm:"type:timestamp comment '更新时间';default:current_timestamp on update current_timestamp;"`
} }
// Add 添加日志记录 // Add 添加日志记录
+3 -3
View File
@@ -10,9 +10,9 @@ import (
type SendWays struct { type SendWays struct {
UUIDModel UUIDModel
Name string `json:"name"` Name string `json:"name" gorm:"type:varchar(100) comment '渠道名称';default:'';"`
Type string `json:"type"` Type string `json:"type" gorm:"type:varchar(100) comment '渠道类型';default:'';index:type"`
Auth string `gorm:"not null" json:"auth"` Auth string `json:"auth" gorm:"type:varchar(2048) comment '认证信息';default:'';"`
} }
func AddSendWay(name string, auth string, wayType string, createdBy string, modifiedBy string) error { func AddSendWay(name string, auth string, wayType string, createdBy string, modifiedBy string) error {
+3 -3
View File
@@ -9,9 +9,9 @@ import (
type Settings struct { type Settings struct {
IDModel IDModel
Section string `json:"section"` Section string `json:"section" gorm:"type:varchar(100) comment '实例类型';default:'';index:section"`
Key string `json:"key"` Key string `json:"key" gorm:"type:varchar(100) comment '实例类型';default:'';"`
Value string `json:"value"` Value string `json:"value" gorm:"type:varchar(4096) comment '实例类型';default:'';"`
} }
// AddOneSetting 添加一条设置 // AddOneSetting 添加一条设置