TD.Shared.Contracts 1.0.28

Shared – Contracts

The Contracts layer provides common shared parts of TD domain. Should be reference cross all valid projects. Must be pure contract layer.

Contents

Split into folders by business logic, but can be shared across all projects.

  • DTOs (Try to use Immutable DTOs implemented with Records)
  • Enums
  • Interfaces

USAGE IMPLEMENTATION EXAMPLE FluentValidationFilter

  • In this package we have "IFluentValidate" interface, which is implemented by DTOs that need validation.

example implementation of FluentValidationFilter in WebApi project:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public sealed class FluentValidation : Attribute, IAsyncActionFilter
{
    public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
    {
        IServiceProvider serviceProvider = context.HttpContext.RequestServices;
        CancellationToken ct = context.HttpContext.RequestAborted;
        var allErrors = new Dictionary<string, List<string>>();

        IEnumerable<IFluentValidate> singleValidatableArgs = context.ActionArguments.Values.OfType<IFluentValidate>();
        IEnumerable<IFluentValidate> collectionValidatableArgs = context.ActionArguments.Values
            .OfType<IEnumerable>()
            .SelectMany(c => c.OfType<IFluentValidate>());

        List<IFluentValidate> validationArgs = singleValidatableArgs.Concat(collectionValidatableArgs).ToList();
        await ValidateArgumentsAsync(serviceProvider, allErrors, validationArgs, ct);

        if (allErrors.Count > 0)
        {
            List<ErrorDetail> errorDetails = allErrors.SelectMany(kv => kv.Value.Select(errorMessage =>
                new ErrorDetail
                {
                    ErrorCode = ErrorCode.InvalidParameterValues.GetCode(),
                    Message = errorMessage,
                    Field = kv.Key
                })).ToList();

            throw new BadRequestException("One or more validation errors occurred.", ErrorCode.InvalidParameterValues, errorDetails);
        }

        await next();
    }

    private static async Task ValidateArgumentsAsync(
        IServiceProvider serviceProvider,
        Dictionary<string, List<string>> allErrors,
        IEnumerable<IFluentValidate> singleValidatableArgs,
        CancellationToken ct)
    {
        foreach (IFluentValidate argument in singleValidatableArgs)
        {
            Dictionary<string, List<string>> errors = await ValidateItemAsync(argument, serviceProvider, ct);
            foreach (var (key, messages) in errors)
            {
                allErrors[key] = messages;
            }
        }
    }

    private static async Task<Dictionary<string, List<string>>> ValidateItemAsync(
        IFluentValidate item,
        IServiceProvider serviceProvider,
        CancellationToken ct)
    {
        var validatorType = typeof(IValidator<>).MakeGenericType(item.GetType());
        if (serviceProvider.GetService(validatorType) is not IValidator validator)
        {
            return [];
        }

        var validationContext = new ValidationContext<IFluentValidate>(item);

        var result = await validator.ValidateAsync(validationContext, ct);
        if (result.IsValid)
        {
            return [];
        }

        return result.Errors
            .GroupBy(e => e.PropertyName)
            .ToDictionary(
                g => g.Key,
                g => g.Select(e => e.ErrorMessage).ToList());
    }
}

Showing the top 20 packages that depend on TD.Shared.Contracts.

Packages Downloads
TD.UrbanMobility.Data
Package Description
77
TD.Timetable
Methods for loading timetables
44
TD.UrbanMobility.Data
Package Description
28
TD.Timetable
Methods for loading timetables
28
TD.UrbanMobility.Data
Package Description
25
TD.Timetable
Methods for loading timetables
25
TD.Timetable
Methods for loading timetables
21
TD.Timetable
Methods for loading timetables
20
TD.UrbanMobility.Data
Package Description
17
TD.UrbanMobility.Data
Package Description
16
TD.Timetable
Methods for loading timetables
16
TD.UrbanMobility.Data
Package Description
15
TD.Timetable
Methods for loading timetables
14
TD.UrbanMobility.Data
Package Description
13
TD.Timetable
Methods for loading timetables
13
TD.UrbanMobility.Data
Package Description
11
TD.Timetable
Methods for loading timetables
11

.NET 10.0

Version Downloads Last updated
1.0.37 14 07/22/2026
1.0.36 37 07/06/2026
1.0.35 8 07/03/2026
1.0.34 8 07/01/2026
1.0.33 12 07/01/2026
1.0.32 17 06/30/2026
1.0.30 11 06/25/2026
1.0.29 4 06/24/2026
1.0.28 8 06/24/2026
1.0.27 9 06/24/2026
1.0.26 7 06/22/2026
1.0.25 2 06/19/2026
1.0.24 17 06/17/2026
1.0.23 7 06/16/2026
1.0.22 14 06/09/2026
1.0.21 31 06/04/2026
1.0.20 66 05/29/2026
1.0.19 7 05/28/2026
1.0.18 8 05/26/2026
1.0.17 13 05/25/2026
1.0.16 37 05/18/2026
1.0.15 19 05/13/2026
1.0.14 21 05/11/2026
1.0.13 7 05/05/2026
1.0.12 22 04/29/2026
1.0.11 14 04/26/2026
1.0.10 70 04/26/2026
1.0.9 36 04/11/2026
1.0.8 35 04/06/2026
1.0.7 9 04/04/2026
1.0.6 8 04/04/2026
1.0.5 22 04/03/2026
1.0.4 8 03/27/2026
1.0.3 7 03/27/2026
1.0.2 10 03/24/2026
1.0.1 7 03/24/2026
1.0.0 7 03/24/2026