feat(commission): add BulkCreditPayouts — credit wallets for pending payouts
Build and Deploy to Production / build-and-deploy (push) Has been cancelled

- commission.proto: add BulkCreditPayouts rpc + request/response messages; bump version to 0.0.198
- BulkCreditPayoutsCommand + Handler: load all Pending payouts for given week, credit UserWallet.Balance for each user, create UserWalletHistory + CommissionPayoutHistory records, set Status=Paid + PaidAt
- CommissionService: wire up BulkCreditPayouts gRPC method
- CommissionProfile: add Mapster mappings for request/result ↔ proto types

Previously ProcessUserPayouts created records with Status=Pending but never credited wallets, making CustomerWithdrawBalance unreachable (it requires Status==Paid).

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
masoodafar-web
2026-05-18 00:36:05 +03:30
parent 4e8caa6e2c
commit a2d13c72c3
6 changed files with 170 additions and 1 deletions
@@ -1,5 +1,6 @@
using System.Linq;
using CMSMicroservice.Application.CommissionCQ.Commands.TriggerWeeklyCalculation;
using CMSMicroservice.Application.CommissionCQ.Commands.BulkCreditPayouts;
using CMSMicroservice.Application.CommissionCQ.Queries.GetAllWeeklyPools;
using CMSMicroservice.Application.CommissionCQ.Queries.GetUserWeeklyBalances;
using CMSMicroservice.Application.CommissionCQ.Queries.GetMyWeeklyBalances;
@@ -20,6 +21,16 @@ public class CommissionProfile : IRegister
{
public void Register(TypeAdapterConfig config)
{
// BulkCreditPayouts Request Mapping (proto → command)
config.NewConfig<BulkCreditPayoutsRequest, BulkCreditPayoutsCommand>()
.Map(dest => dest.WeekDefinitionId, src => src.WeekDefinitionId);
// BulkCreditPayouts Response Mapping (result → proto)
config.NewConfig<BulkCreditPayoutsResult, BulkCreditPayoutsResponse>()
.Map(dest => dest.CreditedCount, src => src.CreditedCount)
.Map(dest => dest.TotalCredited, src => src.TotalCredited)
.Map(dest => dest.Message, src => $"{src.CreditedCount} کاربر، مجموعاً {src.TotalCredited:N0} ریال به کیف پول واریز شد");
// GetAvailableWeeks Request Mapping
config.NewConfig<GetAvailableWeeksRequest, GetAvailableWeeksQuery>()
.Map(dest => dest.FutureWeeksCount, src => src.FutureWeeksCount > 0 ? src.FutureWeeksCount : 4)