feat: add GetAvailableWeeks query and update protobuf imports
Build and Deploy / build (push) Successful in 2m18s

This commit is contained in:
masoodafar-web
2025-12-12 05:57:32 +03:30
parent ce3b5db822
commit fe56b8f139
80 changed files with 308 additions and 238 deletions
@@ -1,5 +1,7 @@
using Foursat.BackOffice.BFF.Commission.Protos;
using CMSMicroservice.Protobuf.Protos.Commission;
namespace BackOffice.BFF.Application.CommissionCQ.Queries.GetAllWeeklyPools;
@@ -0,0 +1,7 @@
namespace BackOffice.BFF.Application.CommissionCQ.Queries.GetAvailableWeeks;
public class GetAvailableWeeksQuery : IRequest<GetAvailableWeeksResponseDto>
{
public int FutureWeeksCount { get; init; } = 4;
public int PastWeeksCount { get; init; } = 12;
}
@@ -0,0 +1,53 @@
using CMSMicroservice.Protobuf.Protos.Commission;
namespace BackOffice.BFF.Application.CommissionCQ.Queries.GetAvailableWeeks;
public class GetAvailableWeeksQueryHandler : IRequestHandler<GetAvailableWeeksQuery, GetAvailableWeeksResponseDto>
{
private readonly IApplicationContractContext _context;
public GetAvailableWeeksQueryHandler(IApplicationContractContext context)
{
_context = context;
}
public async Task<GetAvailableWeeksResponseDto> Handle(
GetAvailableWeeksQuery request,
CancellationToken cancellationToken)
{
// Call CMS microservice through BFF proto
var cmsRequest = new GetAvailableWeeksRequest
{
FutureWeeksCount = request.FutureWeeksCount,
PastWeeksCount = request.PastWeeksCount
};
var response = await _context.Commissions.GetAvailableWeeksAsync(cmsRequest, cancellationToken: cancellationToken);
// Map to DTO
return new GetAvailableWeeksResponseDto
{
CurrentWeek = MapToDto(response.CurrentWeek),
CalculatedWeeks = response.CalculatedWeeks.Select(MapToDto).ToList(),
PendingWeeks = response.PendingWeeks.Select(MapToDto).ToList(),
FutureWeeks = response.FutureWeeks.Select(MapToDto).ToList()
};
}
private static WeekInfoDto MapToDto(WeekInfo weekInfo)
{
return new WeekInfoDto
{
WeekNumber = weekInfo.WeekNumber,
StartDate = weekInfo.StartDate?.ToDateTime() ?? DateTime.MinValue,
EndDate = weekInfo.EndDate?.ToDateTime() ?? DateTime.MinValue,
IsCalculated = weekInfo.IsCalculated,
CalculatedAt = weekInfo.CalculatedAt?.ToDateTime(),
LastExecutionStatus = weekInfo.LastExecutionStatus,
TotalPoolAmount = weekInfo.TotalPoolAmount != 0 ? weekInfo.TotalPoolAmount : null,
EligibleUsersCount = weekInfo.EligibleUsersCount != 0 ? weekInfo.EligibleUsersCount : null,
DisplayText = weekInfo.DisplayText
};
}
}
@@ -0,0 +1,22 @@
namespace BackOffice.BFF.Application.CommissionCQ.Queries.GetAvailableWeeks;
public class GetAvailableWeeksResponseDto
{
public required WeekInfoDto CurrentWeek { get; init; }
public required List<WeekInfoDto> CalculatedWeeks { get; init; }
public required List<WeekInfoDto> PendingWeeks { get; init; }
public required List<WeekInfoDto> FutureWeeks { get; init; }
}
public class WeekInfoDto
{
public required string WeekNumber { get; init; }
public required DateTime StartDate { get; init; }
public required DateTime EndDate { get; init; }
public bool IsCalculated { get; init; }
public DateTime? CalculatedAt { get; init; }
public string? LastExecutionStatus { get; init; }
public long? TotalPoolAmount { get; init; }
public int? EligibleUsersCount { get; init; }
public required string DisplayText { get; init; }
}
@@ -1,5 +1,6 @@
using Foursat.BackOffice.BFF.Commission.Protos;
using CMSMicroservice.Protobuf.Protos.Commission;
namespace BackOffice.BFF.Application.CommissionCQ.Queries.GetUserPayouts;
@@ -1,5 +1,6 @@
using Foursat.BackOffice.BFF.Commission.Protos;
using CMSMicroservice.Protobuf.Protos.Commission;
namespace BackOffice.BFF.Application.CommissionCQ.Queries.GetUserWeeklyBalances;
@@ -1,5 +1,6 @@
using Foursat.BackOffice.BFF.Commission.Protos;
using CMSMicroservice.Protobuf.Protos.Commission;
namespace BackOffice.BFF.Application.CommissionCQ.Queries.GetWeeklyPool;
@@ -2,58 +2,12 @@ namespace BackOffice.BFF.Application.CommissionCQ.Queries.GetWeeklyPool;
public class GetWeeklyPoolResponseDto
{
/// <summary>
/// شناسه Pool
/// </summary>
public long Id { get; set; }
/// <summary>
/// شماره هفته (فرمت: YYYY-Www)
/// </summary>
public string WeekNumber { get; set; } = string.Empty;
/// <summary>
/// مجموع کل Pool (تومان)
/// </summary>
public decimal TotalPoolValue { get; set; }
/// <summary>
/// مجموع مشارکت‌های اولیه (InitialContribution)
/// </summary>
public decimal TotalContributions { get; set; }
/// <summary>
/// مجموع Payout های پرداخت شده
/// </summary>
public decimal TotalPayouts { get; set; }
/// <summary>
/// باقیمانده Pool
/// </summary>
public decimal LeftBalance { get; set; }
/// <summary>
/// تعداد اعضای فعال در این هفته
/// </summary>
public int ActiveMembersCount { get; set; }
/// <summary>
/// آیا محاسبه شده است؟
/// </summary>
public long TotalPoolAmount { get; set; }
public long TotalBalances { get; set; }
public decimal ValuePerBalance { get; set; }
public bool IsCalculated { get; set; }
/// <summary>
/// تاریخ محاسبه
/// </summary>
public DateTime? CalculatedAt { get; set; }
/// <summary>
/// تاریخ ایجاد
/// </summary>
public DateTime CreatedAt { get; set; }
/// <summary>
/// تاریخ آخرین ویرایش
/// </summary>
public DateTime? ModifiedAt { get; set; }
public DateTimeOffset Created { get; set; }
}
@@ -1,5 +1,6 @@
using Foursat.BackOffice.BFF.Commission.Protos;
using CMSMicroservice.Protobuf.Protos.Commission;
namespace BackOffice.BFF.Application.CommissionCQ.Queries.GetWithdrawalReports;
@@ -1,5 +1,6 @@
using Foursat.BackOffice.BFF.Commission.Protos;
using CMSMicroservice.Protobuf.Protos.Commission;
namespace BackOffice.BFF.Application.CommissionCQ.Queries.GetWithdrawalRequests;
@@ -1,5 +1,6 @@
using Foursat.BackOffice.BFF.Commission.Protos;
using CMSMicroservice.Protobuf.Protos.Commission;
namespace BackOffice.BFF.Application.CommissionCQ.Queries.GetWorkerExecutionLogs;
@@ -1,5 +1,6 @@
using Foursat.BackOffice.BFF.Commission.Protos;
using CMSMicroservice.Protobuf.Protos.Commission;
namespace BackOffice.BFF.Application.CommissionCQ.Queries.GetWorkerStatus;