TL.RequestResponse
0.1.0
Este pacote foi descontinuado e oficialmente renomeado para TL.BaseContracts para melhor refletir seu escopo unificado de contratos de entrada, saída e domínio em .NET. Por favor, atualize suas referências para 'TL.BaseContracts'.
dotnet add package TL.RequestResponse --version 0.1.0
NuGet\Install-Package TL.RequestResponse -Version 0.1.0
<PackageReference Include="TL.RequestResponse" Version="0.1.0" />
<PackageVersion Include="TL.RequestResponse" Version="0.1.0" />
<PackageReference Include="TL.RequestResponse" />
paket add TL.RequestResponse --version 0.1.0
#r "nuget: TL.RequestResponse, 0.1.0"
#:package TL.RequestResponse@0.1.0
#addin nuget:?package=TL.RequestResponse&version=0.1.0
#tool nuget:?package=TL.RequestResponse&version=0.1.0
💎 TL.RequestResponse
Modelagem moderna de resultados com Result Pattern, tipagem semântica de erros com ErrorType, erros de validação por campo (ValidationError), paginação padronizada (PagedResult<T> / PagedRequest), rastreabilidade de requisições com IRequest e envelope tradicional Response<T> com zero dependências externas para .NET 6, .NET 8 e .NET 9.
📦 Instalação
Adicione o pacote ao seu projeto via .NET CLI:
dotnet add package TL.RequestResponse --version 0.1.0
Como Usar
1. Paginação Padronizada (PagedResult<T> e PagedRequest)
Padronize as respostas de listagens e relatórios com cálculo automático de páginas e navegação:
using CommonHelpers.RequestResponse;
[HttpGet("users")]
public async Task<IActionResult> GetUsers([FromQuery] PagedRequest request)
{
// PagedRequest normaliza automaticamente PageNumber e PageSize
var (users, totalCount) = await _userRepository.GetPagedAsync(request.PageNumber, request.PageSize);
// Cria o PagedResult imutável com cálculo automático de páginas
var pagedResult = PagedResult<UserDto>.Create(users, totalCount, request.PageNumber, request.PageSize);
return Ok(pagedResult);
// Retorna: { items: [...], pageNumber: 1, pageSize: 10, totalCount: 45, totalPages: 5, hasPreviousPage: false, hasNextPage: true }
}
2. Múltiplos Erros de Validação por Campo (ValidationError)
Integração limpa com FluentValidation, DataAnnotations e formato RFC 7807 (ProblemDetails):
using CommonHelpers.RequestResponse;
public Result<UserDto> CreateUser(CreateUserCommand command)
{
var failures = new Dictionary<string, string[]>
{
{ "Email", new[] { "E-mail é obrigatório.", "Formato inválido." } },
{ "Password", new[] { "A senha deve conter no mínimo 8 caracteres." } }
};
if (failures.Count > 0)
{
return ValidationError.FromFailures(failures);
}
return new UserDto { Email = command.Email };
}
3. Result Pattern Moderno (Result<T> e Error)
Substitua exceções de fluxo por código funcional limpo, expressivo e seguro:
using CommonHelpers.RequestResponse;
public class UserService
{
public Result<UserDto> RegisterUser(string email, string password)
{
if (string.IsNullOrWhiteSpace(email))
{
return ValidationError.ForField("Email", "O e-mail fornecido é inválido.");
}
var user = new UserDto { Id = Guid.NewGuid(), Email = email };
return user; // Conversão implícita de sucesso
}
}
4. Consumindo com Pattern Matching (Match)
var result = userService.RegisterUser("dev@empresa.com", "senha123");
string responseText = result.Match(
onSuccess: user => $"Usuário registrado com sucesso! ID: {user.Id}",
onFailure: error => $"Falha [{error.Code}] ({error.Type}): {error.Message}"
);
5. Contratos Agnósticos de Mensageria (CommonHelpers.Messaging)
Publique e consuma eventos sem acoplar sua camada de domínio ou aplicação a nenhum broker concreto (RabbitMQ, Kafka, Azure Service Bus):
using CommonHelpers.Messaging;
public class OrderService
{
private readonly IEventProducer _eventProducer;
public OrderService(IEventProducer eventProducer) => _eventProducer = eventProducer;
public async Task CreateOrderAsync(OrderDto order, CancellationToken ct)
{
var orderCreated = new OrderCreatedEvent(order.Id, order.Total);
// Publicação agnóstica com metadados opcionais
var metadata = new EventMetadata().WithCorrelationId(Guid.NewGuid().ToString());
await _eventProducer.PublishAsync(orderCreated, metadata, ct);
}
}
Implementação de Handlers desacoplados:
using CommonHelpers.Messaging;
using CommonHelpers.RequestResponse;
public class OrderCreatedHandler : IEventHandler<OrderCreatedEvent>
{
public async Task<Result> HandleAsync(EventMessage<OrderCreatedEvent> message, CancellationToken ct)
{
Console.WriteLine($"Processando pedido: {message.Payload.OrderId}, EventId: {message.EventId}");
return Result.Success();
}
}
6. Rastreabilidade com IRequest
public class ProcessPaymentCommand : IRequest
{
public Guid IdRequest { get; } = Guid.NewGuid();
public decimal Amount { get; set; }
}
7. Interoperabilidade com Response<T> (Legado)
// Result<T> -> Response<T>
Response<UserDto> legacyResponse = result.ToResponse();
// Response<T> -> Result<T>
Result<UserDto> modernResult = legacyResponse.ToResult();
Compatibilidade & Princípios
- .NET 6.0, .NET 8.0 (LTS) e .NET 9.0
- Zero Dependências Externas (100% BCL Pura).
- Invariantes Protegidas:
IsSuccessé estritamente falso quando existem mensagens de erro.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net6.0
- No dependencies.
-
net8.0
- No dependencies.
-
net9.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated | |
|---|---|---|---|
| 0.1.0 | 191 | 9/7/2026 |