Пример #1
0
        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));
        }
Пример #2
0
 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;
 }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }
Пример #5
0
 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
     });
 }
Пример #6
0
 public async Task <UpdateFilmTheatreResponse> SubmitTheatreInformationAsync(UpdateFilmTheatreRequest request)
 {
     return(await ValidateAndSubmitAsync(request));
 }
Пример #7
0
 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)));
 }
Пример #8
0
 public async Task <UpdateFilmTheatreResponse> SubmitTheatreInformation([FromBody] UpdateFilmTheatreRequest request)
 {
     return(await _screeningManagementService.SubmitTheatreInformationAsync(request));
 }