Add project files.
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
using Ardalis.Result;
|
||||
|
||||
namespace WebApi.Extensions;
|
||||
|
||||
public static class ResultHttpExtensions
|
||||
{
|
||||
public static IResult ToHttpResult(this Result result) =>
|
||||
result.Status switch
|
||||
{
|
||||
ResultStatus.Ok or ResultStatus.NoContent => Results.NoContent(),
|
||||
ResultStatus.NotFound => Results.NotFound(result.Errors.FirstOrDefault()),
|
||||
ResultStatus.Invalid => Results.ValidationProblem(ToValidationDictionary(result.ValidationErrors)),
|
||||
ResultStatus.Unauthorized => Results.Unauthorized(),
|
||||
ResultStatus.Forbidden => Results.StatusCode(StatusCodes.Status403Forbidden),
|
||||
ResultStatus.Conflict => Results.Conflict(result.Errors.FirstOrDefault()),
|
||||
_ => Results.Problem(string.Join(", ", result.Errors))
|
||||
};
|
||||
|
||||
public static IResult ToHttpResult<T>(this Result<T> result) =>
|
||||
result.Status switch
|
||||
{
|
||||
ResultStatus.Ok => Results.Ok(result.Value),
|
||||
ResultStatus.NotFound => Results.NotFound(result.Errors.FirstOrDefault()),
|
||||
ResultStatus.Invalid => Results.ValidationProblem(ToValidationDictionary(result.ValidationErrors)),
|
||||
ResultStatus.Unauthorized => Results.Unauthorized(),
|
||||
ResultStatus.Forbidden => Results.StatusCode(StatusCodes.Status403Forbidden),
|
||||
ResultStatus.Conflict => Results.Conflict(result.Errors.FirstOrDefault()),
|
||||
_ => Results.Problem(string.Join(", ", result.Errors))
|
||||
};
|
||||
|
||||
private static Dictionary<string, string[]> ToValidationDictionary(IEnumerable<ValidationError> errors) =>
|
||||
errors
|
||||
.GroupBy(e => e.Identifier)
|
||||
.ToDictionary(g => g.Key, g => g.Select(e => e.ErrorMessage).ToArray());
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
using Mediator;
|
||||
using Musify.Application;
|
||||
using Musify.Infrastructure.MassTransit;
|
||||
using Musify.Infrastructure.Persistence;
|
||||
using Musify.Infrastructure.Services;
|
||||
using OpenTelemetry.Logs;
|
||||
using OpenTelemetry.Metrics;
|
||||
using OpenTelemetry.Trace;
|
||||
using WebApi.Options;
|
||||
|
||||
namespace WebApi.Extensions;
|
||||
|
||||
public static class ServiceCollectionExtensions
|
||||
{
|
||||
public static IServiceCollection AddApplicationServices(this IServiceCollection services, IConfiguration configuration)
|
||||
{
|
||||
services.AddApplicationConfigurations(configuration);
|
||||
services.AddDatabase(configuration);
|
||||
services.AddKeycloakService(configuration);
|
||||
services.AddStorageService(configuration);
|
||||
services.AddMassTransitClient(configuration);
|
||||
services.AddMediator();
|
||||
services.AddOpenApi();
|
||||
|
||||
return services;
|
||||
}
|
||||
|
||||
public static IServiceCollection AddObservability(this IServiceCollection services, IConfiguration configuration)
|
||||
{
|
||||
var otlpEndpoint = new Uri(configuration
|
||||
.GetRequiredSection(OpenTelemetryOptions.SectionName)
|
||||
.GetRequiredSection(nameof(OpenTelemetryOptions.OtlpEndpoint))
|
||||
.Value!);
|
||||
|
||||
services.AddOpenTelemetry()
|
||||
.WithTracing(tracing => tracing
|
||||
.AddAspNetCoreInstrumentation()
|
||||
.AddHttpClientInstrumentation()
|
||||
.AddOtlpExporter(o => o.Endpoint = otlpEndpoint))
|
||||
.WithMetrics(metrics => metrics
|
||||
.AddAspNetCoreInstrumentation()
|
||||
.AddHttpClientInstrumentation()
|
||||
.AddOtlpExporter(o => o.Endpoint = otlpEndpoint));
|
||||
|
||||
services.Configure<OpenTelemetryLoggerOptions>(logging =>
|
||||
logging.AddOtlpExporter(o => o.Endpoint = otlpEndpoint));
|
||||
|
||||
return services;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user