예제 #1
0
        public async Task <Movie> CreateMovieAsync(string title, string trailer, string poster, string slider, string description, DateTime releaseDate, string userId)
        {
            BusinessValidator.IsTitleInValidRange(title);
            BusinessValidator.IsTrailerInValidRange(trailer);
            BusinessValidator.IsDateInRange(releaseDate);

            var user = await this.context
                       .Users
                       .FindAsync(userId);

            var movie = await this.context
                        .Movies
                        .FirstOrDefaultAsync(t => t.Title == title);

            movie = new Movie()
            {
                Title = title, Trailer = trailer, Poster = poster, SliderImage = slider, Description = description, ReleaseDate = releaseDate
            };

            movie.User = user;

            this.context.Movies.Add(movie);
            await this.context.SaveChangesAsync();

            return(movie);
        }
예제 #2
0
        public async Task <Movie> UpdateMovieAsync(Movie movie, string trailer, string description, string poster, string sliderImage)
        {
            if (trailer != null)
            {
                BusinessValidator.IsInProperRange(trailer);
            }

            movie.Trailer = trailer;

            if (description != null)
            {
                BusinessValidator.IsInProperRange(description);
            }

            movie.Description = description;

            if (poster != null)
            {
                movie.Poster = poster;
            }
            if (sliderImage != null)
            {
                movie.SliderImage = sliderImage;
            }

            await this.context.SaveChangesAsync();

            return(movie);
        }
예제 #3
0
        public async Task <Review> EditReviewAsync(Review review, string userId, double rating, string description)
        {
            BusinessValidator.IsInProperRange(description);
            BusinessValidator.IsRatingInRange(rating);

            if (review.IsDeleted)
            {
                throw new ArgumentException(ServicesConstants.ReviewNotPresent);
            }

            var user = this.context.Users.Find(userId);

            if (review.UserId != user.Id)
            {
                throw new ArgumentException(string.Format(ServicesConstants.ReviewNotFromUser,
                                                          user.UserName));
            }

            review.Description = description;
            var movie = review.Movie;

            if (rating > 0)
            {
                movie.TotalRating  -= review.Rating;
                review.Rating       = rating;
                movie.TotalRating  += rating;
                movie.AverageRating = (double)movie.TotalRating / movie.NumberOfVotes;
            }

            await this.context.SaveChangesAsync();

            return(review);
        }
예제 #4
0
        public async Task <Actor> UpdateActorAsync(Actor actor, string picture, string biography)

        {
            BusinessValidator.IsInProperRange(biography);
            actor.Biography = biography;
            if (picture != null)
            {
                actor.Picture = picture;
            }
            await this.context.SaveChangesAsync();

            return(actor);
        }
예제 #5
0
        public async Task <Genre> CreateGenreAsync(string genreName)
        {
            BusinessValidator.IsGenreInValidRange(genreName);
            var genre = new Genre()
            {
                Name = genreName
            };

            this.context.Genres.Add(genre);
            await this.context.SaveChangesAsync();

            return(genre);
        }
예제 #6
0
        public void ValidationTest()
        {
            var business = new Business {
                Id = Guid.NewGuid(), Status = 0, LastChange = DateTime.Now,
                No = "A1111", Name = ""
            };

            var bv     = new BusinessValidator();
            var result = bv.Validate(business);

            Assert.False(result.IsValid);

            Assert.Equal("商户名称只能输入中文、数字、字符。", result.Errors.First().ErrorMessage);
            Assert.Equal(1, result.Errors.Count);
        }
예제 #7
0
        public async Task <Actor> CreateActorAsync(string firstName, string lastName, string picture, string biography)
        {
            BusinessValidator.IsNameInValidRange(firstName);
            BusinessValidator.IsNameInValidRange(lastName);
            BusinessValidator.IsInProperRange(biography);

            var actor = new Actor()
            {
                FirstName = firstName, LastName = lastName, Picture = picture, Biography = biography
            };

            await this.context.Actors.AddAsync(actor);

            await this.context.SaveChangesAsync();

            return(actor);
        }
예제 #8
0
        public async Task <Review> AddReviewToMovieAsync(int movieId, string userId,
                                                         string description, double rating)
        {
            BusinessValidator.IsInProperRange(description);
            BusinessValidator.IsRatingInRange(rating);

            var review = await this.context.Reviews.Where(x => x.UserId == userId && x.MovieId == movieId)
                         .Include(x => x.Movie)
                         .Include(x => x.User)
                         .FirstOrDefaultAsync();


            var movie = await this.context.Movies.FindAsync(movieId);

            var user = await this.context.Users.FindAsync(userId);

            if (review == null)
            {
                review = new Review()
                {
                    Description = description, Rating = rating
                };
            }

            else if (!review.IsDeleted)
            {
                throw new ArgumentException(string.Format(ServicesConstants.UserAlreadyVoted,
                                                          user.UserName, movie.Title));
            }

            else if (review.IsDeleted)
            {
                review.Description = description;
                movie.TotalRating -= review.Rating;
                review.Rating      = rating;
                movie.NumberOfVotes--;
            }

            review.Movie     = movie;
            review.MovieId   = movie.Id;
            review.UserId    = user.Id;
            review.CreatedOn = DateTime.Now;
            if (review.IsDeleted)
            {
                review.IsDeleted = false;
            }
            else
            {
                context.Reviews.Add(review);
            }

            if (rating > 0)
            {
                movie.NumberOfVotes++;
                movie.TotalRating += rating;
                if (movie.NumberOfVotes != 0)
                {
                    movie.AverageRating = (double)movie.TotalRating / movie.NumberOfVotes;
                }
            }

            context.SaveChanges();
            return(review);
        }