TL.RequestResponse 0.1.0

Suggested Alternatives

TL.BaseContracts

Additional Details

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
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="TL.RequestResponse" Version="0.1.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="TL.RequestResponse" Version="0.1.0" />
                    
Directory.Packages.props
<PackageReference Include="TL.RequestResponse" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add TL.RequestResponse --version 0.1.0
                    
#r "nuget: TL.RequestResponse, 0.1.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package TL.RequestResponse@0.1.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=TL.RequestResponse&version=0.1.0
                    
Install as a Cake Addin
#tool nuget:?package=TL.RequestResponse&version=0.1.0
                    
Install as a Cake Tool

💎 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.

.NET 6.0 .NET 8.0 .NET 9.0 License: MIT


📦 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 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • 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 0.1.0 is deprecated because it is no longer maintained.