feat: add GetWeekDefinitions RPC and corresponding query handler for week retrieval

This commit is contained in:
masoodafar-web
2025-12-20 03:30:22 +03:30
parent 0cca79ebfe
commit 565a9605dc
37 changed files with 321 additions and 69 deletions
@@ -6,9 +6,9 @@ namespace FrontOffice.BFF.Application.CommissionCQ.Queries.GetMyCommissionPayout
public record GetMyCommissionPayoutsQuery : IRequest<GetMyCommissionPayoutsResponseDto> public record GetMyCommissionPayoutsQuery : IRequest<GetMyCommissionPayoutsResponseDto>
{ {
/// <summary> /// <summary>
/// شماره هفته در فرمت ISO (مثال: "2025-W48"، null = همه) /// شناسه تعریف هفته (null = همه)
/// </summary> /// </summary>
public string? WeekNumber { get; init; } public long? WeekDefinitionId { get; init; }
/// <summary> /// <summary>
/// وضعیت: 0=Pending, 1=Calculated, 2=Paid, 3=Withdrawn (null = همه) /// وضعیت: 0=Pending, 1=Calculated, 2=Paid, 3=Withdrawn (null = همه)
@@ -28,8 +28,8 @@ public class GetMyCommissionPayoutsQueryHandler : IRequestHandler<GetMyCommissio
}; };
// WeekNumber is string type in proto - assign directly // WeekNumber is string type in proto - assign directly
if (!string.IsNullOrEmpty(request.WeekNumber)) if (request.WeekDefinitionId!=null)
cmsRequest.WeekNumber = request.WeekNumber; cmsRequest.WeekDefinitionId = request.WeekDefinitionId;
if (request.Status.HasValue) if (request.Status.HasValue)
cmsRequest.Status = request.Status.Value; // int? type in proto cmsRequest.Status = request.Status.Value; // int? type in proto
@@ -39,8 +39,8 @@ public class GetMyCommissionPayoutsQueryHandler : IRequestHandler<GetMyCommissio
var payouts = response.Models.Select(p => new CommissionPayoutDto var payouts = response.Models.Select(p => new CommissionPayoutDto
{ {
Id = p.Id, Id = p.Id,
WeekNumber = p.WeekNumber, WeekDefinitionId = p.WeekDefinitionId,
WeekLabel = $"هفته {p.WeekNumber}", WeekDisplayName = p.WeekDisplayName,
BalancesEarned = (int)p.BalancesEarned, BalancesEarned = (int)p.BalancesEarned,
TotalAmount = p.TotalAmount, TotalAmount = p.TotalAmount,
AmountFormatted = FormatCurrency(p.TotalAmount), AmountFormatted = FormatCurrency(p.TotalAmount),
@@ -16,14 +16,14 @@ public class CommissionPayoutDto
public long Id { get; set; } public long Id { get; set; }
/// <summary> /// <summary>
/// شماره هفته (e.g., "2024-W45") /// شناسه تعریف هفته
/// </summary> /// </summary>
public string WeekNumber { get; set; } = string.Empty; public long WeekDefinitionId { get; set; }
/// <summary> /// <summary>
/// لیبل هفته (هفته 45 - آذر 1403) /// نام نمایشی هفته (هفته 45 - آذر 1403)
/// </summary> /// </summary>
public string WeekLabel { get; set; } = string.Empty; public string WeekDisplayName { get; set; } = string.Empty;
/// <summary> /// <summary>
/// تعداد Balance کسب شده /// تعداد Balance کسب شده
@@ -6,9 +6,9 @@ namespace FrontOffice.BFF.Application.CommissionCQ.Queries.GetMyWeeklyBalances;
public record GetMyWeeklyBalancesQuery : IRequest<GetMyWeeklyBalancesResponseDto> public record GetMyWeeklyBalancesQuery : IRequest<GetMyWeeklyBalancesResponseDto>
{ {
/// <summary> /// <summary>
/// شماره هفته در فرمت ISO (مثال: "2025-W48"، null = هفته جاری) /// شناسه تعریف هفته (null = همه هفته‌ها)
/// </summary> /// </summary>
public string? WeekNumber { get; init; } public long? WeekDefinitionId { get; init; }
/// <summary> /// <summary>
/// فقط تعادل‌های فعال (غیر منقضی) /// فقط تعادل‌های فعال (غیر منقضی)
@@ -29,8 +29,8 @@ public class GetMyWeeklyBalancesQueryHandler : IRequestHandler<GetMyWeeklyBalanc
}; };
// WeekNumber is string in proto (format: "YYYY-Www") // WeekNumber is string in proto (format: "YYYY-Www")
if (!string.IsNullOrEmpty(request.WeekNumber)) if (request.WeekDefinitionId!=null && request.WeekDefinitionId>0)
cmsRequest.WeekNumber = request.WeekNumber; cmsRequest.WeekDefinitionId = request.WeekDefinitionId;
var response = await _context.Commission.GetUserWeeklyBalancesAsync(cmsRequest, cancellationToken: cancellationToken); var response = await _context.Commission.GetUserWeeklyBalancesAsync(cmsRequest, cancellationToken: cancellationToken);
@@ -38,7 +38,8 @@ public class GetMyWeeklyBalancesQueryHandler : IRequestHandler<GetMyWeeklyBalanc
var balances = response.Models.Select(b => new WeeklyBalanceItemDto var balances = response.Models.Select(b => new WeeklyBalanceItemDto
{ {
Id = b.Id, Id = b.Id,
WeekNumber = b.WeekNumber, WeekDefinitionId = b.WeekDefinitionId,
WeekLabel = b.WeekDisplayName,
LeftLegBalances = b.LeftLegBalances, LeftLegBalances = b.LeftLegBalances,
RightLegBalances = b.RightLegBalances, RightLegBalances = b.RightLegBalances,
TotalBalances = b.TotalBalances, TotalBalances = b.TotalBalances,
@@ -46,9 +46,14 @@ public class WeeklyBalanceItemDto
public long Id { get; set; } public long Id { get; set; }
/// <summary> /// <summary>
/// شماره هفته (فرمت: "2025-W48") /// شناسه تعریف هفته
/// </summary> /// </summary>
public string WeekNumber { get; set; } = string.Empty; public long WeekDefinitionId { get; set; }
/// <summary>
/// برچسب هفته (مثال: "هفته اول")
/// </summary>
public string WeekLabel { get; set; } = string.Empty;
/// <summary> /// <summary>
/// تعادل پای چپ /// تعادل پای چپ
@@ -0,0 +1,25 @@
namespace FrontOffice.BFF.Application.CommissionCQ.Queries.GetWeekDefinitions;
/// <summary>
/// دریافت لیست هفته‌ها برای dropdown
/// </summary>
public record GetWeekDefinitionsQuery : IRequest<GetWeekDefinitionsResponseDto>
{
//جستجوی متنی روی DisplayName
public string? SearchText { get; init; }
//شماره صفحه
public int PageNumber { get; init; } = 1;
//تعداد در صفحه
public int PageSize { get; init; } = 100;
//سال میلادی
public int? GregorianYear { get; init; }
//سال شمسی
public int? PersianYear { get; init; }
//فقط هفته‌های فعال
public bool? IsActive { get; init; }
}
@@ -0,0 +1,78 @@
using CMSMicroservice.Protobuf.Protos.Commission;
using FrontOffice.BFF.Application.Common.Models;
namespace FrontOffice.BFF.Application.CommissionCQ.Queries.GetWeekDefinitions;
public class GetWeekDefinitionsQueryHandler : IRequestHandler<GetWeekDefinitionsQuery, GetWeekDefinitionsResponseDto>
{
private readonly IApplicationContractContext _context;
public GetWeekDefinitionsQueryHandler(IApplicationContractContext context)
{
_context = context;
}
public async Task<GetWeekDefinitionsResponseDto> Handle(GetWeekDefinitionsQuery request, CancellationToken cancellationToken)
{
// ساخت درخواست به CMS
var cmsRequest = new GetWeekDefinitionsRequest
{
PaginationState = new CMSMicroservice.Protobuf.Protos.PaginationState
{
PageNumber = request.PageNumber,
PageSize = request.PageSize
}
};
// اعمال فیلتر
var filter = new GetWeekDefinitionsFilter();
if (!string.IsNullOrWhiteSpace(request.SearchText))
filter.SearchText = request.SearchText;
if (request.GregorianYear.HasValue)
filter.GregorianYear = request.GregorianYear.Value;
if (request.PersianYear.HasValue)
filter.PersianYear = request.PersianYear.Value;
if (request.IsActive.HasValue)
filter.IsActive = request.IsActive.Value;
cmsRequest.Filter = filter;
// فراخوانی CMS
var response = await _context.Commission.GetWeekDefinitionsAsync(cmsRequest, cancellationToken: cancellationToken);
// تبدیل به DTO
var weeks = response.Data.Select(w => new WeekDefinitionDto
{
Id = w.Id,
WeekOrder = w.WeekOrder,
DisplayName = w.DisplayName,
GregorianWeekNumber = w.GregorianWeekNumber,
PersianWeekNumber = w.PersianWeekNumber,
StartDate = w.StartDate?.ToDateTime() ?? DateTime.MinValue,
EndDate = w.EndDate?.ToDateTime() ?? DateTime.MinValue,
GregorianYear = w.GregorianYear,
PersianYear = w.PersianYear,
IsActive = w.IsActive,
IsCurrentWeek = w.IsCurrentWeek,
StartDatePersian = FormatPersianDate(w.StartDate?.ToDateTime()),
EndDatePersian = FormatPersianDate(w.EndDate?.ToDateTime())
}).ToList();
return new GetWeekDefinitionsResponseDto
{
Data = weeks,
TotalCount = response.TotalCount
};
}
private static string FormatPersianDate(DateTime? date)
{
if (!date.HasValue) return string.Empty;
// TODO: استفاده از PersianCalendar
return date.Value.ToString("yyyy/MM/dd");
}
}
@@ -0,0 +1,58 @@
namespace FrontOffice.BFF.Application.CommissionCQ.Queries.GetWeekDefinitions;
/// <summary>
/// پاسخ لیست هفته‌ها
/// </summary>
public class GetWeekDefinitionsResponseDto
{
//لیست هفته‌ها
public List<WeekDefinitionDto> Data { get; set; } = new();
//تعداد کل
public int TotalCount { get; set; }
}
/// <summary>
/// آیتم هفته برای dropdown
/// </summary>
public class WeekDefinitionDto
{
//شناسه تعریف هفته
public long Id { get; set; }
//شماره ترتیب هفته (1, 2, 3, ...)
public int WeekOrder { get; set; }
//نام نمایشی هفته (هفته یکم، هفته دوم، ...)
public string DisplayName { get; set; } = string.Empty;
//شماره هفته میلادی (2025-W46)
public string GregorianWeekNumber { get; set; } = string.Empty;
//شماره هفته شمسی (1404-W35)
public string PersianWeekNumber { get; set; } = string.Empty;
//تاریخ شروع هفته
public DateTime StartDate { get; set; }
//تاریخ پایان هفته
public DateTime EndDate { get; set; }
//سال میلادی
public int GregorianYear { get; set; }
//سال شمسی
public int PersianYear { get; set; }
//فعال بودن
public bool IsActive { get; set; }
//آیا هفته جاری است؟
public bool IsCurrentWeek { get; set; }
//تاریخ شروع به شمسی
public string StartDatePersian { get; set; } = string.Empty;
//تاریخ پایان به شمسی
public string EndDatePersian { get; set; } = string.Empty;
}
@@ -84,7 +84,7 @@ public class GetMyNetworkTreeQueryHandler : IRequestHandler<GetMyNetworkTreeQuer
IsActive = cmsNode.IsActive, IsActive = cmsNode.IsActive,
JoinedAt = cmsNode.JoinedAt?.ToDateTime(), JoinedAt = cmsNode.JoinedAt?.ToDateTime(),
IsClubActive = cmsNode.IsClubActive, IsClubActive = cmsNode.IsClubActive,
ActivationWeekNumber = cmsNode.ActivationWeekNumber, ActivationWeekDefinitionId = cmsNode.ActivationWeekDefinitionId,
LeftChild = leftChild != null ? BuildNodeRecursive(leftChild, allNodes, nodeDict, level + 1) : null, LeftChild = leftChild != null ? BuildNodeRecursive(leftChild, allNodes, nodeDict, level + 1) : null,
RightChild = rightChild != null ? BuildNodeRecursive(rightChild, allNodes, nodeDict, level + 1) : null RightChild = rightChild != null ? BuildNodeRecursive(rightChild, allNodes, nodeDict, level + 1) : null
}; };
@@ -83,5 +83,5 @@ public class NetworkNodeDto
/// <summary> /// <summary>
/// شماره هفته فعال‌سازی /// شماره هفته فعال‌سازی
/// </summary> /// </summary>
public string? ActivationWeekNumber { get; set; } public long? ActivationWeekDefinitionId { get; set; }
} }
@@ -92,7 +92,7 @@ public class GetSubordinateTreeQueryHandler : IRequestHandler<GetSubordinateTree
IsActive = cmsNode.IsActive, IsActive = cmsNode.IsActive,
JoinedAt = cmsNode.JoinedAt?.ToDateTime(), JoinedAt = cmsNode.JoinedAt?.ToDateTime(),
IsClubActive = cmsNode.IsClubActive, IsClubActive = cmsNode.IsClubActive,
ActivationWeekNumber = cmsNode.ActivationWeekNumber, ActivationWeekDefinitionId = cmsNode.ActivationWeekDefinitionId,
LeftChild = leftChild != null ? BuildNodeRecursive(leftChild, allNodes, nodeDict, level + 1) : null, LeftChild = leftChild != null ? BuildNodeRecursive(leftChild, allNodes, nodeDict, level + 1) : null,
RightChild = rightChild != null ? BuildNodeRecursive(rightChild, allNodes, nodeDict, level + 1) : null RightChild = rightChild != null ? BuildNodeRecursive(rightChild, allNodes, nodeDict, level + 1) : null
}; };
@@ -30,7 +30,8 @@ public class GetUserWithdrawalsQueryHandler : IRequestHandler<GetUserWithdrawals
.Select(m => new UserWithdrawalModel .Select(m => new UserWithdrawalModel
{ {
Id = m.Id, Id = m.Id,
WeekNumber = m.WeekNumber, WeekDefinitionId = m.WeekDefinitionId,
WeekDisplayName = m.WeekDisplayName,
TotalAmount = m.TotalAmount, TotalAmount = m.TotalAmount,
Status = m.Status, Status = m.Status,
WithdrawalMethod = m.WithdrawalMethod, // int? type - no .Value needed WithdrawalMethod = m.WithdrawalMethod, // int? type - no .Value needed
@@ -8,7 +8,8 @@ public class GetUserWithdrawalsResponseDto
public class UserWithdrawalModel public class UserWithdrawalModel
{ {
public long Id { get; set; } public long Id { get; set; }
public string WeekNumber { get; set; } = string.Empty; public long WeekDefinitionId { get; set; }
public string WeekDisplayName { get; set; } = string.Empty;
public long TotalAmount { get; set; } public long TotalAmount { get; set; }
public int Status { get; set; } public int Status { get; set; }
public int? WithdrawalMethod { get; set; } public int? WithdrawalMethod { get; set; }
@@ -7,7 +7,7 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="Afrino.PYMSMicroservice.Protobuf" Version="0.0.11" /> <PackageReference Include="Afrino.PYMSMicroservice.Protobuf" Version="0.0.11" />
<!-- <PackageReference Include="Foursat.CMSMicroservice.Protobuf" Version="0.0.155" /> --> <PackageReference Include="Foursat.CMSMicroservice.Protobuf" Version="0.0.156" />
<PackageReference Include="Google.Protobuf" Version="3.33.0" /> <PackageReference Include="Google.Protobuf" Version="3.33.0" />
<PackageReference Include="Grpc.Net.ClientFactory" Version="2.54.0" /> <PackageReference Include="Grpc.Net.ClientFactory" Version="2.54.0" />
<PackageReference Include="Grpc.Tools" Version="2.76.0"> <PackageReference Include="Grpc.Tools" Version="2.76.0">
@@ -16,9 +16,9 @@
</PackageReference> </PackageReference>
</ItemGroup> </ItemGroup>
<ItemGroup> <!-- <ItemGroup>-->
<!-- Direct project reference to local CMS Protobuf for development --> <!-- &lt;!&ndash; Direct project reference to local CMS Protobuf for development &ndash;&gt;-->
<ProjectReference Include="../../../CMS/src/CMSMicroservice.Protobuf/CMSMicroservice.Protobuf.csproj" /> <!-- <ProjectReference Include="../../../CMS/src/CMSMicroservice.Protobuf/CMSMicroservice.Protobuf.csproj" />-->
</ItemGroup> <!-- </ItemGroup>-->
</Project> </Project>
@@ -1,5 +1,6 @@
using FrontOffice.BFF.Application.CommissionCQ.Queries.GetMyCommissionPayouts; using FrontOffice.BFF.Application.CommissionCQ.Queries.GetMyCommissionPayouts;
using FrontOffice.BFF.Application.CommissionCQ.Queries.GetMyWeeklyBalances; using FrontOffice.BFF.Application.CommissionCQ.Queries.GetMyWeeklyBalances;
using FrontOffice.BFF.Application.CommissionCQ.Queries.GetWeekDefinitions;
using Google.Protobuf.WellKnownTypes; using Google.Protobuf.WellKnownTypes;
using ProtoDto = FrontOffice.BFF.Commission.Protobuf.Protos.Commission; using ProtoDto = FrontOffice.BFF.Commission.Protobuf.Protos.Commission;
@@ -13,13 +14,13 @@ public class CommissionProfile : IRegister
config.NewConfig<ProtoDto.GetMyCommissionPayoutsRequest, GetMyCommissionPayoutsQuery>() config.NewConfig<ProtoDto.GetMyCommissionPayoutsRequest, GetMyCommissionPayoutsQuery>()
.Map(dest => dest.PageNumber, src => src.PageNumber) .Map(dest => dest.PageNumber, src => src.PageNumber)
.Map(dest => dest.PageSize, src => src.PageSize) .Map(dest => dest.PageSize, src => src.PageSize)
.Map(dest => dest.WeekNumber, src => src.WeekNumber) .Map(dest => dest.WeekDefinitionId, src => src.WeekDefinitionId != null ? (long?)src.WeekDefinitionId.Value : null)
.Map(dest => dest.Status, src => src.Status); .Map(dest => dest.Status, src => src.Status);
config.NewConfig<ProtoDto.GetMyWeeklyBalancesRequest, GetMyWeeklyBalancesQuery>() config.NewConfig<ProtoDto.GetMyWeeklyBalancesRequest, GetMyWeeklyBalancesQuery>()
.Map(dest => dest.PageNumber, src => src.PageNumber) .Map(dest => dest.PageNumber, src => src.PageNumber)
.Map(dest => dest.PageSize, src => src.PageSize) .Map(dest => dest.PageSize, src => src.PageSize)
.Map(dest => dest.WeekNumber, src => src.WeekNumber) .Map(dest => dest.WeekDefinitionId, src => src.WeekDefinitionId != null ? (long?)src.WeekDefinitionId.Value : null)
.Map(dest => dest.OnlyActive, src => src.OnlyActive); .Map(dest => dest.OnlyActive, src => src.OnlyActive);
// Response mappings // Response mappings
@@ -29,8 +30,8 @@ public class CommissionProfile : IRegister
config.NewConfig<CommissionPayoutDto, ProtoDto.CommissionPayoutModel>() config.NewConfig<CommissionPayoutDto, ProtoDto.CommissionPayoutModel>()
.Map(dest => dest.Id, src => src.Id) .Map(dest => dest.Id, src => src.Id)
.Map(dest => dest.WeekNumber, src => src.WeekNumber) .Map(dest => dest.WeekDefinitionId, src => src.WeekDefinitionId)
.Map(dest => dest.WeekLabel, src => src.WeekLabel) .Map(dest => dest.WeekDisplayName, src => src.WeekDisplayName)
.Map(dest => dest.BalancesEarned, src => src.BalancesEarned) .Map(dest => dest.BalancesEarned, src => src.BalancesEarned)
.Map(dest => dest.TotalAmount, src => src.TotalAmount) .Map(dest => dest.TotalAmount, src => src.TotalAmount)
.Map(dest => dest.AmountFormatted, src => src.AmountFormatted) .Map(dest => dest.AmountFormatted, src => src.AmountFormatted)
@@ -48,12 +49,38 @@ public class CommissionProfile : IRegister
config.NewConfig<WeeklyBalanceItemDto, ProtoDto.WeeklyBalanceModel>() config.NewConfig<WeeklyBalanceItemDto, ProtoDto.WeeklyBalanceModel>()
.Map(dest => dest.Id, src => src.Id) .Map(dest => dest.Id, src => src.Id)
.Map(dest => dest.WeekNumber, src => src.WeekNumber) .Map(dest => dest.WeekDefinitionId, src => src.WeekDefinitionId)
.Map(dest => dest.WeekDisplayName, src => src.WeekLabel)
.Map(dest => dest.LeftLegBalances, src => src.LeftLegBalances) .Map(dest => dest.LeftLegBalances, src => src.LeftLegBalances)
.Map(dest => dest.RightLegBalances, src => src.RightLegBalances) .Map(dest => dest.RightLegBalances, src => src.RightLegBalances)
.Map(dest => dest.TotalBalances, src => src.TotalBalances) .Map(dest => dest.TotalBalances, src => src.TotalBalances)
.Map(dest => dest.WeeklyPoolContribution, src => src.WeeklyPoolContribution) .Map(dest => dest.WeeklyPoolContribution, src => src.WeeklyPoolContribution)
.Map(dest => dest.IsExpired, src => src.IsExpired) .Map(dest => dest.IsExpired, src => src.IsExpired)
.Map(dest => dest.DatePersian, src => src.DatePersian); .Map(dest => dest.DatePersian, src => src.DatePersian);
// GetWeekDefinitions mappings
config.NewConfig<ProtoDto.GetWeekDefinitionsRequest, GetWeekDefinitionsQuery>()
.Map(dest => dest.SearchText, src => src.SearchText)
.Map(dest => dest.PageNumber, src => src.PageNumber > 0 ? src.PageNumber : 1)
.Map(dest => dest.PageSize, src => src.PageSize > 0 ? src.PageSize : 100)
.Map(dest => dest.GregorianYear, src => src.GregorianYear)
.Map(dest => dest.PersianYear, src => src.PersianYear)
.Map(dest => dest.IsActive, src => src.IsActive);
config.NewConfig<GetWeekDefinitionsResponseDto, ProtoDto.GetWeekDefinitionsResponse>()
.Map(dest => dest.TotalCount, src => src.TotalCount)
.Map(dest => dest.Data, src => src.Data);
config.NewConfig<WeekDefinitionDto, ProtoDto.WeekDefinitionModel>()
.Map(dest => dest.Id, src => src.Id)
.Map(dest => dest.WeekOrder, src => src.WeekOrder)
.Map(dest => dest.DisplayName, src => src.DisplayName)
.Map(dest => dest.StartDate, src => Timestamp.FromDateTime(DateTime.SpecifyKind(src.StartDate, DateTimeKind.Utc)))
.Map(dest => dest.EndDate, src => Timestamp.FromDateTime(DateTime.SpecifyKind(src.EndDate, DateTimeKind.Utc)))
.Map(dest => dest.GregorianYear, src => src.GregorianYear)
.Map(dest => dest.PersianYear, src => src.PersianYear)
.Map(dest => dest.IsActive, src => src.IsActive)
.Map(dest => dest.IsCurrentWeek, src => src.IsCurrentWeek)
.Map(dest => dest.StartDatePersian, src => src.StartDatePersian)
.Map(dest => dest.EndDatePersian, src => src.EndDatePersian);
} }
} }
@@ -44,7 +44,7 @@ public class NetworkMembershipProfile : IRegister
.Map(dest => dest.IsActive, src => src.IsActive) .Map(dest => dest.IsActive, src => src.IsActive)
.Map(dest => dest.JoinedAt, src => src.JoinedAt.HasValue ? Timestamp.FromDateTime(DateTime.SpecifyKind(src.JoinedAt.Value, DateTimeKind.Utc)) : null) .Map(dest => dest.JoinedAt, src => src.JoinedAt.HasValue ? Timestamp.FromDateTime(DateTime.SpecifyKind(src.JoinedAt.Value, DateTimeKind.Utc)) : null)
.Map(dest => dest.IsClubActive, src => src.IsClubActive) .Map(dest => dest.IsClubActive, src => src.IsClubActive)
.Map(dest => dest.ActivationWeekNumber, src => src.ActivationWeekNumber); .Map(dest => dest.ActivationWeekDefinitionId, src => src.ActivationWeekDefinitionId);
// Response mappings - Statistics // Response mappings - Statistics
config.NewConfig<GetMyNetworkStatisticsResponseDto, ProtoDto.GetMyNetworkStatisticsResponse>() config.NewConfig<GetMyNetworkStatisticsResponseDto, ProtoDto.GetMyNetworkStatisticsResponse>()
@@ -1,6 +1,7 @@
using FrontOffice.BFF.WebApi.Common.Services; using FrontOffice.BFF.WebApi.Common.Services;
using FrontOffice.BFF.Application.CommissionCQ.Queries.GetMyCommissionPayouts; using FrontOffice.BFF.Application.CommissionCQ.Queries.GetMyCommissionPayouts;
using FrontOffice.BFF.Application.CommissionCQ.Queries.GetMyWeeklyBalances; using FrontOffice.BFF.Application.CommissionCQ.Queries.GetMyWeeklyBalances;
using FrontOffice.BFF.Application.CommissionCQ.Queries.GetWeekDefinitions;
using FrontOffice.BFF.Commission.Protobuf.Protos.Commission; using FrontOffice.BFF.Commission.Protobuf.Protos.Commission;
namespace FrontOffice.BFF.WebApi.Services; namespace FrontOffice.BFF.WebApi.Services;
@@ -32,4 +33,12 @@ public class CommissionService : CommissionContract.CommissionContractBase
{ {
return await _dispatchRequestToCQRS.Handle<GetMyWeeklyBalancesRequest, GetMyWeeklyBalancesQuery, GetMyWeeklyBalancesResponse>(request, context); return await _dispatchRequestToCQRS.Handle<GetMyWeeklyBalancesRequest, GetMyWeeklyBalancesQuery, GetMyWeeklyBalancesResponse>(request, context);
} }
/// <summary>
/// دریافت لیست هفته‌ها برای dropdown
/// </summary>
public override async Task<GetWeekDefinitionsResponse> GetWeekDefinitions(GetWeekDefinitionsRequest request, ServerCallContext context)
{
return await _dispatchRequestToCQRS.Handle<GetWeekDefinitionsRequest, GetWeekDefinitionsQuery, GetWeekDefinitionsResponse>(request, context);
}
} }
+2 -2
View File
@@ -10,9 +10,9 @@
} }
}, },
"GrpcChannelOptions": { "GrpcChannelOptions": {
// "CMSMSAddress": "http://cms-svc", "CMSMSAddress": "http://cms-svc",
// "CMSMSAddress": "https://cms.foursat.afrino.co", // "CMSMSAddress": "https://cms.foursat.afrino.co",
"CMSMSAddress": "https://localhost:32846/", // "CMSMSAddress": "https://localhost:32846/",
"PYMSMSAddress": "https://ipg.afrino.co" "PYMSMSAddress": "https://ipg.afrino.co"
}, },
"CmsSignalR": { "CmsSignalR": {
@@ -3,7 +3,7 @@
<TargetFramework>net7.0</TargetFramework> <TargetFramework>net7.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<Version>0.0.13</Version> <Version>0.0.14</Version>
<PackageId>Foursat.FrontOffice.BFF.Category.Protobuf</PackageId> <PackageId>Foursat.FrontOffice.BFF.Category.Protobuf</PackageId>
<GeneratePackageOnBuild>False</GeneratePackageOnBuild> <GeneratePackageOnBuild>False</GeneratePackageOnBuild>
<DebugSymbols>False</DebugSymbols> <DebugSymbols>False</DebugSymbols>
@@ -3,7 +3,7 @@
<TargetFramework>net7.0</TargetFramework> <TargetFramework>net7.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<Version>0.0.1</Version> <Version>0.0.2</Version>
<PackageId>Foursat.FrontOffice.BFF.City.Protobuf</PackageId> <PackageId>Foursat.FrontOffice.BFF.City.Protobuf</PackageId>
<GeneratePackageOnBuild>False</GeneratePackageOnBuild> <GeneratePackageOnBuild>False</GeneratePackageOnBuild>
<DebugSymbols>False</DebugSymbols> <DebugSymbols>False</DebugSymbols>
@@ -3,7 +3,7 @@
<TargetFramework>net9.0</TargetFramework> <TargetFramework>net9.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<Version>0.0.3</Version> <Version>0.0.4</Version>
<PackageId>Foursat.FrontOffice.BFF.ClubMembership.Protobuf</PackageId> <PackageId>Foursat.FrontOffice.BFF.ClubMembership.Protobuf</PackageId>
<GeneratePackageOnBuild>False</GeneratePackageOnBuild> <GeneratePackageOnBuild>False</GeneratePackageOnBuild>
<DebugSymbols>False</DebugSymbols> <DebugSymbols>False</DebugSymbols>
@@ -3,7 +3,7 @@
<TargetFramework>net9.0</TargetFramework> <TargetFramework>net9.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<Version>0.0.2</Version> <Version>0.0.3</Version>
<PackageId>Foursat.FrontOffice.BFF.Commission.Protobuf</PackageId> <PackageId>Foursat.FrontOffice.BFF.Commission.Protobuf</PackageId>
<GeneratePackageOnBuild>False</GeneratePackageOnBuild> <GeneratePackageOnBuild>False</GeneratePackageOnBuild>
<DebugSymbols>False</DebugSymbols> <DebugSymbols>False</DebugSymbols>
@@ -25,6 +25,13 @@ service CommissionContract
get: "/Commission/MyWeeklyBalances" get: "/Commission/MyWeeklyBalances"
}; };
}; };
// دریافت لیست هفته‌ها برای dropdown
rpc GetWeekDefinitions(GetWeekDefinitionsRequest) returns (GetWeekDefinitionsResponse){
option (google.api.http) = {
get: "/Commission/WeekDefinitions"
};
};
} }
// ============ MetaData ============ // ============ MetaData ============
@@ -38,7 +45,7 @@ message GetMyCommissionPayoutsRequest
{ {
int32 page_number = 1; int32 page_number = 1;
int32 page_size = 2; int32 page_size = 2;
google.protobuf.StringValue week_number = 3; google.protobuf.Int64Value week_definition_id = 3;
google.protobuf.Int32Value status = 4; // 0=Pending, 1=Calculated, 2=Paid, 3=Withdrawn google.protobuf.Int32Value status = 4; // 0=Pending, 1=Calculated, 2=Paid, 3=Withdrawn
} }
@@ -51,8 +58,8 @@ message GetMyCommissionPayoutsResponse
message CommissionPayoutModel message CommissionPayoutModel
{ {
int64 id = 1; int64 id = 1;
string week_number = 2; int64 week_definition_id = 2;
string week_label = 3; string week_display_name = 3;
int32 balances_earned = 4; int32 balances_earned = 4;
int64 total_amount = 5; int64 total_amount = 5;
string amount_formatted = 6; string amount_formatted = 6;
@@ -67,7 +74,7 @@ message GetMyWeeklyBalancesRequest
{ {
int32 page_number = 1; int32 page_number = 1;
int32 page_size = 2; int32 page_size = 2;
google.protobuf.StringValue week_number = 3; google.protobuf.Int64Value week_definition_id = 3;
bool only_active = 4; bool only_active = 4;
} }
@@ -83,12 +90,51 @@ message GetMyWeeklyBalancesResponse
message WeeklyBalanceModel message WeeklyBalanceModel
{ {
int64 id = 1; int64 id = 1;
string week_number = 2; int64 week_definition_id = 2;
int32 left_leg_balances = 3; string week_display_name = 3;
int32 right_leg_balances = 4; int32 left_leg_balances = 4;
int32 total_balances = 5; int32 right_leg_balances = 5;
int64 weekly_pool_contribution = 6; int32 total_balances = 6;
bool is_expired = 7; int64 weekly_pool_contribution = 7;
google.protobuf.Timestamp calculated_at = 8; bool is_expired = 8;
string date_persian = 9; google.protobuf.Timestamp calculated_at = 9;
string date_persian = 10;
}
// ============ GetWeekDefinitions ============
message GetWeekDefinitionsRequest
{
//جستجوی متنی روی DisplayName
google.protobuf.StringValue search_text = 1;
//شماره صفحه
int32 page_number = 2;
//تعداد در صفحه
int32 page_size = 3;
//سال میلادی
google.protobuf.Int32Value gregorian_year = 4;
//سال شمسی
google.protobuf.Int32Value persian_year = 5;
//فقط هفته‌های فعال
google.protobuf.BoolValue is_active = 6;
}
message GetWeekDefinitionsResponse
{
repeated WeekDefinitionModel data = 1;
int32 total_count = 2;
}
message WeekDefinitionModel
{
int64 id = 1;
int32 week_order = 2;
string display_name = 3;
google.protobuf.Timestamp start_date = 4;
google.protobuf.Timestamp end_date = 5;
int32 gregorian_year = 6;
int32 persian_year = 7;
bool is_active = 8;
bool is_current_week = 9;
string start_date_persian = 10;
string end_date_persian = 11;
} }
@@ -4,7 +4,7 @@
<TargetFramework>net9.0</TargetFramework> <TargetFramework>net9.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<Version>0.0.1</Version> <Version>0.0.2</Version>
<DebugType>None</DebugType> <DebugType>None</DebugType>
<DebugSymbols>False</DebugSymbols> <DebugSymbols>False</DebugSymbols>
<GeneratePackageOnBuild>False</GeneratePackageOnBuild> <GeneratePackageOnBuild>False</GeneratePackageOnBuild>
@@ -3,7 +3,7 @@
<TargetFramework>net9.0</TargetFramework> <TargetFramework>net9.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<Version>0.0.2</Version> <Version>0.0.3</Version>
<PackageId>Foursat.FrontOffice.BFF.DiscountShop.Protobuf</PackageId> <PackageId>Foursat.FrontOffice.BFF.DiscountShop.Protobuf</PackageId>
<GeneratePackageOnBuild>False</GeneratePackageOnBuild> <GeneratePackageOnBuild>False</GeneratePackageOnBuild>
<DebugSymbols>False</DebugSymbols> <DebugSymbols>False</DebugSymbols>
@@ -3,7 +3,7 @@
<TargetFramework>net9.0</TargetFramework> <TargetFramework>net9.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<Version>0.0.2</Version> <Version>0.0.4</Version>
<PackageId>Foursat.FrontOffice.BFF.NetworkMembership.Protobuf</PackageId> <PackageId>Foursat.FrontOffice.BFF.NetworkMembership.Protobuf</PackageId>
<GeneratePackageOnBuild>False</GeneratePackageOnBuild> <GeneratePackageOnBuild>False</GeneratePackageOnBuild>
<DebugSymbols>False</DebugSymbols> <DebugSymbols>False</DebugSymbols>
@@ -75,7 +75,7 @@ message NetworkNodeModel
bool is_active = 10; bool is_active = 10;
google.protobuf.Timestamp joined_at = 11; google.protobuf.Timestamp joined_at = 11;
bool is_club_active = 12; bool is_club_active = 12;
google.protobuf.StringValue activation_week_number = 13; google.protobuf.Int64Value activation_week_definition_id = 13;
} }
// ============ GetMyNetworkStatistics ============ // ============ GetMyNetworkStatistics ============
@@ -4,7 +4,7 @@
<TargetFramework>net9.0</TargetFramework> <TargetFramework>net9.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<Version>0.0.113</Version> <Version>0.0.114</Version>
<DebugType>None</DebugType> <DebugType>None</DebugType>
<DebugSymbols>False</DebugSymbols> <DebugSymbols>False</DebugSymbols>
<GeneratePackageOnBuild>False</GeneratePackageOnBuild> <GeneratePackageOnBuild>False</GeneratePackageOnBuild>
@@ -3,7 +3,7 @@
<TargetFramework>net7.0</TargetFramework> <TargetFramework>net7.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<Version>0.0.17</Version> <Version>0.0.18</Version>
<PackageId>Foursat.FrontOffice.BFF.Products.Protobuf</PackageId> <PackageId>Foursat.FrontOffice.BFF.Products.Protobuf</PackageId>
<GeneratePackageOnBuild>False</GeneratePackageOnBuild> <GeneratePackageOnBuild>False</GeneratePackageOnBuild>
<DebugSymbols>False</DebugSymbols> <DebugSymbols>False</DebugSymbols>
@@ -3,7 +3,7 @@
<TargetFramework>net7.0</TargetFramework> <TargetFramework>net7.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<Version>0.0.16</Version> <Version>0.0.17</Version>
<PackageId>Foursat.FrontOffice.BFF.ShopingCart.Protobuf</PackageId> <PackageId>Foursat.FrontOffice.BFF.ShopingCart.Protobuf</PackageId>
<GeneratePackageOnBuild>False</GeneratePackageOnBuild> <GeneratePackageOnBuild>False</GeneratePackageOnBuild>
<DebugSymbols>False</DebugSymbols> <DebugSymbols>False</DebugSymbols>
@@ -4,7 +4,7 @@
<TargetFramework>net9.0</TargetFramework> <TargetFramework>net9.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<Version>0.0.112</Version> <Version>0.0.113</Version>
<DebugType>None</DebugType> <DebugType>None</DebugType>
<DebugSymbols>False</DebugSymbols> <DebugSymbols>False</DebugSymbols>
<GeneratePackageOnBuild>False</GeneratePackageOnBuild> <GeneratePackageOnBuild>False</GeneratePackageOnBuild>
@@ -4,7 +4,7 @@
<TargetFramework>net9.0</TargetFramework> <TargetFramework>net9.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<Version>0.0.117</Version> <Version>0.0.118</Version>
<DebugType>None</DebugType> <DebugType>None</DebugType>
<DebugSymbols>False</DebugSymbols> <DebugSymbols>False</DebugSymbols>
<GeneratePackageOnBuild>False</GeneratePackageOnBuild> <GeneratePackageOnBuild>False</GeneratePackageOnBuild>
@@ -4,7 +4,7 @@
<TargetFramework>net9.0</TargetFramework> <TargetFramework>net9.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<Version>0.0.115</Version> <Version>0.0.116</Version>
<DebugType>None</DebugType> <DebugType>None</DebugType>
<DebugSymbols>False</DebugSymbols> <DebugSymbols>False</DebugSymbols>
<GeneratePackageOnBuild>False</GeneratePackageOnBuild> <GeneratePackageOnBuild>False</GeneratePackageOnBuild>
@@ -4,7 +4,7 @@
<TargetFramework>net9.0</TargetFramework> <TargetFramework>net9.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<Version>0.0.115</Version> <Version>0.0.116</Version>
<DebugType>None</DebugType> <DebugType>None</DebugType>
<DebugSymbols>False</DebugSymbols> <DebugSymbols>False</DebugSymbols>
<GeneratePackageOnBuild>False</GeneratePackageOnBuild> <GeneratePackageOnBuild>False</GeneratePackageOnBuild>
@@ -3,7 +3,7 @@
<TargetFramework>net7.0</TargetFramework> <TargetFramework>net7.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<Version>0.0.15</Version> <Version>0.0.16</Version>
<PackageId>Foursat.FrontOffice.BFF.UserWallet.Protobuf</PackageId> <PackageId>Foursat.FrontOffice.BFF.UserWallet.Protobuf</PackageId>
<GeneratePackageOnBuild>False</GeneratePackageOnBuild> <GeneratePackageOnBuild>False</GeneratePackageOnBuild>
<DebugSymbols>False</DebugSymbols> <DebugSymbols>False</DebugSymbols>
@@ -95,12 +95,13 @@ message GetUserWithdrawalsResponse
message UserWithdrawalModel message UserWithdrawalModel
{ {
int64 id = 1; int64 id = 1;
string week_number = 2; int64 week_definition_id = 2;
int64 total_amount = 3; string week_display_name = 3;
int32 status = 4; int64 total_amount = 4;
google.protobuf.Int32Value withdrawal_method = 5; int32 status = 5;
string iban_number = 6; google.protobuf.Int32Value withdrawal_method = 6;
google.protobuf.Timestamp created = 7; string iban_number = 7;
google.protobuf.Timestamp created = 8;
} }
message GetWithdrawalSettingsResponse message GetWithdrawalSettingsResponse