From 43c0e16d5f07aae7edc500389c63d5d51a3f830e Mon Sep 17 00:00:00 2001 From: Collin Barrett <6483057+collinbarrett@users.noreply.github.com> Date: Fri, 30 May 2025 20:15:05 -0500 Subject: [PATCH] refactor(api): GetLanguages w/o mediatr --- .../CorsConfiguration.cs | 11 ++--- .../FilterLists.Directory.Api/Endpoints.cs | 41 +++++-------------- .../ConfigurationExtensions.cs | 10 +++++ .../Queries/GetLanguages.cs | 7 +--- .../Queries/GetLicenses.cs | 7 +--- .../Queries/GetListDetails.cs | 11 ++--- .../Queries/GetLists.cs | 7 +--- .../Queries/GetMaintainers.cs | 7 +--- .../Queries/GetSoftware.cs | 7 +--- .../Queries/GetSyntaxes.cs | 7 +--- .../Queries/GetTags.cs | 7 +--- 11 files changed, 42 insertions(+), 80 deletions(-) diff --git a/services/Directory/FilterLists.Directory.Api/CorsConfiguration.cs b/services/Directory/FilterLists.Directory.Api/CorsConfiguration.cs index 817d206f7..14f2242f9 100644 --- a/services/Directory/FilterLists.Directory.Api/CorsConfiguration.cs +++ b/services/Directory/FilterLists.Directory.Api/CorsConfiguration.cs @@ -7,17 +7,14 @@ internal static class CorsConfiguration private const string ProductionClientOrigin = "https://filterlists.com"; private const string StagingClientOriginStart = "https://nice-water-05873140f"; private const string StagingClientOriginEnd = ".eastus2.5.azurestaticapps.net"; - private const string NextJsStagingClientOrigin = "https://next.filterlists.com"; private const string LocalClientOrigin = "http://localhost:3000"; internal static readonly Action SetupAction = options => options.AddDefaultPolicy(policy => { - policy.SetIsOriginAllowed(origin => origin switch - { - ProductionClientOrigin or LocalClientOrigin or NextJsStagingClientOrigin => true, - _ => origin.StartsWith(StagingClientOriginStart, StringComparison.InvariantCulture) && - origin.EndsWith(StagingClientOriginEnd, StringComparison.InvariantCulture) - }) + policy.SetIsOriginAllowed(origin => + origin is ProductionClientOrigin or LocalClientOrigin || + (origin.StartsWith(StagingClientOriginStart, StringComparison.InvariantCulture) && + origin.EndsWith(StagingClientOriginEnd, StringComparison.InvariantCulture))) .WithMethods("GET") .AllowAnyHeader(); }); diff --git a/services/Directory/FilterLists.Directory.Api/Endpoints.cs b/services/Directory/FilterLists.Directory.Api/Endpoints.cs index 7546ca592..69fb53e49 100644 --- a/services/Directory/FilterLists.Directory.Api/Endpoints.cs +++ b/services/Directory/FilterLists.Directory.Api/Endpoints.cs @@ -1,5 +1,4 @@ using FilterLists.Directory.Application.Queries; -using MediatR; using Microsoft.AspNetCore.Http.HttpResults; using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Models; @@ -11,10 +10,7 @@ internal static class Endpoints { internal static void MapEndpoints(this WebApplication app) { - app.MapGet("/languages", - (IMediator mediator, CancellationToken ct) => - mediator.Send(new GetLanguages.Request(), ct) - ) + app.MapGet("/languages", async (GetLanguages.Query query, CancellationToken ct) => await query.ExecuteAsync(ct)) .Produces>() .WithOpenApi(operation => new OpenApiOperation(operation) { @@ -23,10 +19,7 @@ internal static void MapEndpoints(this WebApplication app) OperationId = nameof(GetLanguages) }); - app.MapGet("/licenses", - (IMediator mediator, CancellationToken ct) => - mediator.Send(new GetLicenses.Request(), ct) - ) + app.MapGet("/licenses", async (GetLicenses.Query query, CancellationToken ct) => await query.ExecuteAsync(ct)) .Produces>() .WithOpenApi(operation => new OpenApiOperation(operation) { @@ -35,10 +28,7 @@ internal static void MapEndpoints(this WebApplication app) OperationId = nameof(GetLicenses) }); - app.MapGet("/lists", - (IMediator mediator, CancellationToken ct) => - mediator.Send(new GetLists.Request(), ct) - ) + app.MapGet("/lists", async (GetLists.Query query, CancellationToken ct) => await query.ExecuteAsync(ct)) .Produces>() .WithOpenApi(operation => new OpenApiOperation(operation) { @@ -48,10 +38,10 @@ internal static void MapEndpoints(this WebApplication app) }); app.MapGet("/lists/{id:int}", - async Task, NotFound>> (int id, IMediator mediator, - CancellationToken ct) => + async Task, NotFound>> + (int id, GetListDetails.Query query, CancellationToken ct) => { - var list = await mediator.Send(new GetListDetails.Request(id), ct); + var list = await query.ExecuteAsync(id, ct); return list is not null ? TypedResults.Ok(list) : TypedResults.NotFound(); @@ -77,9 +67,7 @@ internal static void MapEndpoints(this WebApplication app) }); app.MapGet("/maintainers", - (IMediator mediator, CancellationToken ct) => - mediator.Send(new GetMaintainers.Request(), ct) - ) + async (GetMaintainers.Query query, CancellationToken ct) => await query.ExecuteAsync(ct)) .Produces>() .WithOpenApi(operation => new OpenApiOperation(operation) { @@ -88,10 +76,7 @@ internal static void MapEndpoints(this WebApplication app) OperationId = nameof(GetMaintainers) }); - app.MapGet("/software", - (IMediator mediator, CancellationToken ct) => - mediator.Send(new GetSoftware.Request(), ct) - ) + app.MapGet("/software", async (GetSoftware.Query query, CancellationToken ct) => await query.ExecuteAsync(ct)) .Produces>() .WithOpenApi(operation => new OpenApiOperation(operation) { @@ -100,10 +85,7 @@ internal static void MapEndpoints(this WebApplication app) OperationId = nameof(GetSoftware) }); - app.MapGet("/syntaxes", - (IMediator mediator, CancellationToken ct) => - mediator.Send(new GetSyntaxes.Request(), ct) - ) + app.MapGet("/syntaxes", async (GetSyntaxes.Query query, CancellationToken ct) => await query.ExecuteAsync(ct)) .Produces>() .WithOpenApi(operation => new OpenApiOperation(operation) { @@ -112,10 +94,7 @@ internal static void MapEndpoints(this WebApplication app) OperationId = nameof(GetSyntaxes) }); - app.MapGet("/tags", - (IMediator mediator, CancellationToken ct) => - mediator.Send(new GetTags.Request(), ct) - ) + app.MapGet("/tags", async (GetTags.Query query, CancellationToken ct) => await query.ExecuteAsync(ct)) .Produces>() .WithOpenApi(operation => new OpenApiOperation(operation) { diff --git a/services/Directory/FilterLists.Directory.Application/ConfigurationExtensions.cs b/services/Directory/FilterLists.Directory.Application/ConfigurationExtensions.cs index 1de9112ea..8f096d6d3 100644 --- a/services/Directory/FilterLists.Directory.Application/ConfigurationExtensions.cs +++ b/services/Directory/FilterLists.Directory.Application/ConfigurationExtensions.cs @@ -1,4 +1,6 @@ +using FilterLists.Directory.Application.Queries; using FilterLists.Directory.Infrastructure; +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; namespace FilterLists.Directory.Application; @@ -8,5 +10,13 @@ public static class ConfigurationExtensions public static void AddApplication(this IHostApplicationBuilder builder) { builder.AddInfrastructure(); + builder.Services.AddScoped(); + builder.Services.AddScoped(); + builder.Services.AddScoped(); + builder.Services.AddScoped(); + builder.Services.AddScoped(); + builder.Services.AddScoped(); + builder.Services.AddScoped(); + builder.Services.AddScoped(); } } \ No newline at end of file diff --git a/services/Directory/FilterLists.Directory.Application/Queries/GetLanguages.cs b/services/Directory/FilterLists.Directory.Application/Queries/GetLanguages.cs index 9fcdf9e3d..801a636db 100644 --- a/services/Directory/FilterLists.Directory.Application/Queries/GetLanguages.cs +++ b/services/Directory/FilterLists.Directory.Application/Queries/GetLanguages.cs @@ -1,5 +1,4 @@ using FilterLists.Directory.Infrastructure.Persistence.Queries.Context; -using MediatR; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Caching.Hybrid; @@ -7,11 +6,9 @@ namespace FilterLists.Directory.Application.Queries; public static class GetLanguages { - public sealed record Request : IRequest>; - - private sealed class Handler(QueryDbContext ctx, HybridCache cache) : IRequestHandler> + public class Query(QueryDbContext ctx, HybridCache cache) { - public async Task> Handle(Request request, CancellationToken ct) + public async Task> ExecuteAsync(CancellationToken ct) { const string key = nameof(GetLanguages); return await cache.GetOrCreateAsync( diff --git a/services/Directory/FilterLists.Directory.Application/Queries/GetLicenses.cs b/services/Directory/FilterLists.Directory.Application/Queries/GetLicenses.cs index 140417b19..f27ffaced 100644 --- a/services/Directory/FilterLists.Directory.Application/Queries/GetLicenses.cs +++ b/services/Directory/FilterLists.Directory.Application/Queries/GetLicenses.cs @@ -1,5 +1,4 @@ using FilterLists.Directory.Infrastructure.Persistence.Queries.Context; -using MediatR; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Caching.Hybrid; @@ -7,11 +6,9 @@ namespace FilterLists.Directory.Application.Queries; public static class GetLicenses { - public sealed record Request : IRequest>; - - private sealed class Handler(QueryDbContext ctx, HybridCache cache) : IRequestHandler> + public class Query(QueryDbContext ctx, HybridCache cache) { - public async Task> Handle(Request request, CancellationToken ct) + public async Task> ExecuteAsync(CancellationToken ct) { const string key = nameof(GetLicenses); return await cache.GetOrCreateAsync( diff --git a/services/Directory/FilterLists.Directory.Application/Queries/GetListDetails.cs b/services/Directory/FilterLists.Directory.Application/Queries/GetListDetails.cs index 7e0a8959f..32c73d948 100644 --- a/services/Directory/FilterLists.Directory.Application/Queries/GetListDetails.cs +++ b/services/Directory/FilterLists.Directory.Application/Queries/GetListDetails.cs @@ -1,5 +1,4 @@ using FilterLists.Directory.Infrastructure.Persistence.Queries.Context; -using MediatR; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Caching.Hybrid; @@ -7,13 +6,11 @@ namespace FilterLists.Directory.Application.Queries; public static class GetListDetails { - public sealed record Request(int Id) : IRequest; - - private sealed class Handler(QueryDbContext ctx, HybridCache cache) : IRequestHandler + public class Query(QueryDbContext ctx, HybridCache cache) { - public async Task Handle(Request request, CancellationToken ct) + public async Task ExecuteAsync(int id, CancellationToken ct) { - var key = $"{nameof(GetListDetails)}_{request.Id}"; + var key = $"{nameof(GetListDetails)}_{id}"; return await cache.GetOrCreateAsync( key, async cancel => @@ -74,7 +71,7 @@ await ctx.FilterLists .Select(fd => fd.DependentFilterListId) }) .TagWith(key) - .SingleOrDefaultAsync(l => l.Id == request.Id, cancel), + .SingleOrDefaultAsync(l => l.Id == id, cancel), cancellationToken: ct); } } diff --git a/services/Directory/FilterLists.Directory.Application/Queries/GetLists.cs b/services/Directory/FilterLists.Directory.Application/Queries/GetLists.cs index 80a57d0ef..3433eb232 100644 --- a/services/Directory/FilterLists.Directory.Application/Queries/GetLists.cs +++ b/services/Directory/FilterLists.Directory.Application/Queries/GetLists.cs @@ -1,5 +1,4 @@ using FilterLists.Directory.Infrastructure.Persistence.Queries.Context; -using MediatR; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Caching.Hybrid; @@ -7,11 +6,9 @@ namespace FilterLists.Directory.Application.Queries; public static class GetLists { - public sealed record Request : IRequest>; - - private sealed class Handler(QueryDbContext ctx, HybridCache cache) : IRequestHandler> + public class Query(QueryDbContext ctx, HybridCache cache) { - public async Task> Handle(Request request, CancellationToken ct) + public async Task> ExecuteAsync(CancellationToken ct) { const string key = nameof(GetLists); return await cache.GetOrCreateAsync( diff --git a/services/Directory/FilterLists.Directory.Application/Queries/GetMaintainers.cs b/services/Directory/FilterLists.Directory.Application/Queries/GetMaintainers.cs index 505c9ad7b..d141c4bbf 100644 --- a/services/Directory/FilterLists.Directory.Application/Queries/GetMaintainers.cs +++ b/services/Directory/FilterLists.Directory.Application/Queries/GetMaintainers.cs @@ -1,5 +1,4 @@ using FilterLists.Directory.Infrastructure.Persistence.Queries.Context; -using MediatR; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Caching.Hybrid; @@ -7,11 +6,9 @@ namespace FilterLists.Directory.Application.Queries; public static class GetMaintainers { - public sealed record Request : IRequest>; - - private sealed class Handler(QueryDbContext ctx, HybridCache cache) : IRequestHandler> + public class Query(QueryDbContext ctx, HybridCache cache) { - public async Task> Handle(Request request, CancellationToken ct) + public async Task> ExecuteAsync(CancellationToken ct) { const string key = nameof(GetMaintainers); return await cache.GetOrCreateAsync( diff --git a/services/Directory/FilterLists.Directory.Application/Queries/GetSoftware.cs b/services/Directory/FilterLists.Directory.Application/Queries/GetSoftware.cs index 733fd7f3b..2671fc731 100644 --- a/services/Directory/FilterLists.Directory.Application/Queries/GetSoftware.cs +++ b/services/Directory/FilterLists.Directory.Application/Queries/GetSoftware.cs @@ -1,5 +1,4 @@ using FilterLists.Directory.Infrastructure.Persistence.Queries.Context; -using MediatR; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Caching.Hybrid; @@ -7,11 +6,9 @@ namespace FilterLists.Directory.Application.Queries; public static class GetSoftware { - public sealed record Request : IRequest>; - - private sealed class Handler(QueryDbContext ctx, HybridCache cache) : IRequestHandler> + public class Query(QueryDbContext ctx, HybridCache cache) { - public async Task> Handle(Request request, CancellationToken ct) + public async Task> ExecuteAsync(CancellationToken ct) { const string key = nameof(GetSoftware); return await cache.GetOrCreateAsync( diff --git a/services/Directory/FilterLists.Directory.Application/Queries/GetSyntaxes.cs b/services/Directory/FilterLists.Directory.Application/Queries/GetSyntaxes.cs index 6425833cf..5432a1d94 100644 --- a/services/Directory/FilterLists.Directory.Application/Queries/GetSyntaxes.cs +++ b/services/Directory/FilterLists.Directory.Application/Queries/GetSyntaxes.cs @@ -1,5 +1,4 @@ using FilterLists.Directory.Infrastructure.Persistence.Queries.Context; -using MediatR; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Caching.Hybrid; @@ -7,11 +6,9 @@ namespace FilterLists.Directory.Application.Queries; public static class GetSyntaxes { - public sealed record Request : IRequest>; - - private sealed class Handler(QueryDbContext ctx, HybridCache cache) : IRequestHandler> + public class Query(QueryDbContext ctx, HybridCache cache) { - public async Task> Handle(Request request, CancellationToken ct) + public async Task> ExecuteAsync(CancellationToken ct) { const string key = nameof(GetSyntaxes); return await cache.GetOrCreateAsync( diff --git a/services/Directory/FilterLists.Directory.Application/Queries/GetTags.cs b/services/Directory/FilterLists.Directory.Application/Queries/GetTags.cs index 1428caaa3..b3210a706 100644 --- a/services/Directory/FilterLists.Directory.Application/Queries/GetTags.cs +++ b/services/Directory/FilterLists.Directory.Application/Queries/GetTags.cs @@ -1,5 +1,4 @@ using FilterLists.Directory.Infrastructure.Persistence.Queries.Context; -using MediatR; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Caching.Hybrid; @@ -7,11 +6,9 @@ namespace FilterLists.Directory.Application.Queries; public static class GetTags { - public sealed record Request : IRequest>; - - private sealed class Handler(QueryDbContext ctx, HybridCache cache) : IRequestHandler> + public class Query(QueryDbContext ctx, HybridCache cache) { - public async Task> Handle(Request request, CancellationToken ct) + public async Task> ExecuteAsync(CancellationToken ct) { const string key = nameof(GetTags); return await cache.GetOrCreateAsync(