private async Task <UpdateFilmTheatreResponse> ValidateAndSubmitAsync(UpdateFilmTheatreRequest request) { if (IsNotAllPropertiesInitialized(request)) { return(GetUpdateFilmThatreResponse(_notNullMessage, SubmitStatus.Error)); } var filmTheatre = await _filmTheatreRepository.GetFilmTheatreAsync(request.FilmId.Value, request.TheatreId.Value); if (!(await IsBoxOfficeCorrect(request))) { return(GetUpdateFilmThatreResponse(_boxOfficeIsExceeded, SubmitStatus.Error)); } if (filmTheatre == null) { var newFilmTheatre = GetFilmTheatreEntity(request); await _filmTheatreRepository.AddFilmTheatreAsync(newFilmTheatre); return(GetUpdateFilmThatreResponse(_successAddingMessage, SubmitStatus.Success)); } var filmTheatres = await _filmTheatreRepository.GetFilmTheatresAsync(request.TheatreId.Value); if (IsMovieAlreadyOnScreen(request, filmTheatres)) { return(GetUpdateFilmThatreResponse(_isMovieAlreadyOnScreen, SubmitStatus.Error)); } UpdateFilmTheatre(request, filmTheatre); await _filmTheatreRepository.UpdateFilmTheatreAsync(filmTheatre); return(GetUpdateFilmThatreResponse(_successUpdatingMessage, SubmitStatus.Success)); }
private void UpdateFilmTheatre(UpdateFilmTheatreRequest request, FilmTheatre filmTheatre) { filmTheatre.StartDistributionDate = request.StartDistributionDate.Value; filmTheatre.EndDistributionDate = request.EndDistributionDate.Value; filmTheatre.AmountOfPeople = request.AmountOfPeople.Value; filmTheatre.BoxOfficePerMovie = request.BoxOffice.Value; }
private async Task <bool> IsBoxOfficeCorrect(UpdateFilmTheatreRequest request) { var film = await _filmRepository.GetFilmAsync(request.FilmId.Value); var filmTheatres = await _filmTheatreRepository.GetFilmTheatresExceptAsync(request.FilmId.Value, request.TheatreId.Value); var totalBoxOffice = filmTheatres.Sum(p => p.BoxOfficePerMovie) + request.BoxOffice; return(totalBoxOffice <= film.BoxOffice); }
private bool IsNotAllPropertiesInitialized(UpdateFilmTheatreRequest request) { if (request.AmountOfPeople == null || request.BoxOffice == null || request.StartDistributionDate == null || request.EndDistributionDate == null || request.FilmId == null || request.TheatreId == null) { return(true); } return(false); }
private FilmTheatre GetFilmTheatreEntity(UpdateFilmTheatreRequest request) { return(new FilmTheatre { FilmId = request.FilmId.Value, TheatreId = request.TheatreId.Value, AmountOfPeople = request.AmountOfPeople.Value, BoxOfficePerMovie = request.BoxOffice.Value, StartDistributionDate = request.StartDistributionDate.Value, EndDistributionDate = request.EndDistributionDate.Value }); }
public async Task <UpdateFilmTheatreResponse> SubmitTheatreInformationAsync(UpdateFilmTheatreRequest request) { return(await ValidateAndSubmitAsync(request)); }
private bool IsMovieAlreadyOnScreen(UpdateFilmTheatreRequest request, FilmTheatre[] filmTheatres) { return(filmTheatres.Any(p => (p.StartDistributionDate < request.EndDistributionDate && request.StartDistributionDate < p.EndDistributionDate) && (request.TheatreId == p.TheatreId) && (request.FilmId != p.FilmId))); }
public async Task <UpdateFilmTheatreResponse> SubmitTheatreInformation([FromBody] UpdateFilmTheatreRequest request) { return(await _screeningManagementService.SubmitTheatreInformationAsync(request)); }