Caravel 0.33.0

dotnet add package Caravel --version 0.33.0
                    
NuGet\Install-Package Caravel -Version 0.33.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.33.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Caravel" Version="0.33.0" />
                    
Directory.Packages.props
<PackageReference Include="Caravel" />
                    
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 Caravel --version 0.33.0
                    
#r "nuget: Caravel, 0.33.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 Caravel@0.33.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=Caravel&version=0.33.0
                    
Install as a Cake Addin
#tool nuget:?package=Caravel&version=0.33.0
                    
Install as a Cake Tool

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 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.
  • net9.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.33.0 369 12/6/2024
0.32.0 17,528 10/12/2024
0.31.0 114 10/12/2024
0.30.0 124 10/12/2024
0.29.0 143 10/12/2024
0.28.0 128 10/11/2024
0.27.0 477 10/2/2024
0.26.0 188 9/28/2024
0.25.0 184 8/20/2024
0.24.0 290 12/10/2023
0.23.0 153 12/10/2023
0.22.0 184 12/4/2023
0.21.0 2,859 10/2/2022
0.20.0 430 9/28/2022
0.19.0 483 9/24/2022
0.18.0 444 9/24/2022
0.17.0 689 9/24/2022
0.15.0 446 9/27/2021
0.14.0 580 4/10/2021
0.13.0 410 4/10/2021
0.12.0 698 11/21/2020
0.11.0 680 11/15/2020
0.10.0 695 10/27/2020
0.9.0 1,054 10/12/2020
0.8.0 1,289 5/29/2020
0.7.0 635 5/16/2020
0.6.0 486 4/24/2020
0.5.0 663 4/11/2020
0.4.2 672 4/11/2020
0.4.1 705 4/10/2020
0.4.0 862 1/27/2020
0.3.2 982 1/11/2020
0.3.1 681 1/11/2020
0.3.0 685 1/11/2020
0.2.2 792 1/4/2020
0.2.1 715 12/26/2019
0.2.0 730 12/26/2019
0.1.2 617 12/26/2019
0.1.1 611 12/24/2019
0.1.0 576 12/21/2019