Files
TeleWave/backend/src/TeleWave.Application/DependencyInjection.cs
T
Leonid Pershin 5ad28b2966
ci / build-backend (push) Successful in 2m41s
ci / build-frontend (push) Successful in 44s
ci / tests (push) Successful in 2m33s
ci / sonar (push) Successful in 5m12s
Implement collection suggestions and bulk show addition features
Added new API endpoints for suggesting collections based on existing shows and for bulk adding shows to collections. Enhanced the backend with necessary logic and DTOs to support these features. Updated the frontend to include new components for displaying collection suggestions and managing bulk additions, improving the user experience for collection management. Localization updates were made to support these new features in both English and Russian.
2026-07-27 05:39:23 +03:00

77 lines
3.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System.Reflection;
using FluentValidation;
using LiteCqrs.Behaviors;
using LiteCqrs.DependencyInjection;
using Microsoft.Extensions.DependencyInjection;
using TeleWave.Application.Broadcast.Bumpers;
using TeleWave.Application.Common.Behaviors;
using TeleWave.Application.Library.Collections.Suggest;
using TeleWave.Application.Library.Genres;
using TeleWave.Application.Metadata;
using TeleWave.Application.Programming.Groups;
using TeleWave.Application.Programming.Groups.Suggest;
using TeleWave.Application.Programming.Planning;
using TeleWave.Application.Programming.Templates;
namespace TeleWave.Application;
public static class DependencyInjection
{
public static IServiceCollection AddApplication(this IServiceCollection services)
{
var assembly = typeof(DependencyInjection).Assembly;
services.AddLiteCqrs(cqrs =>
{
cqrs.RegisterServicesFromAssembly(assembly);
cqrs.Lifetime = ServiceLifetime.Scoped;
// Порядок важен: Logging (внешний) -> Validation -> UnitOfWork (ближе всего к хендлеру).
cqrs.AddOpenBehavior(typeof(LoggingBehavior<,>));
cqrs.AddOpenBehavior(typeof(ValidationBehavior<,>));
cqrs.AddOpenBehavior(typeof(UnitOfWorkBehavior<,>));
});
RegisterClosedGeneric(services, assembly, typeof(IValidator<>));
// Сервисы самого слоя приложения — не хендлеры, а общие для них помощники. Регистрируются
// здесь, а не в Infrastructure: тот слой не должен знать внутреннего устройства Application.
services.AddScoped<BumperSpecLoader>();
services.AddScoped<GenreMatcher>();
services.AddScoped<ShowMetadataApplier>();
services.AddScoped<CollectionSuggestionBuilder>();
services.AddScoped<GroupElementResolver>();
services.AddScoped<GroupFilterMatcher>();
services.AddScoped<DynamicGroupResolver>();
services.AddScoped<GroupStatsService>();
services.AddScoped<GroupSuggestionBuilder>();
services.AddScoped<GroupMembershipCleaner>();
services.AddScoped<SlotWriter>();
services.AddScoped<GroupExpander>();
services.AddScoped<BumperResolver>();
services.AddScoped<PostCheckRunner>();
services.AddScoped<GridScheduleGenerator>();
return services;
}
private static void RegisterClosedGeneric(
IServiceCollection services,
Assembly assembly,
Type openInterface
)
{
var implementations = assembly
.GetTypes()
.Where(t => t is { IsClass: true, IsAbstract: false })
.SelectMany(t =>
t.GetInterfaces()
.Where(i => i.IsGenericType && i.GetGenericTypeDefinition() == openInterface)
.Select(i => (Service: i, Implementation: t))
);
foreach (var (service, implementation) in implementations)
services.AddScoped(service, implementation);
}
}