54 lines
1.6 KiB
C#
54 lines
1.6 KiB
C#
using Asp.Versioning.Builder;
|
|
using Asp.Versioning.Conventions;
|
|
using Microsoft.Extensions.DependencyInjection.Extensions;
|
|
using Vegasco.WebApi.Cars;
|
|
using Vegasco.WebApi.Common;
|
|
using Vegasco.WebApi.Consumptions;
|
|
using Vegasco.WebApi.Info;
|
|
|
|
namespace Vegasco.WebApi.Endpoints;
|
|
|
|
public static class EndpointExtensions
|
|
{
|
|
public static IServiceCollection AddEndpointsFromAssemblyContaining<T>(this IServiceCollection services)
|
|
{
|
|
var assembly = typeof(T).Assembly;
|
|
|
|
ServiceDescriptor[] serviceDescriptors = assembly
|
|
.DefinedTypes
|
|
.Where(type => type is { IsAbstract: false, IsInterface: false } &&
|
|
type.IsAssignableTo(typeof(IEndpoint)))
|
|
.Select(type => ServiceDescriptor.Transient(typeof(IEndpoint), type))
|
|
.ToArray();
|
|
|
|
services.TryAddEnumerable(serviceDescriptors);
|
|
|
|
return services;
|
|
}
|
|
|
|
public static void MapEndpoints(this IEndpointRouteBuilder builder)
|
|
{
|
|
ApiVersionSet apiVersionSet = builder.NewApiVersionSet()
|
|
.HasApiVersion(1.0)
|
|
.Build();
|
|
|
|
RouteGroupBuilder versionedApis = builder.MapGroup("/v{apiVersion:apiVersion}")
|
|
.WithApiVersionSet(apiVersionSet)
|
|
.RequireAuthorization(Constants.Authorization.RequireAuthenticatedUserPolicy);
|
|
|
|
GetCar.MapEndpoint(versionedApis);
|
|
GetCars.MapEndpoint(versionedApis);
|
|
CreateCar.MapEndpoint(versionedApis);
|
|
UpdateCar.MapEndpoint(versionedApis);
|
|
DeleteCar.MapEndpoint(versionedApis);
|
|
|
|
GetConsumptions.MapEndpoint(versionedApis);
|
|
GetConsumption.MapEndpoint(versionedApis);
|
|
CreateConsumption.MapEndpoint(versionedApis);
|
|
UpdateConsumption.MapEndpoint(versionedApis);
|
|
DeleteConsumption.MapEndpoint(versionedApis);
|
|
|
|
GetServerInfo.MapEndpoint(versionedApis);
|
|
}
|
|
}
|