mirror of
https://github.com/acepanel/panel.git
synced 2026-02-04 11:27:17 +08:00
feat: 初始化数据库条目模型
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package biz
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"time"
|
||||
|
||||
"github.com/go-rat/utils/crypt"
|
||||
@@ -20,6 +21,8 @@ type Database struct {
|
||||
Remark string `gorm:"not null" json:"remark"`
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
UpdatedAt time.Time `json:"updated_at"`
|
||||
|
||||
DatabaseItems []*DatabaseItem `json:"-"`
|
||||
}
|
||||
|
||||
func (r *Database) BeforeSave(tx *gorm.DB) error {
|
||||
@@ -50,3 +53,17 @@ func (r *Database) AfterFind(tx *gorm.DB) error {
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (r *Database) BeforeDelete(tx *gorm.DB) error {
|
||||
if r.Name == "local_mysql" && !app.IsCli {
|
||||
return errors.New("can't delete local_mysql, if you must delete it, please uninstall mysql")
|
||||
}
|
||||
if r.Name == "local_postgresql" && !app.IsCli {
|
||||
return errors.New("can't delete local_postgresql, if you must delete it, please uninstall postgresql")
|
||||
}
|
||||
if r.Name == "local_redis" && !app.IsCli {
|
||||
return errors.New("can't delete local_redis, if you must delete it, please uninstall redis")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
59
internal/biz/database_item.go
Normal file
59
internal/biz/database_item.go
Normal file
@@ -0,0 +1,59 @@
|
||||
package biz
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/go-rat/utils/crypt"
|
||||
"gorm.io/gorm"
|
||||
|
||||
"github.com/TheTNB/panel/internal/app"
|
||||
)
|
||||
|
||||
type DatabaseItemStatus string
|
||||
|
||||
const (
|
||||
DatabaseItemStatusNormal DatabaseItemStatus = "normal"
|
||||
DatabaseItemStatusInvalid DatabaseItemStatus = "invalid"
|
||||
)
|
||||
|
||||
type DatabaseItem struct {
|
||||
ID uint `gorm:"primaryKey" json:"id"`
|
||||
DatabaseID uint `gorm:"not null" json:"database_id"`
|
||||
Name string `gorm:"not null" json:"name"`
|
||||
Status DatabaseItemStatus `gorm:"not null" json:"status"`
|
||||
Username string `gorm:"not null" json:"username"`
|
||||
Password string `gorm:"not null" json:"password"`
|
||||
Remark string `gorm:"not null" json:"remark"`
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
UpdatedAt time.Time `json:"updated_at"`
|
||||
|
||||
Database *Database `json:"database"`
|
||||
}
|
||||
|
||||
func (r *DatabaseItem) BeforeSave(tx *gorm.DB) error {
|
||||
crypter, err := crypt.NewXChacha20Poly1305([]byte(app.Key))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
r.Password, err = crypter.Encrypt([]byte(r.Password))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (r *DatabaseItem) AfterFind(tx *gorm.DB) error {
|
||||
crypter, err := crypt.NewXChacha20Poly1305([]byte(app.Key))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
password, err := crypter.Decrypt(r.Password)
|
||||
if err == nil {
|
||||
r.Password = string(password)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
@@ -55,4 +55,17 @@ func init() {
|
||||
)
|
||||
},
|
||||
})
|
||||
Migrations = append(Migrations, &gormigrate.Migration{
|
||||
ID: "20241107-database-item",
|
||||
Migrate: func(tx *gorm.DB) error {
|
||||
return tx.AutoMigrate(
|
||||
&biz.DatabaseItem{},
|
||||
)
|
||||
},
|
||||
Rollback: func(tx *gorm.DB) error {
|
||||
return tx.Migrator().DropTable(
|
||||
&biz.DatabaseItem{},
|
||||
)
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user