CommonHelpers.RequestResponse
0.0.1-beta.1
dotnet add package CommonHelpers.RequestResponse --version 0.0.1-beta.1
NuGet\Install-Package CommonHelpers.RequestResponse -Version 0.0.1-beta.1
<PackageReference Include="CommonHelpers.RequestResponse" Version="0.0.1-beta.1" />
<PackageVersion Include="CommonHelpers.RequestResponse" Version="0.0.1-beta.1" />
<PackageReference Include="CommonHelpers.RequestResponse" />
paket add CommonHelpers.RequestResponse --version 0.0.1-beta.1
#r "nuget: CommonHelpers.RequestResponse, 0.0.1-beta.1"
#:package CommonHelpers.RequestResponse@0.0.1-beta.1
#addin nuget:?package=CommonHelpers.RequestResponse&version=0.0.1-beta.1&prerelease
#tool nuget:?package=CommonHelpers.RequestResponse&version=0.0.1-beta.1&prerelease
💎 CommonHelpers.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 CommonHelpers.RequestResponse --version 0.0.1-beta.1
🚀 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. Rastreabilidade com IRequest
public class ProcessPaymentCommand : IRequest
{
public Guid IdRequest { get; } = Guid.NewGuid();
public decimal Amount { get; set; }
}
6. Interoperabilidade com Response<T> (Legado)
// Result<T> -> Response<T>
Response<UserDto> legacyResponse = result.ToResponse();
// Response<T> -> Result<T>
Result<UserDto> modernResult = legacyResponse.ToResult();
🏛️ Compatibilidade
- .NET 6.0
- .NET 8.0 (LTS)
- .NET 9.0 (Standard)
- Zero Dependências Externas (100% BCL Pura).
| 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 |
|---|