diff --git a/internal/bootstrap/services.go b/internal/bootstrap/services.go index 968a6db..4b78614 100644 --- a/internal/bootstrap/services.go +++ b/internal/bootstrap/services.go @@ -159,7 +159,7 @@ func initServices(s *stores, deps *Dependencies) *services { DeviceImport: deviceImportSvc.New(deps.DB, s.DeviceImportTask, deps.QueueClient), AssetAllocationRecord: assetAllocationRecordSvc.New(deps.DB, s.AssetAllocationRecord, s.Shop, s.Account), Carrier: carrierSvc.New(s.Carrier), - PackageSeries: packageSeriesSvc.New(s.PackageSeries, s.ShopSeriesAllocation), + PackageSeries: packageSeriesSvc.New(s.PackageSeries, s.ShopSeriesAllocation, s.Package), Package: packageSvc.New(s.Package, s.PackageSeries, s.ShopPackageAllocation, s.ShopSeriesAllocation), PackageDailyRecord: packageSvc.NewDailyRecordService(deps.DB, deps.Redis, s.PackageUsageDailyRecord, deps.Logger), PackageCustomerView: packageSvc.NewCustomerViewService(deps.DB, deps.Redis, s.PackageUsage, deps.Logger), diff --git a/internal/service/package_series/service.go b/internal/service/package_series/service.go index 90bc7fd..2436000 100644 --- a/internal/service/package_series/service.go +++ b/internal/service/package_series/service.go @@ -2,6 +2,7 @@ package package_series import ( "context" + "fmt" "time" "gorm.io/gorm" @@ -15,15 +16,19 @@ import ( "github.com/break/junhong_cmp_fiber/pkg/middleware" ) +// Service 套餐系列业务服务 type Service struct { packageSeriesStore *postgres.PackageSeriesStore shopSeriesAllocationStore *postgres.ShopSeriesAllocationStore + packageStore *postgres.PackageStore } -func New(packageSeriesStore *postgres.PackageSeriesStore, shopSeriesAllocationStore *postgres.ShopSeriesAllocationStore) *Service { +// New 创建套餐系列服务实例 +func New(packageSeriesStore *postgres.PackageSeriesStore, shopSeriesAllocationStore *postgres.ShopSeriesAllocationStore, packageStore *postgres.PackageStore) *Service { return &Service{ packageSeriesStore: packageSeriesStore, shopSeriesAllocationStore: shopSeriesAllocationStore, + packageStore: packageStore, } } @@ -139,6 +144,14 @@ func (s *Service) Delete(ctx context.Context, id uint) error { return errors.Wrap(errors.CodeInternalError, err, "获取套餐系列失败") } + count, err := s.packageStore.CountBySeriesID(ctx, id) + if err != nil { + return err + } + if count > 0 { + return errors.New(errors.CodeInvalidParam, fmt.Sprintf("该系列下有 %d 个关联套餐,请先处理后再删除", count)) + } + if err := s.packageSeriesStore.Delete(ctx, id); err != nil { return errors.Wrap(errors.CodeInternalError, err, "删除套餐系列失败") } diff --git a/internal/store/postgres/package_store.go b/internal/store/postgres/package_store.go index 15291ba..c8396b9 100644 --- a/internal/store/postgres/package_store.go +++ b/internal/store/postgres/package_store.go @@ -8,6 +8,7 @@ import ( "github.com/break/junhong_cmp_fiber/internal/model" "github.com/break/junhong_cmp_fiber/internal/store" "github.com/break/junhong_cmp_fiber/pkg/constants" + "github.com/break/junhong_cmp_fiber/pkg/errors" "github.com/break/junhong_cmp_fiber/pkg/middleware" ) @@ -135,3 +136,15 @@ func (s *PackageStore) GetByIDsUnscoped(ctx context.Context, ids []uint) ([]*mod } return packages, nil } + +// CountBySeriesID 统计指定系列下的活跃套餐数量(未软删除) +func (s *PackageStore) CountBySeriesID(ctx context.Context, seriesID uint) (int64, error) { + var count int64 + err := s.db.WithContext(ctx).Model(&model.Package{}). + Where("series_id = ? AND deleted_at IS NULL", seriesID). + Count(&count).Error + if err != nil { + return 0, errors.Wrap(errors.CodeDatabaseError, err, "统计关联套餐失败") + } + return count, nil +}