feat : complete ordering , add version 0.17.18.25
parent
5969c26eb3
commit
b8c6a36e06
|
@ -17,12 +17,19 @@ public class OrderController : ICarterModule
|
||||||
.WithDisplayName("GetOneOrder")
|
.WithDisplayName("GetOneOrder")
|
||||||
.HasApiVersion(1.0);
|
.HasApiVersion(1.0);
|
||||||
|
|
||||||
|
group.MapPost("{id}/confirm", ConfirmOrderStepAsync)
|
||||||
|
.WithDisplayName("ConfirmOrderStep")
|
||||||
|
.HasApiVersion(1.0);
|
||||||
|
|
||||||
group.MapDelete("{id}", DeleteAsync)
|
group.MapDelete("{id}", DeleteAsync)
|
||||||
.WithDisplayName("DeleteOneOrder")
|
.WithDisplayName("DeleteOneOrder")
|
||||||
.HasApiVersion(1.0);
|
.HasApiVersion(1.0);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async Task<IResult> ConfirmOrderStepAsync(Guid id, [FromQuery] OrderStatus nextOrderStatus, [FromServices] IMediator mediator, CancellationToken cancellationToken)
|
||||||
|
=> TypedResults.Ok(await mediator.Send(new ConfirmOrderStepCommand(id, nextOrderStatus), cancellationToken));
|
||||||
|
|
||||||
public async Task<IResult> GetAllAsync(IMediator mediator, [FromQuery]long? selectedDate, [FromQuery] OrderStatus? orderStatus, [FromQuery] OrderQueryDateFilter? dateFilter, [FromQuery] int page = 0, CancellationToken cancellationToken = default)
|
public async Task<IResult> GetAllAsync(IMediator mediator, [FromQuery]long? selectedDate, [FromQuery] OrderStatus? orderStatus, [FromQuery] OrderQueryDateFilter? dateFilter, [FromQuery] int page = 0, CancellationToken cancellationToken = default)
|
||||||
=> TypedResults.Ok(await mediator.Send(new GetOrdersQuery(Page:page, SelectedDate: selectedDate, OrderStatus:orderStatus, DateFilter:dateFilter), cancellationToken));
|
=> TypedResults.Ok(await mediator.Send(new GetOrdersQuery(Page:page, SelectedDate: selectedDate, OrderStatus:orderStatus, DateFilter:dateFilter), cancellationToken));
|
||||||
|
|
||||||
|
|
|
@ -6,8 +6,8 @@
|
||||||
<ImplicitUsings>enable</ImplicitUsings>
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
<InvariantGlobalization>true</InvariantGlobalization>
|
<InvariantGlobalization>true</InvariantGlobalization>
|
||||||
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
|
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
|
||||||
<AssemblyVersion>0.17.16.23</AssemblyVersion>
|
<AssemblyVersion>0.17.18.25</AssemblyVersion>
|
||||||
<FileVersion>0.17.16.23</FileVersion>
|
<FileVersion>0.17.18.25</FileVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|
|
@ -34,7 +34,7 @@ public class SubmitOrderPaymentCommandHandler : IRequestHandler<SubmitOrderPayme
|
||||||
if (request.HasPaid)
|
if (request.HasPaid)
|
||||||
{
|
{
|
||||||
response.NeedToPayOnline = false;
|
response.NeedToPayOnline = false;
|
||||||
order.SetSubmitOrder(request.PaymentMethod);
|
order.SetOrderPayment(request.PaymentMethod);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -45,7 +45,7 @@ public class SubmitOrderPaymentCommandHandler : IRequestHandler<SubmitOrderPayme
|
||||||
else if (request.PaymentMethod == OrderPaymentMethod.PayOnDoor)
|
else if (request.PaymentMethod == OrderPaymentMethod.PayOnDoor)
|
||||||
{
|
{
|
||||||
response.NeedToPayOnline = false;
|
response.NeedToPayOnline = false;
|
||||||
order.SetSubmitOrder(request.PaymentMethod);
|
order.SetOrderPayment(request.PaymentMethod);
|
||||||
_repositoryWrapper.SetRepository<Order>().Update(order);
|
_repositoryWrapper.SetRepository<Order>().Update(order);
|
||||||
await _repositoryWrapper.SaveChangesAsync(cancellationToken);
|
await _repositoryWrapper.SaveChangesAsync(cancellationToken);
|
||||||
|
|
||||||
|
@ -57,7 +57,7 @@ public class SubmitOrderPaymentCommandHandler : IRequestHandler<SubmitOrderPayme
|
||||||
else if (request.PaymentMethod == OrderPaymentMethod.CardTransfer)
|
else if (request.PaymentMethod == OrderPaymentMethod.CardTransfer)
|
||||||
{
|
{
|
||||||
response.NeedToPayOnline = false;
|
response.NeedToPayOnline = false;
|
||||||
order.SetSubmitOrder(request.PaymentMethod);
|
order.SetOrderPayment(request.PaymentMethod);
|
||||||
_repositoryWrapper.SetRepository<Order>().Update(order);
|
_repositoryWrapper.SetRepository<Order>().Update(order);
|
||||||
await _repositoryWrapper.SaveChangesAsync(cancellationToken);
|
await _repositoryWrapper.SaveChangesAsync(cancellationToken);
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
namespace NetinaShop.Core.EntityServices.OrderHandlers;
|
||||||
|
|
||||||
|
public class ConfirmOrderStepCommandHandler : IRequestHandler<ConfirmOrderStepCommand,bool>
|
||||||
|
{
|
||||||
|
private readonly IRepositoryWrapper _repositoryWrapper;
|
||||||
|
|
||||||
|
public ConfirmOrderStepCommandHandler(IRepositoryWrapper repositoryWrapper)
|
||||||
|
{
|
||||||
|
_repositoryWrapper = repositoryWrapper;
|
||||||
|
}
|
||||||
|
public async Task<bool> Handle(ConfirmOrderStepCommand request, CancellationToken cancellationToken)
|
||||||
|
{
|
||||||
|
var order = await _repositoryWrapper.SetRepository<Order>()
|
||||||
|
.TableNoTracking
|
||||||
|
.FirstOrDefaultAsync(o => o.Id == request.OrderId, cancellationToken);
|
||||||
|
if (order == null)
|
||||||
|
throw new AppException("Order not found", ApiResultStatusCode.NotFound);
|
||||||
|
|
||||||
|
order.SetOrderStatus(request.NextOrderStatus);
|
||||||
|
|
||||||
|
_repositoryWrapper.SetRepository<Order>()
|
||||||
|
.Update(order);
|
||||||
|
await _repositoryWrapper.SaveChangesAsync(cancellationToken);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
|
@ -3,5 +3,6 @@
|
||||||
public sealed record CreateBaseOrderCommand(Guid UserId) : IRequest<Order>;
|
public sealed record CreateBaseOrderCommand(Guid UserId) : IRequest<Order>;
|
||||||
|
|
||||||
public sealed record CalculateOrderCommand(Guid OrderId , bool NamoosiCalculate = false) : IRequest<Order>;
|
public sealed record CalculateOrderCommand(Guid OrderId , bool NamoosiCalculate = false) : IRequest<Order>;
|
||||||
|
public sealed record ConfirmOrderStepCommand(Guid OrderId , OrderStatus NextOrderStatus) : IRequest<bool>;
|
||||||
|
|
||||||
public sealed record DeleteOrderCommand(Guid OrderId) : IRequest<bool>;
|
public sealed record DeleteOrderCommand(Guid OrderId) : IRequest<bool>;
|
|
@ -1,4 +1,7 @@
|
||||||
namespace NetinaShop.Domain.Entities.Orders;
|
using NetinaShop.Common.Models.Api;
|
||||||
|
using NetinaShop.Common.Models.Exception;
|
||||||
|
|
||||||
|
namespace NetinaShop.Domain.Entities.Orders;
|
||||||
|
|
||||||
public partial class Order
|
public partial class Order
|
||||||
{
|
{
|
||||||
|
@ -46,7 +49,7 @@ public partial class Order
|
||||||
public void AddOrderProduct(OrderProduct orderProduct)
|
public void AddOrderProduct(OrderProduct orderProduct)
|
||||||
=> OrderProducts.Add(orderProduct);
|
=> OrderProducts.Add(orderProduct);
|
||||||
|
|
||||||
public void SetSubmitOrder(OrderPaymentMethod paymentMethod)
|
public void SetOrderPayment(OrderPaymentMethod paymentMethod)
|
||||||
{
|
{
|
||||||
switch (paymentMethod)
|
switch (paymentMethod)
|
||||||
{
|
{
|
||||||
|
@ -72,6 +75,34 @@ public partial class Order
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SetOrderStatus(OrderStatus orderStatus)
|
||||||
|
{
|
||||||
|
switch (orderStatus)
|
||||||
|
{
|
||||||
|
case OrderStatus.OrderBag:
|
||||||
|
throw new AppException("Order is in cart so you cant change it", ApiResultStatusCode.BadRequest);
|
||||||
|
break;
|
||||||
|
case OrderStatus.Submitted:
|
||||||
|
break;
|
||||||
|
case OrderStatus.Paid:
|
||||||
|
throw new AppException("use set payment method", ApiResultStatusCode.BadRequest);
|
||||||
|
break;
|
||||||
|
case OrderStatus.Processing:
|
||||||
|
break;
|
||||||
|
case OrderStatus.Delivered:
|
||||||
|
DeliveredAt = DateTime.Now;
|
||||||
|
break;
|
||||||
|
case OrderStatus.Done:
|
||||||
|
DoneAt = DateTime.Now;
|
||||||
|
break;
|
||||||
|
case OrderStatus.Canceled:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new ArgumentOutOfRangeException(nameof(orderStatus), orderStatus, null);
|
||||||
|
}
|
||||||
|
OrderStatus = orderStatus;
|
||||||
|
}
|
||||||
|
|
||||||
public void AddOrderDelivery(Guid addressId, double deliveryCost, Guid shippingId, Guid orderId)
|
public void AddOrderDelivery(Guid addressId, double deliveryCost, Guid shippingId, Guid orderId)
|
||||||
{
|
{
|
||||||
var orderDelivery = OrderDelivery.Create(addressId, deliveryCost, shippingId, orderId);
|
var orderDelivery = OrderDelivery.Create(addressId, deliveryCost, shippingId, orderId);
|
||||||
|
|
|
@ -60,11 +60,13 @@ public partial class Order : ApiEntity
|
||||||
public double TaxesPrice { get; internal set; }
|
public double TaxesPrice { get; internal set; }
|
||||||
public double TotalPrice { get; internal set; }
|
public double TotalPrice { get; internal set; }
|
||||||
public bool IsPayed { get; internal set; }
|
public bool IsPayed { get; internal set; }
|
||||||
public DateTime PayedAt { get; internal set; }
|
|
||||||
public OrderPaymentMethod PaymentMethod { get; internal set; }
|
public OrderPaymentMethod PaymentMethod { get; internal set; }
|
||||||
public OrderStatus OrderStatus { get; internal set; }
|
public OrderStatus OrderStatus { get; internal set; }
|
||||||
|
|
||||||
|
public DateTime DeliveredAt { get; internal set; }
|
||||||
public DateTime DoneAt { get; internal set; }
|
public DateTime DoneAt { get; internal set; }
|
||||||
public DateTime OrderAt { get; internal set; }
|
public DateTime OrderAt { get; internal set; }
|
||||||
|
public DateTime PayedAt { get; internal set; }
|
||||||
public int PreparingMinute { get; internal set; }
|
public int PreparingMinute { get; internal set; }
|
||||||
public string DiscountCode { get; internal set; } = string.Empty;
|
public string DiscountCode { get; internal set; } = string.Empty;
|
||||||
|
|
||||||
|
|
|
@ -11,12 +11,15 @@ public enum OrderStatus
|
||||||
[Display(Name = "پرداخت شده", Description = "PAID")]
|
[Display(Name = "پرداخت شده", Description = "PAID")]
|
||||||
Paid = 2,
|
Paid = 2,
|
||||||
|
|
||||||
|
[Display(Name = "درحال پردازش", Description = "PROCESSING")]
|
||||||
|
Processing = 10,
|
||||||
|
|
||||||
[Display(Name = "ارسال شده", Description = "DELIVERED")]
|
[Display(Name = "ارسال شده", Description = "DELIVERED")]
|
||||||
Delivered = 3,
|
Delivered = 20,
|
||||||
|
|
||||||
[Display(Name = "انجام شده", Description = "DONE")]
|
[Display(Name = "انجام شده", Description = "DONE")]
|
||||||
Done = 4,
|
Done = 200,
|
||||||
|
|
||||||
[Display(Name = "کنسل شده", Description = "CANCELED")]
|
[Display(Name = "کنسل شده", Description = "CANCELED")]
|
||||||
Canceled = 5
|
Canceled = 500
|
||||||
}
|
}
|
|
@ -14,8 +14,10 @@ public class GetOrdersQueryHandler : IRequestHandler<GetOrdersQuery,List<OrderSD
|
||||||
public async Task<List<OrderSDto>> Handle(GetOrdersQuery request, CancellationToken cancellationToken)
|
public async Task<List<OrderSDto>> Handle(GetOrdersQuery request, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
|
|
||||||
IQueryable<Order> orders = _repositoryWrapper.SetRepository<Order>()
|
IQueryable<Order> orders = _repositoryWrapper
|
||||||
.TableNoTracking;
|
.SetRepository<Order>()
|
||||||
|
.TableNoTracking
|
||||||
|
.Where(o=>o.OrderStatus != OrderStatus.OrderBag);
|
||||||
|
|
||||||
if (request.DateFilter != null)
|
if (request.DateFilter != null)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue