package biz import ( "time" "github.com/go-rat/utils/crypt" "gorm.io/gorm" "github.com/tnb-labs/panel/internal/app" "github.com/tnb-labs/panel/internal/http/request" ) type DatabaseServerStatus string const ( DatabaseServerStatusValid DatabaseServerStatus = "valid" DatabaseServerStatusInvalid DatabaseServerStatus = "invalid" ) type DatabaseServer struct { ID uint `gorm:"primaryKey" json:"id"` Name string `gorm:"not null;default:'';unique" json:"name"` Type DatabaseType `gorm:"not null;default:''" json:"type"` Host string `gorm:"not null;default:''" json:"host"` Port uint `gorm:"not null;default:0" json:"port"` Username string `gorm:"not null;default:''" json:"username"` Password string `gorm:"not null;default:''" json:"password"` Status DatabaseServerStatus `gorm:"-:all" json:"status"` Remark string `gorm:"not null;default:''" json:"remark"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } func (r *DatabaseServer) 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 *DatabaseServer) 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 } type DatabaseServerRepo interface { Count() (int64, error) List(page, limit uint) ([]*DatabaseServer, int64, error) Get(id uint) (*DatabaseServer, error) GetByName(name string) (*DatabaseServer, error) Create(req *request.DatabaseServerCreate) error Update(req *request.DatabaseServerUpdate) error UpdateRemark(req *request.DatabaseServerUpdateRemark) error Delete(id uint) error ClearUsers(id uint) error Sync(id uint) error }