private async Task <UpdateProgramScheduleResult> ApplyUpdateRequest( TvContext dbContext, ProgramSchedule programSchedule, UpdateProgramSchedule request) { // we need to refresh playouts if the playback order or keep multi-episodes has been modified bool needToRefreshPlayout = programSchedule.KeepMultiPartEpisodesTogether != request.KeepMultiPartEpisodesTogether || programSchedule.TreatCollectionsAsShows != request.TreatCollectionsAsShows || programSchedule.ShuffleScheduleItems != request.ShuffleScheduleItems; programSchedule.Name = request.Name; programSchedule.KeepMultiPartEpisodesTogether = request.KeepMultiPartEpisodesTogether; programSchedule.TreatCollectionsAsShows = programSchedule.KeepMultiPartEpisodesTogether && request.TreatCollectionsAsShows; programSchedule.ShuffleScheduleItems = request.ShuffleScheduleItems; await dbContext.SaveChangesAsync(); if (needToRefreshPlayout) { List <int> playoutIds = await dbContext.Playouts .Filter(p => p.ProgramScheduleId == programSchedule.Id) .Map(p => p.Id) .ToListAsync(); foreach (int playoutId in playoutIds) { await _channel.WriteAsync(new BuildPlayout(playoutId, PlayoutBuildMode.Refresh)); } } return(new UpdateProgramScheduleResult(programSchedule.Id)); }
public async Task <Either <BaseError, UpdateProgramScheduleResult> > Handle( UpdateProgramSchedule request, CancellationToken cancellationToken) { await using TvContext dbContext = await _dbContextFactory.CreateDbContextAsync(cancellationToken); Validation <BaseError, ProgramSchedule> validation = await Validate(dbContext, request); return(await LanguageExtensions.Apply(validation, ps => ApplyUpdateRequest(dbContext, ps, request))); }
private async Task <ProgramScheduleViewModel> ApplyUpdateRequest( ProgramSchedule programSchedule, UpdateProgramSchedule update) { // we only need to rebuild playouts if the playback order has been modified bool needToRebuildPlayout = programSchedule.MediaCollectionPlaybackOrder != update.MediaCollectionPlaybackOrder; programSchedule.Name = update.Name; programSchedule.MediaCollectionPlaybackOrder = update.MediaCollectionPlaybackOrder; await _programScheduleRepository.Update(programSchedule); if (needToRebuildPlayout) { foreach (Playout playout in programSchedule.Playouts) { await _channel.WriteAsync(new BuildPlayout(playout.Id, true)); } } return(ProjectToViewModel(programSchedule)); }
private async Task <Validation <BaseError, ProgramSchedule> > Validate(UpdateProgramSchedule request) => (await ProgramScheduleMustExist(request), ValidateName(request))
public Task <Either <BaseError, ProgramScheduleViewModel> > Handle( UpdateProgramSchedule request, CancellationToken cancellationToken) => Validate(request) .MapT(c => ApplyUpdateRequest(c, request)) .Bind(v => v.ToEitherAsync());
private static async Task <Validation <BaseError, ProgramSchedule> > Validate( TvContext dbContext, UpdateProgramSchedule request) => (await ProgramScheduleMustExist(dbContext, request), ValidateName(request))