package service import ( "git.sxidc.com/go-framework/baize/api" "git.sxidc.com/go-framework/baize/binding" "git.sxidc.com/go-framework/baize/domain" "git.sxidc.com/go-framework/baize/infrastructure" "git.sxidc.com/go-framework/baize/infrastructure/database" "git.sxidc.com/go-tools/utils/strutils" "git.sxidc.com/service-supports/fserr" ) const ( DatabaseExecutorOperations = "operations" DatabaseExecutorDataService = "data_service" ) func CommonEntityCreate(tableName string, databaseExecutorType string, callbacks EntityCRUDCallbacks) binding.ServiceFunc[string] { return func(c *api.Context, dto binding.DTO, objects []domain.Object, i *infrastructure.Infrastructure) (string, error) { e, ok := objects[0].(domain.Entity) if !ok { return "", fserr.New("需要传递领域对象应该为实体") } err := e.GenerateID() if err != nil { return "", err } if callbacks.Before != nil { err := callbacks.Before(e) if err != nil { return "", err } } err = database.InsertEntity(chooseDatabaseExecutor(databaseExecutorType, i), tableName, e) if err != nil { if callbacks.Error != nil { err := callbacks.Error(e, err) if err != nil { return "", err } } return "", err } if callbacks.Success != nil { err := callbacks.Success(e) if err != nil { return "", err } } return e.ID(), nil } } func CommonEntityDelete(tableName string, databaseExecutorType string, callbacks EntityCRUDCallbacks) binding.ServiceFunc[any] { return func(c *api.Context, dto binding.DTO, objects []domain.Object, i *infrastructure.Infrastructure) (any, error) { e, ok := objects[0].(domain.Entity) if !ok { return nil, fserr.New("需要传递领域对象应该为实体") } if strutils.IsStringEmpty(e.ID()) { return nil, fserr.New("领域实体ID为空") } if callbacks.Before != nil { err := callbacks.Before(e) if err != nil { return nil, err } } err := database.DeleteEntity(chooseDatabaseExecutor(databaseExecutorType, i), tableName, e) if err != nil { if callbacks.Error != nil { err := callbacks.Error(e, err) if err != nil { return nil, err } } return nil, err } if callbacks.Success != nil { err := callbacks.Success(e) if err != nil { return nil, err } } return nil, nil } } func CommonEntityUpdate() binding.ServiceFunc[any] { return func(c *api.Context, dto binding.DTO, objects []domain.Object, i *infrastructure.Infrastructure) (any, error) { } } func CommonEntityQuery() binding.ServiceFunc[binding.InfosData[any]] { return func(c *api.Context, dto binding.DTO, objects []domain.Object, i *infrastructure.Infrastructure) (binding.InfosData[any], error) { } } func CommonEntityQueryByID() binding.ServiceFunc[any] { return func(c *api.Context, dto binding.DTO, objects []domain.Object, i *infrastructure.Infrastructure) (any, error) { } } func chooseDatabaseExecutor(dataExecutorType string, i *infrastructure.Infrastructure) database.Executor { switch dataExecutorType { case DatabaseExecutorOperations: return i.DBOperations() case DatabaseExecutorDataService: return i.DataService() default: return i.DBOperations() } }