Skip to content

Instantly share code, notes, and snippets.

@rcarubbi
Created September 12, 2025 23:16
Show Gist options
  • Select an option

  • Save rcarubbi/b4ed3aef70a6a7101f0f0f9a3cf5cd59 to your computer and use it in GitHub Desktop.

Select an option

Save rcarubbi/b4ed3aef70a6a7101f0f0f9a3cf5cd59 to your computer and use it in GitHub Desktop.
// Adaptador HTTP (fino): só HTTP; delega para a mesma Facade
[ApiController]
[Route("api/orders")]
public sealed class OrdersController : ControllerBase
{
private readonly OrdersFacade _facade;
public OrdersController(OrdersFacade facade) => _facade = facade;
[HttpPost]
public ActionResult<PlaceOrderResponseDto> Post([FromBody] PlaceOrderRequestDto dto)
{
var resp = _facade.Place(dto);
return CreatedAtAction(nameof(Get), new { id = resp.OrderNumber }, resp);
}
[HttpGet("{id}")]
public ActionResult<object> Get(string id) => Ok(/* ... recuperar detalhes ... */);
}
// Adaptador gRPC (fino): só gRPC; delega para a mesma Facade
public sealed class OrdersGrpcService : OrdersGrpc.OrdersGrpcBase
{
private readonly OrdersFacade _facade;
public OrdersGrpcService(OrdersFacade facade) => _facade = facade;
public override Task<PlaceOrderReply> Place(PlaceOrderRequest request, ServerCallContext context)
{
var dto = new PlaceOrderRequestDto(
request.CustomerCode,
request.Currency,
request.Items.Select(i => new PlaceOrderItemDto(i.Sku, (int)i.Quantity, (decimal)i.UnitPrice)).ToList());
var resp = _facade.Place(dto);
return Task.FromResult(new PlaceOrderReply
{
OrderNumber = resp.OrderNumber,
TotalAmount = (double)resp.TotalAmount,
Currency = resp.Currency
});
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment