Files
imprink/src/Imprink.WebApi/Controllers/OrdersController.cs
2025-06-26 00:16:26 +03:00

74 lines
2.2 KiB
C#

using Imprink.Application.Commands.Orders;
using Imprink.Application.Dtos;
using MediatR;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace Imprink.WebApi.Controllers;
[ApiController]
[Route("/api/orders")]
public class OrdersController(IMediator mediator) : ControllerBase
{
[HttpGet("{id:guid}")]
[Authorize]
public async Task<ActionResult<OrderDto>> GetOrderById(
Guid id,
[FromQuery] bool includeDetails = false,
CancellationToken cancellationToken = default)
{
var result = await mediator.Send(new GetOrderByIdQuery
{
Id = id,
IncludeDetails = includeDetails
}, cancellationToken);
if (result == null)
return NotFound();
return Ok(result);
}
[HttpGet("user/{userId}")]
[Authorize]
public async Task<ActionResult<IEnumerable<OrderDto>>> GetOrdersByUserId(
string userId,
[FromQuery] bool includeDetails = false,
CancellationToken cancellationToken = default)
{
var result = await mediator.Send(new GetOrdersByUserIdQuery
{
UserId = userId,
IncludeDetails = includeDetails
}, cancellationToken);
return Ok(result);
}
[HttpGet("merchant/{merchantId}")]
[Authorize(Roles = "Admin,Merchant")]
public async Task<ActionResult<IEnumerable<OrderDto>>> GetOrdersByMerchantId(
string merchantId,
[FromQuery] bool includeDetails = false,
CancellationToken cancellationToken = default)
{
var result = await mediator.Send(new GetOrdersByMerchantIdQuery
{
MerchantId = merchantId,
IncludeDetails = includeDetails
}, cancellationToken);
return Ok(result);
}
[HttpPost]
[Authorize]
public async Task<ActionResult<OrderDto>> CreateOrder(
[FromBody] CreateOrderCommand command,
CancellationToken cancellationToken = default)
{
var result = await mediator.Send(command, cancellationToken);
return CreatedAtAction(nameof(GetOrderById), new { id = result.Id }, result);
}
}