public async Task <IActionResult> BuyChildTicket(int movieId) { var result = await _unitOfWork.Repository <Movie>().GetAsync(movieId); if (result is null) { return(NotFound()); } var specification = new MovieForKidsSpecification(); if (!specification.IsSatisfiedBy(result)) { return(Conflict("The mvie is not sutable for children")); } return(Ok(result)); }
private void BuyChildTicket(long movieId) { Maybe <Movie> movieOrNothing = _repository.GetOne(movieId); if (movieOrNothing.HasNoValue) { return; } Movie movie = movieOrNothing.Value; var spec = new MovieForKidsSpecification(); if (!spec.IsSatisfiedBy(movie)) { MessageBox.Show("The movie is not suitable for children", "Error", MessageBoxButton.OK, MessageBoxImage.Error); return; } MessageBox.Show("You've bought a ticket", "Success", MessageBoxButton.OK, MessageBoxImage.Information); }
static void Main(string[] args) { //strongly typed specification with and ,or,not StronglyTypedMovieRepository stronglyTypedMovieRepository = new StronglyTypedMovieRepository(); var kidsSpecification = new MovieForKidsSpecification(); var hasCdMovies = new HasCDSpecification(); Specification <StronglyTypedMovie> spec = Specification <StronglyTypedMovie> .All; spec = spec.And(new MovieForKidsSpecification()); //spec = spec.Or(new HasCDSpecification()); //and take which movies not have a cd in this time var hasCD = new HasCDSpecification(); spec = hasCD.Not(); var movieList = stronglyTypedMovieRepository.Find(spec); foreach (var movie in movieList) { Console.WriteLine($"this movie for kids and has not cd :{movie.Name}"); } //================================================================================== //Strongly Typed Specification //StronglyTypedMovieRepository stronglyTypedMovieRepository = new StronglyTypedMovieRepository(); //StronglyTypedMovie storynglyTypedMovie = stronglyTypedMovieRepository.GetOne(1); //var stronglyTypedMovieSpecification = new MovieForKidsSpecification(); //if (!stronglyTypedMovieSpecification.IsSatisfiedBy(storynglyTypedMovie)) //{ // Console.WriteLine($"this movie is suitable for children : {storynglyTypedMovie.Name}"); //} //Console.WriteLine("----------------------------------------------"); //var kidsSpecification = new MovieForKidsSpecification(); //foreach (var stronglyTypedMovie in stronglyTypedMovieRepository.Find(kidsSpecification)) //{ // Console.WriteLine($"these movie are for children : {stronglyTypedMovie.Name}"); //} //Console.WriteLine("----------------------------------------------"); //var hasCdMovies =new HasCDSpecification(); //foreach (var movie in stronglyTypedMovieRepository.Find(hasCdMovies)) //{ // Console.WriteLine($"this movie has cd :{movie.Name}"); //} //================================================================================== //Generic Neive //GenericNeiveMovieRepository genericNeiveRepo = new GenericNeiveMovieRepository(); //var genericNeiveMovie = genericNeiveRepo.GetOne(1); //var genericDelegateNeiveMovie = // new GenericNeiveSpecification<GenericNeiveMovie> // (x=>x.MpaaRating <= GenericNeiveMpaaRating.PG13); //if (!genericDelegateNeiveMovie.IsSatisfiedBy(genericNeiveMovie)) //{ // Console.WriteLine($"this movie is suitable for children : {genericNeiveMovie.Name}"); //} //Console.WriteLine("----------------------------------------------"); //var genericNeiveForChildrenMovies = // genericNeiveRepo.Find(GenericNeiveMovieRepository.isSuitableForChildren); //foreach (var movie in genericNeiveForChildrenMovies) //{ // Console.WriteLine($"Movie name is :{movie.Name}"); //} //Console.WriteLine("----------------------------------------------"); //var genericNeiveForHasCdMovies = genericNeiveRepo.Find(GenericNeiveMovieRepository.hasCD); //foreach (var movie in genericNeiveForHasCdMovies) //{ // Console.WriteLine($"this movie has cd :{movie.Name}"); //} //================================================================================== //Naive //NeiveMovieRepository neiveRepo = new NeiveMovieRepository(); ////check expression here //NeiveMovie neiveMovie = neiveRepo.GetOne(1); // //expression to delegate //Func<NeiveMovie, bool> delegateNeiveMovie = // NeiveMovieRepository.isSuitableForChildren.Compile(); //if (!delegateNeiveMovie(neiveMovie)) //{ // Console.WriteLine($"this movie is suitable for children : {neiveMovie.Name}"); //} //Console.WriteLine("----------------------------------------------"); //var neiveForChildrenMovies = // neiveRepo.Find(NeiveMovieRepository.isSuitableForChildren); //foreach (var movie in neiveForChildrenMovies) //{ // Console.WriteLine($"Movie name is :{movie.Name}"); //} //Console.WriteLine("----------------------------------------------"); //var neiveForHasCdMovies = neiveRepo.Find(NeiveMovieRepository.hasCD); //foreach (var movie in neiveForHasCdMovies) //{ // Console.WriteLine($"this movie has cd :{movie.Name}"); //} //================================================================================== //Problem //ProblemMovieRepository problemRepo = new ProblemMovieRepository(); //var problemForChildrendMovies = problemRepo.isSuitableForChildren(); //foreach (var movie in problemForChildrendMovies) //{ // Console.WriteLine($"for children Movie name is :{movie.Name}"); //} //Console.WriteLine("----------------------------------------------"); //var problemForHasCdMovies = problemRepo.HasCDVersion(); //foreach (var movie in problemForHasCdMovies) //{ // Console.WriteLine($"has cd Movie name is :{movie.Name}"); //} Console.ReadKey(); }