Caravel 0.24.0

dotnet add package Caravel --version 0.24.0
NuGet\Install-Package Caravel -Version 0.24.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.24.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Caravel --version 0.24.0
#r "nuget: Caravel, 0.24.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.24.0

// Install Caravel as a Cake Tool
#tool nuget:?package=Caravel&version=0.24.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.

  • Application context (User)
//Inject IAppContextAccessor on constructor.
IApplicationContextAccessor contextAccessor = ...

//Get the application context.
ApplicationContext context = contextAccessor.Context;

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

//Get TenantId of the current tenant. It is useful when dealing with multitenant applications.
ApplicationContext.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

    • No dependencies.

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.24.0 228 12/10/2023
0.23.0 103 12/10/2023
0.22.0 128 12/4/2023
0.21.0 1,943 10/2/2022
0.20.0 381 9/28/2022
0.19.0 404 9/24/2022
0.18.0 378 9/24/2022
0.17.0 612 9/24/2022
0.15.0 368 9/27/2021
0.14.0 484 4/10/2021
0.13.0 325 4/10/2021
0.12.0 590 11/21/2020
0.11.0 576 11/15/2020
0.10.0 590 10/27/2020
0.9.0 925 10/12/2020
0.8.0 1,153 5/29/2020
0.7.0 530 5/16/2020
0.6.0 386 4/24/2020
0.5.0 561 4/11/2020
0.4.2 572 4/11/2020
0.4.1 588 4/10/2020
0.4.0 731 1/27/2020
0.3.2 856 1/11/2020
0.3.1 574 1/11/2020
0.3.0 575 1/11/2020
0.2.2 668 1/4/2020
0.2.1 607 12/26/2019
0.2.0 619 12/26/2019
0.1.2 512 12/26/2019
0.1.1 498 12/24/2019
0.1.0 463 12/21/2019