using LiteCqrs; using Microsoft.EntityFrameworkCore; using TeleWave.Application.Common.Interfaces; using TeleWave.Application.Common.Models; namespace TeleWave.Application.Programming.Templates.Junctions; public sealed class DeleteJunctionCommandHandler(IAppDbContext dbContext) : ICommandHandler { public async Task Handle( DeleteJunctionCommand command, CancellationToken cancellationToken ) { var junction = await JunctionLoader.LoadAsync( dbContext, command.JunctionId, cancellationToken ); if (junction is null) return Result.Failure(TemplateErrors.JunctionNotFound); // Стык общий: слот чужого канала, ссылающийся на удалённый стык, молча остался бы без врезок. var usedBySlot = await dbContext.Slots.AnyAsync( s => s.JunctionBetweenId == junction.Id || s.JunctionAfterId == junction.Id, cancellationToken ); var usedByDefault = await dbContext.ScheduleTemplates.AnyAsync( t => t.DefaultJunctionId == junction.Id, cancellationToken ); if (usedBySlot || usedByDefault) return Result.Failure(TemplateErrors.JunctionInUse); dbContext.JunctionTemplates.Remove(junction); return Result.Success(); } }