Compare commits

...

4 Commits

Author SHA1 Message Date
fancl 72b0de9c26 fix match method 2024-12-31 15:46:32 +08:00
fancl 68bdabddee fix bug 2024-12-13 09:50:13 +08:00
fancl 72d742a45d add default domain 2024-12-13 09:31:31 +08:00
fancl 4fd3d58ea0 修改方法 2024-12-12 17:02:01 +08:00
4 changed files with 47 additions and 5 deletions

View File

@ -1 +1,31 @@
# 数据库组件 # 数据库组件
组件提供了操作`mysql`一些相关的内容,通过组件可以方便的实现怎删改查的接口
## 插件
### 主键插件
主键插件是指的是用于生成数据库主键的插件非自增长的ID主键插件使用方式
```go
db.Use(&identified.Identify{})
```
### 数据校验插件
数据校验插件用户增改的时候对数据格式进行校验,使用方式
```go
db.Use(validate.New())
```
### 分表插件
分表插件提供了自动分表的功能,使用方式
```go
db.Use(sharding.New())
```

View File

@ -15,7 +15,7 @@ func (identity *Identify) Name() string {
} }
func (identity *Identify) Initialize(db *gorm.DB) (err error) { func (identity *Identify) Initialize(db *gorm.DB) (err error) {
err = db.Callback().Create().Before("gorm:create").Register("auto_identified", identity.Grant) err = db.Callback().Create().Before("gorm:create").Register("rest_auto_identified", identity.Grant)
return return
} }

View File

@ -121,10 +121,10 @@ func (validate *Validate) findRule(name string, rules []*validateRule) *validate
func (validate *Validate) Initialize(db *gorm.DB) (err error) { func (validate *Validate) Initialize(db *gorm.DB) (err error) {
validate.validator = validator.New() validate.validator = validator.New()
if err = db.Callback().Create().Before("gorm:before_create").Register("model_validate", validate.Validate); err != nil { if err = db.Callback().Create().Before("gorm:before_create").Register("rest_validate_create", validate.Validate); err != nil {
return return
} }
if err = db.Callback().Create().Before("gorm:before_update").Register("model_validate", validate.Validate); err != nil { if err = db.Callback().Create().Before("gorm:before_update").Register("rest_validate_update", validate.Validate); err != nil {
return return
} }
if err = validate.validator.RegisterValidationCtx("telephone", validate.telephoneValidate); err != nil { if err = validate.validator.RegisterValidationCtx("telephone", validate.telephoneValidate); err != nil {

14
rest.go
View File

@ -312,6 +312,7 @@ func fieldAttribute(field *schema.Field) types.Attribute {
attr.Live.Columns = strings.Split(kv[1], ",") attr.Live.Columns = strings.Split(kv[1], ",")
} }
} }
attr.Match = types.MatchExactly
} }
dropdown := field.Tag.Get("dropdown") dropdown := field.Tag.Get("dropdown")
@ -379,6 +380,7 @@ func fieldAttribute(field *schema.Field) types.Attribute {
} }
attr.Values = append(attr.Values, fv) attr.Values = append(attr.Values, fv)
} }
attr.Match = types.MatchExactly
} }
if !field.Creatable { if !field.Creatable {
attr.Disable = append(attr.Disable, types.ScenarioCreate) attr.Disable = append(attr.Disable, types.ScenarioCreate)
@ -552,6 +554,9 @@ func CloneSchemas(ctx context.Context, db *gorm.DB, domain string) (err error) {
models []*types.Schema models []*types.Schema
) )
tx := db.WithContext(ctx) tx := db.WithContext(ctx)
if domain == "" {
domain = defaultDomain
}
if err = tx.Where("domain=?", defaultDomain).Find(&values).Error; err != nil { if err = tx.Where("domain=?", defaultDomain).Find(&values).Error; err != nil {
return fmt.Errorf("schema not found") return fmt.Errorf("schema not found")
} }
@ -608,6 +613,9 @@ func GetSchemas(ctx context.Context, db *gorm.DB, domain, moduleName, tableName
// VisibleSchemas 获取某个场景下面的schema // VisibleSchemas 获取某个场景下面的schema
func VisibleSchemas(ctx context.Context, db *gorm.DB, domain, moduleName, tableName, scenario string) ([]*types.Schema, error) { func VisibleSchemas(ctx context.Context, db *gorm.DB, domain, moduleName, tableName, scenario string) ([]*types.Schema, error) {
if domain == "" {
domain = defaultDomain
}
schemas, err := GetSchemas(ctx, db, domain, moduleName, tableName) schemas, err := GetSchemas(ctx, db, domain, moduleName, tableName)
if err != nil { if err != nil {
return nil, err return nil, err
@ -629,7 +637,11 @@ func VisibleSchemas(ctx context.Context, db *gorm.DB, domain, moduleName, tableN
func ModelTypes(ctx context.Context, db *gorm.DB, model any, domainName, labelColumn, valueColumn string) (values []*types.TypeValue) { func ModelTypes(ctx context.Context, db *gorm.DB, model any, domainName, labelColumn, valueColumn string) (values []*types.TypeValue) {
tx := db.WithContext(ctx) tx := db.WithContext(ctx)
result := make([]map[string]any, 0, 10) result := make([]map[string]any, 0, 10)
tx.Model(model).Select(labelColumn, valueColumn).Where("domain=?", domainName).Scan(&result) if domainName == "" {
tx.Model(model).Select(labelColumn, valueColumn).Scan(&result)
} else {
tx.Model(model).Select(labelColumn, valueColumn).Where("domain=?", domainName).Scan(&result)
}
values = make([]*types.TypeValue, 0, len(result)) values = make([]*types.TypeValue, 0, len(result))
for _, pairs := range result { for _, pairs := range result {
feed := &types.TypeValue{} feed := &types.TypeValue{}