private static Task <Validation <BaseError, Collection> > CollectionMustExist( TvContext dbContext, UpdateCollectionCustomOrder request) => dbContext.Collections .Include(c => c.CollectionItems) .SelectOneAsync(c => c.Id, c => c.Id == request.CollectionId) .Map(o => o.ToValidation <BaseError>("Collection does not exist."));
private async Task <Unit> ApplyUpdateRequest( TvContext dbContext, Collection c, UpdateCollectionCustomOrder request) { foreach (MediaItemCustomOrder updateItem in request.MediaItemCustomOrders) { Option <CollectionItem> maybeCollectionItem = c.CollectionItems .FirstOrDefault(ci => ci.MediaItemId == updateItem.MediaItemId); foreach (CollectionItem collectionItem in maybeCollectionItem) { collectionItem.CustomIndex = updateItem.CustomIndex; } } if (await dbContext.SaveChangesAsync() > 0) { // refresh all playouts that use this collection foreach (int playoutId in await _mediaCollectionRepository .PlayoutIdsUsingCollection(request.CollectionId)) { await _channel.WriteAsync(new BuildPlayout(playoutId, PlayoutBuildMode.Refresh)); } } return(Unit.Default); }
public async Task <Either <BaseError, Unit> > Handle( UpdateCollectionCustomOrder request, CancellationToken cancellationToken) { await using TvContext dbContext = await _dbContextFactory.CreateDbContextAsync(cancellationToken); Validation <BaseError, Collection> validation = await Validate(dbContext, request); return(await LanguageExtensions.Apply(validation, c => ApplyUpdateRequest(dbContext, c, request))); }
private async Task <Unit> ApplyUpdateRequest(Collection c, UpdateCollectionCustomOrder request) { foreach (MediaItemCustomOrder updateItem in request.MediaItemCustomOrders) { Option <CollectionItem> maybeCollectionItem = c.CollectionItems.FirstOrDefault(ci => ci.MediaItemId == updateItem.MediaItemId); maybeCollectionItem.IfSome(ci => ci.CustomIndex = updateItem.CustomIndex); } if (await _mediaCollectionRepository.Update(c)) { // rebuild all playouts that use this collection foreach (int playoutId in await _mediaCollectionRepository.PlayoutIdsUsingCollection( request.CollectionId)) { await _channel.WriteAsync(new BuildPlayout(playoutId, true)); } } return(Unit.Default); }
private static Task <Validation <BaseError, Collection> > Validate( TvContext dbContext, UpdateCollectionCustomOrder request) => CollectionMustExist(dbContext, request);
private Task <Validation <BaseError, Collection> > CollectionMustExist( UpdateCollectionCustomOrder request) => _mediaCollectionRepository.Get(request.CollectionId) .Map(v => v.ToValidation <BaseError>("Collection does not exist."));
private Task <Validation <BaseError, Collection> > Validate(UpdateCollectionCustomOrder request) => CollectionMustExist(request);
public Task <Either <BaseError, Unit> > Handle( UpdateCollectionCustomOrder request, CancellationToken cancellationToken) => Validate(request) .MapT(c => ApplyUpdateRequest(c, request)) .Bind(v => v.ToEitherAsync());