Skip to content

PT BR Integracoes e adaptadores

Vinícius Campos edited this page Aug 22, 2026 · 1 revision

Integrações e adaptadores

English · Início em português

Os adaptadores preservam um modelo de domínio e o traduzem nas bordas dos frameworks.

flowchart TD
    Domain[Result ou Result de T] --> Asp[Offside.AspNetCore]
    Validation[Falhas FluentValidation] --> FV[Offside.FluentValidation]
    FV --> Errors[Erros Offside]
    Errors --> Fast[Resposta de validação Offside.FastEndpoint]
    Asp --> Problem[OffsideProblem]
    Fast --> Problem
    Problem --> Wire[application/problem+json]
    Azure[Resolver IConfiguration] --> Asp
    Json[Resolver JSON] --> Asp
Loading

ASP.NET Core

ToHttpResult atende Minimal APIs e ToActionResult atende MVC. Ambos usam a mesma escolha de erro primário, resolver e DTO de resposta. AddOffsideAspNetCore configura somente opções Offside; não adiciona middleware global de exceção.

FluentValidation e FastEndpoints

Offside.FluentValidation converte cada ValidationFailure em Error.Validation. O error code da falha vira chave de catálogo; códigos vazios ou nomes default *Validator são normalizados para validation, e o identificador estável do cliente continua VALIDATION.

Offside.FastEndpoint referencia FastEndpoints 8.3.0. O grafo restaurado no lock resolve FluentValidation 12.1.1 transitivamente. UseOffside instala o builder da resposta de validação, declara OffsideProblem e application/problem+json, e adiciona globalmente todos os status Offside a cada endpoint. Um endpoint pode optar por sair chamando DontProduceOffside().

SendOffsideAsync delega para ToHttpResult(...).ExecuteAsync(...). Seu parâmetro CancellationToken existe para combinar com assinaturas de handlers, mas é ignorado deliberadamente; cancelar esse token não cancela a serialização da resposta.

MediatR

sequenceDiagram
    participant App as Handler da aplicação
    participant Ext as PublishDomainNotificationsAsync
    participant Pub as MediatR IPublisher
    participant Col as Coletor scoped
    App->>Ext: Result falho
    loop cada erro na ordem do resultado
        Ext->>Pub: DomainNotification(error)
        Pub->>Col: Handle(notification)
    end
    Ext-->>App: Result original
    App->>Col: ToResult() / Errors
Loading

AddOffsideMediatR registra de forma idempotente o coletor scoped e seu handler. Não chama AddMediatR, não registra IPublisher, não faz scan de handlers da aplicação e não configura licenciamento MediatR. O host precisa fazer isso antes. O coletor persiste durante o scope de injeção e devolve snapshots; use um scope por operação lógica.

A publicação repassa o cancellation token ao MediatR e devolve o resultado original. O coletor deduplica o mesmo objeto de notificação, protegendo contra o mesmo handler registrado duas vezes, mas dois objetos diferentes com erros iguais continuam sendo notificações distintas.

Clone this wiki locally