using LiteCqrs; using Microsoft.EntityFrameworkCore; using TeleWave.Application.Common.Interfaces; using TeleWave.Application.Common.Models; namespace TeleWave.Application.Broadcast.AddChannelAd; public sealed class AddChannelAdCommandHandler(IAppDbContext dbContext) : ICommandHandler> { public async Task> Handle( AddChannelAdCommand command, CancellationToken cancellationToken ) { var channel = await dbContext .Channels.Include(c => c.Ads) .FirstOrDefaultAsync(c => c.Id == command.ChannelId, cancellationToken); if (channel is null) return Result.Failure(ChannelErrors.NotFound); var assetExists = await dbContext.MediaAssets.AnyAsync( a => a.Id == command.MediaAssetId, cancellationToken ); if (!assetExists) return Result.Failure(ChannelErrors.AssetNotFound); if (channel.HasAd(command.MediaAssetId)) return Result.Failure(ChannelErrors.AdAlreadyAdded); var ad = channel.AddAd(command.MediaAssetId); return Result.Success(ad.Id); } }