public async Task <int> CreateReview(ReviewCreationDto reviewCreationDto, string email) { var user = await _userManager.FindByEmailAsync(email); using (IUnitOfWork unitOfWork = _unitOfWorkFactory.Create()) { var reviews = unitOfWork.Repository <Review>(); var orders = unitOfWork.Repository <Order>(); var order = orders.Get(reviewCreationDto.OrderId); if (order == null || order.MechanicId != user.Id) { return(0); } var review = new Review { Description = reviewCreationDto.Description, Date = DateTime.Now.ToUniversalTime(), OrderId = reviewCreationDto.OrderId, MechanicId = user.Id }; reviews.Add(review); await unitOfWork.SaveAsync(); order.ReviewId = review.Id; order.Status = OrderStatus.Done; await unitOfWork.SaveAsync(); return(review.Id); } }
public async Task <ActionResult> Post(int movieId, ReviewCreationDto reviewCreatinDto) { var userId = HttpContext.User.Claims.FirstOrDefault(u => u.Type == ClaimTypes.NameIdentifier).Value; var reviewExists = await _context.Reviews.AnyAsync(r => r.MovieId == movieId && r.UserId == userId); if (reviewExists) { return(BadRequest("The user has already make a review.")); } var review = _mapper.Map <Review>(reviewCreatinDto); review.UserId = userId; review.MovieId = movieId; _context.Add(review); await _context.SaveChangesAsync(); return(NoContent()); }
public async Task <ActionResult <IEnumerable <ReviewDto> > > Put(int movieId, int reviewId, ReviewCreationDto reviewCreatinDto) { var review = await _context.Reviews.FirstOrDefaultAsync(r => r.Id == reviewId); if (review == null) { return(NotFound()); } var userId = HttpContext.User.Claims.FirstOrDefault(u => u.Type == ClaimTypes.NameIdentifier).Value; if (review.UserId != userId) { return(BadRequest("You are not allowed to update this review because you did not created it.")); } review = _mapper.Map(reviewCreatinDto, review); await _context.SaveChangesAsync(); return(NoContent()); }
public async Task <IActionResult> CreateReview([FromBody] ReviewCreationDto reviewCreationDto) { string email = User.Identity.Name; return(Ok(await _reviewService.CreateReview(reviewCreationDto, email))); }