Caravel 0.31.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package Caravel --version 0.31.0                
NuGet\Install-Package Caravel -Version 0.31.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="Caravel" Version="0.31.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Caravel --version 0.31.0                
#r "nuget: Caravel, 0.31.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.
// Install Caravel as a Cake Addin
#addin nuget:?package=Caravel&version=0.31.0

// Install Caravel as a Cake Tool
#tool nuget:?package=Caravel&version=0.31.0                

Caravel alternate text is missing from this package README image

This package does not have any external dependency and it brings all basic utilities that every application should handle such as application context or exceptions.

  • IUserContext (User)
//Inject IUserContext on constructor.
IUserContext userContext = ...

//Get User Id of the current user.
userContext.UserId();

//Get TenantId of the current tenant. It is useful when dealing with multitenant applications.
userContext.TenantId();
  • Handling Errors
var customRawError = new Error("invalid_password", ErrorType.Validation, "Password does not match.", "Password does not match with the username.", Severity.Low);

# recommendation: use the static method to generate errors.

public static Error BookNotFoundError(Guid id) => Error.NotFound("book_not_found", $"Book {id} does not exist.");
  • Handling Exceptions
var databaseError = new Error("database_connection", ErrorType.Internal, "Cannot create database connection.", "The database is down.", Severity.Critical);

var exception = new CaravelException(databaseError, innerException);
  • DateTime Clock
IClock clock = new DateTimeClock();

var nowUtc = clock.NowUtc();
  • Json Serializers
    var model = new Dto("Caravel");
    var json = await model.SerializeAsync(JsonSerializerConfigurations.CamelCaseSerializer());
  • Functional

Result - Use Results instead of throwing exceptions

var result = Result<string>.Success("Success Value")
    .Map((success) => success.Length,
        (error) => error.Message.Length
    );

    var result = Result<string>.Failure(new Error("code_error", ErrorType.Validation, "Failure Value"))
        .Map((success) => success.Length,
            (error) => error.Message.Length
        );

Optional - Avoid Nulls using Optional Types

Optional<Product> result = await service.GetProductAsync(id);

return result switch {
            Some<Product> p => Ok(p),
            _ => NotFound()
        };

Either - Improve your error handling by using Either<Error,Success>

Either.Right<Error, Product> result = await service.GetProductAsync(id);

return result.Fold(
    (e) => new HttpError(e.Message),
    (product) => Ok(product));
Product Compatible and additional computed target framework versions.
.NET 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net8.0

NuGet packages (3)

Showing the top 3 NuGet packages that depend on Caravel:

Package Downloads
Caravel.AspNetCore

Caravel.AspNetCore is a package that contains common utilities for building asp.net core applications.

Caravel.MediatR

Caravel.MediatR is a package that contains reusable behaviours (validation, logging).

Caravel.EntityFramework

Caravel.EntityFramework contains extension methods that can be reuse across applications..

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
0.32.0 335 10/12/2024
0.31.0 75 10/12/2024
0.30.0 89 10/12/2024
0.29.0 104 10/12/2024
0.28.0 97 10/11/2024
0.27.0 441 10/2/2024
0.26.0 155 9/28/2024
0.25.0 158 8/20/2024
0.24.0 270 12/10/2023
0.23.0 137 12/10/2023
0.22.0 166 12/4/2023
0.21.0 2,816 10/2/2022
0.20.0 390 9/28/2022
0.19.0 430 9/24/2022
0.18.0 401 9/24/2022
0.17.0 646 9/24/2022
0.15.0 388 9/27/2021
0.14.0 518 4/10/2021
0.13.0 346 4/10/2021
0.12.0 629 11/21/2020
0.11.0 611 11/15/2020
0.10.0 625 10/27/2020
0.9.0 984 10/12/2020
0.8.0 1,215 5/29/2020
0.7.0 560 5/16/2020
0.6.0 407 4/24/2020
0.5.0 588 4/11/2020
0.4.2 598 4/11/2020
0.4.1 627 4/10/2020
0.4.0 783 1/27/2020
0.3.2 904 1/11/2020
0.3.1 603 1/11/2020
0.3.0 604 1/11/2020
0.2.2 709 1/4/2020
0.2.1 637 12/26/2019
0.2.0 649 12/26/2019
0.1.2 540 12/26/2019
0.1.1 534 12/24/2019
0.1.0 490 12/21/2019