using LiteCqrs; using Microsoft.EntityFrameworkCore; using TeleWave.Application.Common.Interfaces; using TeleWave.Application.Common.Models; namespace TeleWave.Application.Media.Delete; public sealed class DeleteMediaAssetCommandHandler(IAppDbContext dbContext, IMediaStorage storage) : ICommandHandler { public async Task Handle( DeleteMediaAssetCommand command, CancellationToken cancellationToken ) { var asset = await dbContext.MediaAssets.FirstOrDefaultAsync( x => x.Id == command.Id, cancellationToken ); if (asset is null) return Result.Failure(MediaErrors.NotFound); // TODO(этап 2): запретить удаление, пока ассет используется в расписании/пуле канала. storage.DeleteAssetArtifacts(asset.Id, asset.OriginalExtension); dbContext.MediaAssets.Remove(asset); return Result.Success(); } }