feat: Implement User Package Status and User Order Management features
- Added GetUserPackageStatus functionality with mapping and service implementation. - Introduced UserOrder service methods for updating order status, applying discounts, and calculating order PV. - Created Protobuf definitions for public messages and user orders, including necessary request and response messages. - Implemented mapping profiles for package and user order related queries and commands. - Developed query handlers and validators for new commands and queries in the application layer. - Established PublicMessage service for handling public messages with appropriate gRPC endpoints.
This commit is contained in:
@@ -16,12 +16,14 @@
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\BackOffice.BFF.Domain\BackOffice.BFF.Domain.csproj" />
|
||||
<ProjectReference Include="..\Protobufs\BackOffice.BFF.Package.Protobuf\BackOffice.BFF.Package.Protobuf.csproj" />
|
||||
<ProjectReference Include="..\Protobufs\BackOffice.BFF.UserOrder.Protobuf\BackOffice.BFF.UserOrder.Protobuf.csproj" />
|
||||
<ProjectReference Include="..\Protobufs\BackOffice.BFF.Commission.Protobuf\BackOffice.BFF.Commission.Protobuf.csproj" />
|
||||
<ProjectReference Include="..\Protobufs\BackOffice.BFF.NetworkMembership.Protobuf\BackOffice.BFF.NetworkMembership.Protobuf.csproj" />
|
||||
<ProjectReference Include="..\Protobufs\BackOffice.BFF.ClubMembership.Protobuf\BackOffice.BFF.ClubMembership.Protobuf.csproj" />
|
||||
<ProjectReference Include="..\Protobufs\BackOffice.BFF.Configuration.Protobuf\BackOffice.BFF.Configuration.Protobuf.csproj" />
|
||||
<ProjectReference Include="..\Protobufs\BackOffice.BFF.Health.Protobuf\BackOffice.BFF.Health.Protobuf.csproj" />
|
||||
<ProjectReference Include="..\Protobufs\BackOffice.BFF.PublicMessage.Protobuf\BackOffice.BFF.PublicMessage.Protobuf.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -25,7 +25,7 @@ public class CreateDiscountCategoryCommandHandler : IRequestHandler<CreateDiscou
|
||||
};
|
||||
|
||||
if (request.ParentCategoryId.HasValue)
|
||||
createRequest.ParentCategoryId = new Int64Value { Value = request.ParentCategoryId.Value };
|
||||
createRequest.ParentCategoryId = request.ParentCategoryId.Value ;
|
||||
|
||||
// Upload Image
|
||||
if (request.ImageFile != null && request.ImageFile.File != null && request.ImageFile.File.Length > 0)
|
||||
|
||||
@@ -26,7 +26,7 @@ public class UpdateDiscountCategoryCommandHandler : IRequestHandler<UpdateDiscou
|
||||
};
|
||||
|
||||
if (request.ParentCategoryId.HasValue)
|
||||
updateRequest.ParentCategoryId = new Int64Value { Value = request.ParentCategoryId.Value };
|
||||
updateRequest.ParentCategoryId =request.ParentCategoryId.Value ;
|
||||
|
||||
// Upload new Image if provided
|
||||
if (request.ImageFile != null && request.ImageFile.File != null && request.ImageFile.File.Length > 0)
|
||||
|
||||
@@ -17,10 +17,10 @@ public class GetDiscountCategoriesQueryHandler : IRequestHandler<GetDiscountCate
|
||||
var grpcRequest = new GetDiscountCategoriesRequest();
|
||||
|
||||
if (request.ParentCategoryId.HasValue)
|
||||
grpcRequest.ParentCategoryId = new Int64Value { Value = request.ParentCategoryId.Value };
|
||||
grpcRequest.ParentCategoryId = request.ParentCategoryId.Value ;
|
||||
|
||||
if (request.IsActive.HasValue)
|
||||
grpcRequest.IsActive = new BoolValue { Value = request.IsActive.Value };
|
||||
grpcRequest.IsActive = request.IsActive.Value ;
|
||||
|
||||
var response = await _context.DiscountCategories.GetDiscountCategoriesAsync(grpcRequest, cancellationToken: cancellationToken);
|
||||
|
||||
@@ -37,9 +37,9 @@ public class GetDiscountCategoriesQueryHandler : IRequestHandler<GetDiscountCate
|
||||
Id = node.Id,
|
||||
Name = node.Name,
|
||||
Title = node.Title,
|
||||
Description = node.HasDescription ? node.Description.Value : string.Empty,
|
||||
ImagePath = node.HasImagePath ? node.ImagePath.Value : string.Empty,
|
||||
ParentCategoryId = node.HasParentCategoryId ? node.ParentCategoryId.Value : null,
|
||||
Description = string.IsNullOrWhiteSpace(node.Description) ? node.Description : string.Empty,
|
||||
ImagePath =string.IsNullOrWhiteSpace(node.ImagePath)? node.ImagePath : string.Empty,
|
||||
ParentCategoryId = node.ParentCategoryId!=null? node.ParentCategoryId.Value : null,
|
||||
SortOrder = node.SortOrder,
|
||||
IsActive = node.IsActive,
|
||||
ProductCount = node.ProductCount,
|
||||
|
||||
@@ -22,22 +22,22 @@ public class GetDiscountProductsQueryHandler : IRequestHandler<GetDiscountProduc
|
||||
};
|
||||
|
||||
if (request.CategoryId.HasValue)
|
||||
grpcRequest.CategoryId = new Int64Value { Value = request.CategoryId.Value };
|
||||
grpcRequest.CategoryId = request.CategoryId.Value ;
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(request.SearchQuery))
|
||||
grpcRequest.SearchQuery = new StringValue { Value = request.SearchQuery };
|
||||
grpcRequest.SearchQuery = request.SearchQuery;
|
||||
|
||||
if (request.MinPrice.HasValue)
|
||||
grpcRequest.MinPrice = new Int64Value { Value = request.MinPrice.Value };
|
||||
grpcRequest.MinPrice = request.MinPrice.Value ;
|
||||
|
||||
if (request.MaxPrice.HasValue)
|
||||
grpcRequest.MaxPrice = new Int64Value { Value = request.MaxPrice.Value };
|
||||
grpcRequest.MaxPrice = request.MaxPrice.Value ;
|
||||
|
||||
if (request.IsActive.HasValue)
|
||||
grpcRequest.IsActive = new BoolValue { Value = request.IsActive.Value };
|
||||
grpcRequest.IsActive = request.IsActive.Value ;
|
||||
|
||||
if (request.InStock.HasValue)
|
||||
grpcRequest.InStock = new BoolValue { Value = request.InStock.Value };
|
||||
grpcRequest.InStock = request.InStock.Value ;
|
||||
|
||||
var response = await _context.DiscountProducts.GetDiscountProductsAsync(grpcRequest, cancellationToken: cancellationToken);
|
||||
|
||||
@@ -46,7 +46,7 @@ public class GetDiscountProductsQueryHandler : IRequestHandler<GetDiscountProduc
|
||||
MetaData = new MetaData
|
||||
{
|
||||
CurrentPage = response.MetaData.CurrentPage,
|
||||
TotalPage = response.MetaData.TotalPages,
|
||||
TotalPage = response.MetaData.TotalPage,
|
||||
PageSize = response.MetaData.PageSize,
|
||||
TotalCount = response.MetaData.TotalCount,
|
||||
HasPrevious = response.MetaData.HasPrevious,
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
using BackOffice.BFF.Package.Protobuf.Protos.Package;
|
||||
using MediatR;
|
||||
|
||||
namespace BackOffice.BFF.Application.PackageCQ.Queries.GetUserPackageStatus;
|
||||
|
||||
public record GetUserPackageStatusQuery : IRequest<GetUserPackageStatusResponse>
|
||||
{
|
||||
public long UserId { get; init; }
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
using BackOffice.BFF.Package.Protobuf.Protos.Package;
|
||||
using MediatR;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace BackOffice.BFF.Application.PackageCQ.Queries.GetUserPackageStatus;
|
||||
|
||||
public class GetUserPackageStatusQueryHandler : IRequestHandler<GetUserPackageStatusQuery, GetUserPackageStatusResponse>
|
||||
{
|
||||
private readonly PackageContract.PackageContractClient _packageClient;
|
||||
private readonly ILogger<GetUserPackageStatusQueryHandler> _logger;
|
||||
|
||||
public GetUserPackageStatusQueryHandler(
|
||||
PackageContract.PackageContractClient packageClient,
|
||||
ILogger<GetUserPackageStatusQueryHandler> logger)
|
||||
{
|
||||
_packageClient = packageClient;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
public async Task<GetUserPackageStatusResponse> Handle(GetUserPackageStatusQuery request, CancellationToken cancellationToken)
|
||||
{
|
||||
// TODO: پیادهسازی GetUserPackageStatus
|
||||
//
|
||||
// 1. ایجاد gRPC Request:
|
||||
// - var grpcRequest = new CMSMicroservice.Protobuf.Protos.Package.GetUserPackageStatusRequest {
|
||||
// UserId = request.UserId
|
||||
// }
|
||||
//
|
||||
// 2. فراخوانی CMS:
|
||||
// - var response = await _packageClient.GetUserPackageStatusAsync(grpcRequest, cancellationToken: cancellationToken)
|
||||
//
|
||||
// 3. تبدیل به BFF Response:
|
||||
// - return new GetUserPackageStatusResponse {
|
||||
// UserId = response.UserId,
|
||||
// PackagePurchaseMethod = response.PackagePurchaseMethod,
|
||||
// HasPurchasedPackage = response.HasPurchasedPackage,
|
||||
// IsClubMemberActive = response.IsClubMemberActive,
|
||||
// WalletBalance = response.WalletBalance,
|
||||
// DiscountBalance = response.DiscountBalance,
|
||||
// CanActivateClubMembership = response.CanActivateClubMembership,
|
||||
// LastOrderNumber = response.LastOrderNumber,
|
||||
// LastPurchaseDate = response.LastPurchaseDate
|
||||
// }
|
||||
//
|
||||
// 4. Log:
|
||||
// - _logger.LogInformation("Retrieved package status for user {UserId}", request.UserId)
|
||||
//
|
||||
// نکته: این endpoint برای Admin است تا وضعیت کاربران را بررسی کند
|
||||
|
||||
throw new NotImplementedException("GetUserPackageStatus needs implementation");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
using FluentValidation;
|
||||
|
||||
namespace BackOffice.BFF.Application.PackageCQ.Queries.GetUserPackageStatus;
|
||||
|
||||
public class GetUserPackageStatusQueryValidator : AbstractValidator<GetUserPackageStatusQuery>
|
||||
{
|
||||
public GetUserPackageStatusQueryValidator()
|
||||
{
|
||||
RuleFor(x => x.UserId)
|
||||
.GreaterThan(0)
|
||||
.WithMessage("شناسه کاربر باید بزرگتر از 0 باشد");
|
||||
}
|
||||
}
|
||||
1
src/BackOffice.BFF.Application/PublicMessageCQ/.gitkeep
Normal file
1
src/BackOffice.BFF.Application/PublicMessageCQ/.gitkeep
Normal file
@@ -0,0 +1 @@
|
||||
// Placeholder for PublicMessageCQ
|
||||
@@ -0,0 +1,6 @@
|
||||
// TODO: PublicMessage Commands
|
||||
// - CreatePublicMessage
|
||||
// - UpdatePublicMessage
|
||||
// - DeletePublicMessage
|
||||
// - PublishMessage
|
||||
// - ArchiveMessage
|
||||
@@ -0,0 +1,17 @@
|
||||
// GetActiveMessages - Public view
|
||||
using MediatR;
|
||||
|
||||
namespace BackOffice.BFF.Application.PublicMessageCQ.Queries.GetActiveMessages;
|
||||
|
||||
public record GetActiveMessagesQuery : IRequest<object> // TODO: define response
|
||||
{
|
||||
}
|
||||
|
||||
public class GetActiveMessagesQueryHandler : IRequestHandler<GetActiveMessagesQuery, object>
|
||||
{
|
||||
public async Task<object> Handle(GetActiveMessagesQuery request, CancellationToken cancellationToken)
|
||||
{
|
||||
// TODO: gRPC call to CMS PublicMessageContract.GetActiveMessages
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
// GetAllMessages - Admin view
|
||||
using MediatR;
|
||||
|
||||
namespace BackOffice.BFF.Application.PublicMessageCQ.Queries.GetAllMessages;
|
||||
|
||||
public record GetAllMessagesQuery : IRequest<object> // TODO: define response
|
||||
{
|
||||
public int PageNumber { get; init; }
|
||||
public int PageSize { get; init; }
|
||||
}
|
||||
|
||||
public class GetAllMessagesQueryHandler : IRequestHandler<GetAllMessagesQuery, object>
|
||||
{
|
||||
public async Task<object> Handle(GetAllMessagesQuery request, CancellationToken cancellationToken)
|
||||
{
|
||||
// TODO: gRPC call to CMS PublicMessageContract.GetAllMessages
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
using BackOffice.BFF.UserOrder.Protobuf.Protos.UserOrder;
|
||||
using MediatR;
|
||||
|
||||
namespace BackOffice.BFF.Application.UserOrderCQ.Commands.ApplyDiscountToOrder;
|
||||
|
||||
public record ApplyDiscountToOrderCommand : IRequest<ApplyDiscountToOrderResponse>
|
||||
{
|
||||
public long OrderId { get; init; }
|
||||
public long DiscountAmount { get; init; }
|
||||
public string Reason { get; init; } = string.Empty;
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
using BackOffice.BFF.UserOrder.Protobuf.Protos.UserOrder;
|
||||
using MediatR;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace BackOffice.BFF.Application.UserOrderCQ.Commands.ApplyDiscountToOrder;
|
||||
|
||||
public class ApplyDiscountToOrderCommandHandler : IRequestHandler<ApplyDiscountToOrderCommand, ApplyDiscountToOrderResponse>
|
||||
{
|
||||
private readonly UserOrderContract.UserOrderContractClient _orderClient;
|
||||
private readonly ILogger<ApplyDiscountToOrderCommandHandler> _logger;
|
||||
|
||||
public ApplyDiscountToOrderCommandHandler(
|
||||
UserOrderContract.UserOrderContractClient orderClient,
|
||||
ILogger<ApplyDiscountToOrderCommandHandler> logger)
|
||||
{
|
||||
_orderClient = orderClient;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
public async Task<ApplyDiscountToOrderResponse> Handle(ApplyDiscountToOrderCommand request, CancellationToken cancellationToken)
|
||||
{
|
||||
// TODO: پیادهسازی ApplyDiscountToOrder
|
||||
// 1. ایجاد gRPC Request و فراخوانی CMS
|
||||
// 2. return response از CMS
|
||||
throw new NotImplementedException("ApplyDiscountToOrder needs implementation");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
using FluentValidation;
|
||||
|
||||
namespace BackOffice.BFF.Application.UserOrderCQ.Commands.ApplyDiscountToOrder;
|
||||
|
||||
public class ApplyDiscountToOrderCommandValidator : AbstractValidator<ApplyDiscountToOrderCommand>
|
||||
{
|
||||
public ApplyDiscountToOrderCommandValidator()
|
||||
{
|
||||
RuleFor(x => x.OrderId)
|
||||
.GreaterThan(0)
|
||||
.WithMessage("شناسه سفارش باید بزرگتر از 0 باشد");
|
||||
|
||||
RuleFor(x => x.DiscountAmount)
|
||||
.GreaterThan(0)
|
||||
.WithMessage("مبلغ تخفیف باید بزرگتر از 0 باشد");
|
||||
|
||||
RuleFor(x => x.Reason)
|
||||
.NotEmpty()
|
||||
.WithMessage("دلیل تخفیف الزامی است");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
using BackOffice.BFF.UserOrder.Protobuf.Protos.UserOrder;
|
||||
using MediatR;
|
||||
|
||||
namespace BackOffice.BFF.Application.UserOrderCQ.Commands.UpdateOrderStatus;
|
||||
|
||||
public record UpdateOrderStatusCommand : IRequest<UpdateOrderStatusResponse>
|
||||
{
|
||||
public long OrderId { get; init; }
|
||||
public int NewStatus { get; init; }
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
using BackOffice.BFF.UserOrder.Protobuf.Protos.UserOrder;
|
||||
using MediatR;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace BackOffice.BFF.Application.UserOrderCQ.Commands.UpdateOrderStatus;
|
||||
|
||||
public class UpdateOrderStatusCommandHandler : IRequestHandler<UpdateOrderStatusCommand, UpdateOrderStatusResponse>
|
||||
{
|
||||
private readonly UserOrderContract.UserOrderContractClient _orderClient;
|
||||
private readonly ILogger<UpdateOrderStatusCommandHandler> _logger;
|
||||
|
||||
public UpdateOrderStatusCommandHandler(
|
||||
UserOrderContract.UserOrderContractClient orderClient,
|
||||
ILogger<UpdateOrderStatusCommandHandler> logger)
|
||||
{
|
||||
_orderClient = orderClient;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
public async Task<UpdateOrderStatusResponse> Handle(UpdateOrderStatusCommand request, CancellationToken cancellationToken)
|
||||
{
|
||||
// TODO: پیادهسازی UpdateOrderStatus
|
||||
// 1. ایجاد gRPC Request و فراخوانی CMS
|
||||
// 2. return response از CMS
|
||||
throw new NotImplementedException("UpdateOrderStatus needs implementation");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
using FluentValidation;
|
||||
|
||||
namespace BackOffice.BFF.Application.UserOrderCQ.Commands.UpdateOrderStatus;
|
||||
|
||||
public class UpdateOrderStatusCommandValidator : AbstractValidator<UpdateOrderStatusCommand>
|
||||
{
|
||||
public UpdateOrderStatusCommandValidator()
|
||||
{
|
||||
RuleFor(x => x.OrderId)
|
||||
.GreaterThan(0)
|
||||
.WithMessage("شناسه سفارش باید بزرگتر از 0 باشد");
|
||||
|
||||
RuleFor(x => x.NewStatus)
|
||||
.IsInEnum()
|
||||
.WithMessage("وضعیت جدید معتبر نیست");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
using BackOffice.BFF.UserOrder.Protobuf.Protos.UserOrder;
|
||||
using CMSMicroservice.Protobuf.Protos.UserOrder;
|
||||
using MediatR;
|
||||
|
||||
namespace BackOffice.BFF.Application.UserOrderCQ.Queries.CalculateOrderPV;
|
||||
|
||||
public record CalculateOrderPVQuery : IRequest<CalculateOrderPVResponse>
|
||||
{
|
||||
public long OrderId { get; init; }
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
using CMSMicroservice.Protobuf.Protos.UserOrder;
|
||||
using MediatR;
|
||||
using UserOrderContract = BackOffice.BFF.UserOrder.Protobuf.Protos.UserOrder.UserOrderContract;
|
||||
|
||||
namespace BackOffice.BFF.Application.UserOrderCQ.Queries.CalculateOrderPV;
|
||||
|
||||
public class CalculateOrderPVQueryHandler : IRequestHandler<CalculateOrderPVQuery, CalculateOrderPVResponse>
|
||||
{
|
||||
private readonly UserOrderContract.UserOrderContractClient _orderClient;
|
||||
|
||||
public CalculateOrderPVQueryHandler(UserOrderContract.UserOrderContractClient orderClient)
|
||||
{
|
||||
_orderClient = orderClient;
|
||||
}
|
||||
|
||||
public async Task<CalculateOrderPVResponse> Handle(CalculateOrderPVQuery request, CancellationToken cancellationToken)
|
||||
{
|
||||
// TODO: پیادهسازی CalculateOrderPV
|
||||
// 1. ایجاد gRPC Request و فراخوانی CMS
|
||||
// 2. return response از CMS
|
||||
throw new NotImplementedException("CalculateOrderPV needs implementation");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
using FluentValidation;
|
||||
|
||||
namespace BackOffice.BFF.Application.UserOrderCQ.Queries.CalculateOrderPV;
|
||||
|
||||
public class CalculateOrderPVQueryValidator : AbstractValidator<CalculateOrderPVQuery>
|
||||
{
|
||||
public CalculateOrderPVQueryValidator()
|
||||
{
|
||||
RuleFor(x => x.OrderId)
|
||||
.GreaterThan(0)
|
||||
.WithMessage("شناسه سفارش باید بزرگتر از 0 باشد");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
using BackOffice.BFF.UserOrder.Protobuf.Protos.UserOrder;
|
||||
using MediatR;
|
||||
|
||||
namespace BackOffice.BFF.Application.UserOrderCQ.Queries.GetOrdersByDateRange;
|
||||
|
||||
public record GetOrdersByDateRangeQuery : IRequest<GetOrdersByDateRangeResponse>
|
||||
{
|
||||
public DateTime StartDate { get; init; }
|
||||
public DateTime EndDate { get; init; }
|
||||
public int? Status { get; init; }
|
||||
public long? UserId { get; init; }
|
||||
public int PageNumber { get; init; }
|
||||
public int PageSize { get; init; }
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
using FluentValidation;
|
||||
|
||||
namespace BackOffice.BFF.Application.UserOrderCQ.Queries.GetOrdersByDateRange;
|
||||
|
||||
public class GetOrdersByDateRangeQueryValidator : AbstractValidator<GetOrdersByDateRangeQuery>
|
||||
{
|
||||
public GetOrdersByDateRangeQueryValidator()
|
||||
{
|
||||
RuleFor(x => x.StartDate)
|
||||
.LessThanOrEqualTo(x => x.EndDate)
|
||||
.WithMessage("تاریخ شروع باید قبل از تاریخ پایان باشد");
|
||||
|
||||
RuleFor(x => x.PageNumber)
|
||||
.GreaterThan(0)
|
||||
.WithMessage("شماره صفحه باید بزرگتر از 0 باشد");
|
||||
|
||||
RuleFor(x => x.PageSize)
|
||||
.InclusiveBetween(1, 100)
|
||||
.WithMessage("اندازه صفحه باید بین 1 تا 100 باشد");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
using BackOffice.BFF.UserOrder.Protobuf.Protos.UserOrder;
|
||||
using MediatR;
|
||||
|
||||
namespace BackOffice.BFF.Application.UserOrderCQ.Queries.GetOrdersByDateRange;
|
||||
|
||||
public class GetOrdersByDateRangeQueryHandler : IRequestHandler<GetOrdersByDateRangeQuery, GetOrdersByDateRangeResponse>
|
||||
{
|
||||
private readonly UserOrderContract.UserOrderContractClient _orderClient;
|
||||
|
||||
public GetOrdersByDateRangeQueryHandler(UserOrderContract.UserOrderContractClient orderClient)
|
||||
{
|
||||
_orderClient = orderClient;
|
||||
}
|
||||
|
||||
public async Task<GetOrdersByDateRangeResponse> Handle(GetOrdersByDateRangeQuery request, CancellationToken cancellationToken)
|
||||
{
|
||||
// TODO: پیادهسازی GetOrdersByDateRange
|
||||
// 1. ایجاد gRPC Request و فراخوانی CMS
|
||||
// 2. return response از CMS
|
||||
throw new NotImplementedException("GetOrdersByDateRange needs implementation");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user