public async Task <Either <BaseError, Unit> > Handle( UpdateSmartCollection request, CancellationToken cancellationToken) { await using TvContext dbContext = await _dbContextFactory.CreateDbContextAsync(cancellationToken); Validation <BaseError, SmartCollection> validation = await Validate(dbContext, request); return(await LanguageExtensions.Apply(validation, c => ApplyUpdateRequest(dbContext, c, request))); }
private static Task <Validation <BaseError, SmartCollection> > SmartCollectionMustExist( TvContext dbContext, UpdateSmartCollection updateCollection) => dbContext.SmartCollections .SelectOneAsync(c => c.Id, c => c.Id == updateCollection.Id) .Map(o => o.ToValidation <BaseError>("SmartCollection does not exist."));
private static Task <Validation <BaseError, SmartCollection> > Validate( TvContext dbContext, UpdateSmartCollection request) => SmartCollectionMustExist(dbContext, request);
private async Task <Unit> ApplyUpdateRequest(TvContext dbContext, SmartCollection c, UpdateSmartCollection request) { c.Query = request.Query; // rebuild playouts if (await dbContext.SaveChangesAsync() > 0) { // refresh all playouts that use this smart collection foreach (int playoutId in await _mediaCollectionRepository.PlayoutIdsUsingSmartCollection(request.Id)) { await _channel.WriteAsync(new BuildPlayout(playoutId, PlayoutBuildMode.Refresh)); } } return(Unit.Default); }