Files
TeleWave/backend/src/TeleWave.Application/DependencyInjection.cs
T
Leonid Pershin 24fdbdf680
ci / build-backend (push) Successful in 1m55s
ci / build-frontend (push) Successful in 44s
ci / tests (push) Successful in 2m8s
ci / sonar (push) Successful in 4m37s
Add group suggestions feature with API endpoints and frontend integration
Implemented new API endpoints for suggesting groups based on the current library, allowing admins to retrieve and create groups from suggestions. Updated the backend to include error handling for suggestions and added necessary DTOs. Enhanced the frontend with new API functions and UI components to display suggestions, improving the user experience for group management. Localization updates were made to support new features in both English and Russian.
2026-07-27 04:18:30 +03:00

71 lines
2.8 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.Genres;
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<GroupElementResolver>();
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);
}
}