private StatusCodeResult ValidateShowtime(ShowtimeRequest showtimeRequest)
        {
            try
            {
                bool validFlag;

                // Check Status
                validFlag = showtimeRequest.Status == Constants.SHOWTIME_STATUS_ACTIVE ||
                            showtimeRequest.Status == Constants.SHOWTIME_STATUS_INACTIVE;
                if (!validFlag)
                {
                    ModelState.AddModelError("", $"Status not valid, can only be {Constants.SHOWTIME_STATUS_ACTIVE} "
                                             + $"or {Constants.SHOWTIME_STATUS_INACTIVE}");
                    return(StatusCode(400));
                }

                // Check RoomId, ScreenTypeId and MovieId valid
                var movieSupportedScreenTypeIds = screenTypeRepository
                                                  .GetScreenTypesByMovieId(showtimeRequest.MovieId)
                                                  .Select(screenTypeDTO => screenTypeDTO.Id).ToList();
                var roomSupportedScreenTypeIds = screenTypeRepository
                                                 .GetScreenTypesByRoomId(showtimeRequest.RoomId)
                                                 .Select(screenTypeDTO => screenTypeDTO.Id).ToList();
                validFlag = movieSupportedScreenTypeIds.Intersect(roomSupportedScreenTypeIds)
                            .Contains(showtimeRequest.ScreenTypeId);
                if (!validFlag)
                {
                    ModelState.AddModelError("", "Unsupported ScreenType for Room or Movie");
                    return(StatusCode(400));
                }

                // Check end at
                DateTime startAt    = DateTime.Parse(showtimeRequest.StartAt);
                Movie    movie      = movieRepository.GetMovieById(showtimeRequest.MovieId);
                DateTime endAt      = startAt.AddMinutes(movie.Runtime);
                DateTime movieEndAt = movie.EndAt;
                validFlag = DateTime.Compare(endAt, movieEndAt) <= 0;
                if (!validFlag)
                {
                    ModelState.AddModelError("", "Showtime breaks space time continuum");
                    return(StatusCode(400));
                }
                DateTime now = DateTime.Now;
                validFlag = DateTime.Compare(now, endAt) <= 0;
                if (!validFlag)
                {
                    ModelState.AddModelError("", "Need a time machine to see this movie");
                    return(StatusCode(400));
                }

                // Check showtime overlap
                var showtimes = showtimeRepository.GetShowtimesByRoomId(showtimeRequest.RoomId);
                foreach (ShowtimeDTO showtime in showtimes)
                {
                    validFlag = showtime.StartAt > endAt || showtime.EndAt < startAt;
                    if (!validFlag)
                    {
                        ModelState.AddModelError("", "Showtimes overlap");
                        return(StatusCode(400));
                    }
                }
            }
            catch (SystemException ex)
            {
                ModelState.AddModelError("", ex.Message);
                return(StatusCode(400));
            }

            return(NoContent());
        }