|
|
@@ -0,0 +1,128 @@
|
|
|
+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()
|
|
|
+ }
|
|
|
+}
|