Files
TeleWave/backend/src/TeleWave.Application/Media/Delete/DeleteMediaAssetCommandHandler.cs
T

30 lines
1.0 KiB
C#

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<DeleteMediaAssetCommand, Result>
{
public async Task<Result> 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();
}
}