diff --git a/src/Api/TakeoutSaaS.TenantApi/Contracts/Store/StoreFeesContracts.cs b/src/Api/TakeoutSaaS.TenantApi/Contracts/Store/StoreFeesContracts.cs index c6a279d..94f6a34 100644 --- a/src/Api/TakeoutSaaS.TenantApi/Contracts/Store/StoreFeesContracts.cs +++ b/src/Api/TakeoutSaaS.TenantApi/Contracts/Store/StoreFeesContracts.cs @@ -104,6 +104,21 @@ public sealed class StoreFeesSettingsDto public StoreOtherFeesDto OtherFees { get; set; } = new(); } +/// +/// 保存包装费模式请求。 +/// +public sealed class SaveStoreFeesModeRequest +{ + /// + /// StoreId。 + /// + public string StoreId { get; set; } = string.Empty; + /// + /// PackagingFeeMode。 + /// + public string PackagingFeeMode { get; set; } = "order"; +} + /// /// 复制费用请求。 /// diff --git a/src/Api/TakeoutSaaS.TenantApi/Controllers/StoreFeesController.cs b/src/Api/TakeoutSaaS.TenantApi/Controllers/StoreFeesController.cs index 07eeb28..3ee5f09 100644 --- a/src/Api/TakeoutSaaS.TenantApi/Controllers/StoreFeesController.cs +++ b/src/Api/TakeoutSaaS.TenantApi/Controllers/StoreFeesController.cs @@ -87,6 +87,40 @@ public sealed class StoreFeesController( return ApiResponse.Ok(MapFeeSettings(parsedStoreId, result)); } + /// + /// 保存包装费收取方式。 + /// + [HttpPost("fees/mode/save")] + [ProducesResponseType(typeof(ApiResponse), StatusCodes.Status200OK)] + public async Task> SaveMode([FromBody] SaveStoreFeesModeRequest request, CancellationToken cancellationToken) + { + var parsedStoreId = StoreApiHelpers.ParseRequiredSnowflake(request.StoreId, "storeId"); + var packagingFeeMode = ParsePackagingFeeMode(request.PackagingFeeMode); + var (tenantId, merchantId) = StoreApiHelpers.GetTenantMerchantContext(storeContextService); + var store = await StoreApiHelpers.EnsureStoreAccessibleAsync(dbContext, tenantId, merchantId, parsedStoreId, cancellationToken); + + var fee = await dbContext.StoreFees + .FirstOrDefaultAsync(x => x.TenantId == tenantId && x.StoreId == parsedStoreId, cancellationToken); + if (fee is null) + { + fee = new StoreFee + { + StoreId = parsedStoreId, + TenantId = store.TenantId + }; + await dbContext.StoreFees.AddAsync(fee, cancellationToken); + } + + fee.PackagingFeeMode = packagingFeeMode; + if (packagingFeeMode == PackagingFeeMode.PerItem) + { + fee.OrderPackagingFeeMode = OrderPackagingFeeMode.Fixed; + } + + await dbContext.SaveChangesAsync(cancellationToken); + return ApiResponse.Ok(null); + } + /// /// 复制费用设置。 ///