-
Notifications
You must be signed in to change notification settings - Fork 0
PT BR Integracoes e adaptadores
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
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.
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.
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
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.
Código e docs/ são canônicos · Code and docs/ are canonical · Base dbca345372483477097385eb43d850484b00ec13 · 2026-08-22 · Repositório / Repository