package service import ( "electricity_bill_calc/global" "electricity_bill_calc/logger" "electricity_bill_calc/repository" "electricity_bill_calc/vo" "github.com/doug-martin/goqu/v9" "go.uber.org/zap" ) type _SynchronizeService struct { log *zap.Logger ds goqu.DialectWrapper } var SynchronizeService = _SynchronizeService{ log: logger.Named("Service", "Synchronize"), ds: goqu.Dialect("postgres"), } func (ss _SynchronizeService) CreateSynchronizeConfiguration(userId string, form *vo.SynchronizeConfigurationCreateForm) error { ss.log.Info("创建一条新的同步配置", zap.String("user id", userId)) ctx, cancel := global.TimeoutContext() defer cancel() tx, err := global.DB.Begin(ctx) if err != nil { ss.log.Error("无法启动数据库事务。", zap.Error(err)) return err } ok, err := repository.SynchronizeRepository.CreateSynchronizeConfiguration(tx, ctx, userId, form) if err != nil { ss.log.Error("无法创建新的同步配置。", zap.Error(err)) tx.Rollback(ctx) return err } if !ok { ss.log.Error("数据库未能记录新的同步配置。") tx.Rollback(ctx) return err } err = tx.Commit(ctx) if err != nil { ss.log.Error("未能成功提交数据库事务。", zap.Error(err)) tx.Rollback(ctx) return err } return nil }