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 224 12/10/2023
0.23.0 102 12/10/2023
0.22.0 127 12/4/2023
0.21.0 1,646 10/2/2022
0.20.0 378 9/28/2022
0.19.0 403 9/24/2022
0.18.0 377 9/24/2022
0.17.0 610 9/24/2022
0.15.0 366 9/27/2021
0.14.0 483 4/10/2021
0.13.0 323 4/10/2021
0.12.0 588 11/21/2020
0.11.0 572 11/15/2020
0.10.0 587 10/27/2020
0.9.0 922 10/12/2020
0.8.0 1,148 5/29/2020
0.7.0 526 5/16/2020
0.6.0 384 4/24/2020
0.5.0 559 4/11/2020
0.4.2 570 4/11/2020
0.4.1 586 4/10/2020
0.4.0 729 1/27/2020
0.3.2 853 1/11/2020
0.3.1 573 1/11/2020
0.3.0 574 1/11/2020
0.2.2 665 1/4/2020
0.2.1 606 12/26/2019
0.2.0 617 12/26/2019
0.1.2 510 12/26/2019
0.1.1 496 12/24/2019
0.1.0 461 12/21/2019