using NetinaShop.Domain.Enums; namespace NetinaShop.Api.Controller; public class OrderBagController : ICarterModule { public void AddRoutes(IEndpointRouteBuilder app) { var group = app.NewVersionedApi("OrderBag") .MapGroup("api/order/bag") .RequireAuthorization(builder => builder.AddAuthenticationSchemes("Bearer").RequireAuthenticatedUser()); group.MapGet("", GetUserCurrentOrderBagAsync) .WithDisplayName("GetUserCurrentOrderBagAsync") .HasApiVersion(1.0); group.MapPost("add", AddProductToBagAsync) .WithDisplayName("AddProductToBag") .HasApiVersion(1.0); group.MapDelete("remove", RemoveFromOrderBagAsync) .WithDisplayName("RemoveFromOrderBag") .HasApiVersion(1.0); group.MapPost("discount/{orderId}", AddDiscountToOrderBagAsync) .WithDisplayName("AddDiscountToOrderBag") .HasApiVersion(1.0); group.MapPost("shipping/{orderId}", AddShippingToOrderBagAsync) .WithDisplayName("AddShippingToOrderBag") .HasApiVersion(1.0); group.MapPost("payment/{orderId}", SubmitOrderPaymentAsync) .WithDisplayName("SubmitOrderPayment") .HasApiVersion(1.0); } public async Task GetUserCurrentOrderBagAsync(IMediator mediator, CancellationToken cancellationToken) => TypedResults.Ok(await mediator.Send(new GetUserOrderBagQuery(), cancellationToken)); public async Task AddProductToBagAsync([FromBody] List requestDtos, IMediator mediator, CancellationToken cancellationToken) => TypedResults.Ok(await mediator.Send(new AddToOrderBagCommand(requestDtos), cancellationToken)); public async Task RemoveFromOrderBagAsync([FromBody] List requestDtos, IMediator mediator, CancellationToken cancellationToken) => TypedResults.Ok(await mediator.Send(new RemoveFromOrderBagCommand(requestDtos), cancellationToken)); public async Task AddDiscountToOrderBagAsync(Guid orderId, [FromQuery] string discountCode, IMediator mediator, CancellationToken cancellationToken) => TypedResults.Ok(await mediator.Send(new SubmitDiscountCommand(orderId, discountCode), cancellationToken)); public async Task AddShippingToOrderBagAsync(Guid orderId, [FromBody] SubmitOrderDeliveryCommand request, IMediator mediator, CancellationToken cancellationToken) => TypedResults.Ok( await mediator.Send(new SubmitOrderDeliveryCommand(request.Address, request.PostalCode, request.ReceiverPhoneNumber, request.ReceiverFullName, orderId, request.ShippingId), cancellationToken)); public async Task SubmitOrderPaymentAsync(Guid orderId, [FromQuery] OrderPaymentMethod paymentMethod, IMediator mediator, CancellationToken cancellationToken) => TypedResults.Ok( await mediator.Send(new SubmitOrderPaymentCommand(orderId, paymentMethod), cancellationToken)); }