public object Post(OrderRatingsRequest request) { var accountId = new Guid(this.GetSession().UserAuthId); if (request.RatingScores != null) { // cleanup ratings in case we were sent duplicates var ratingScoresCleanedUpForDuplicates = new List <RatingScore>(); foreach (var rating in request.RatingScores) { if (ratingScoresCleanedUpForDuplicates.None(x => x.Name == rating.Name)) { ratingScoresCleanedUpForDuplicates.Add(rating); } } request.RatingScores = ratingScoresCleanedUpForDuplicates; if (HasNoValidExistingRating(request.OrderId) && request.RatingScores.Any()) { var command = new RateOrder { AccountId = accountId, Note = request.Note, OrderId = request.OrderId, RatingScores = request.RatingScores }; _commandBus.Send(command); } } return(string.Empty); }
public void Handle(RateOrder command) { var order = _repository.Find(command.OrderId); order.RateOrder(command.AccountId, command.Note, command.RatingScores); _repository.Save(order, command.Id.ToString()); }
public async Task <IActionResult> RateOrder([FromRoute] long id, [FromBody] RateOrder rating) { var order = await db.Orders .Include(o => o.Status) .Where(o => o.Status.Name == "Заказ доставлен") .FirstOrDefaultAsync(o => o.Id == id); if (order == null) { return(NotFound()); } if (order.UserLogin != User.Identity?.Name) { return(Forbid()); } if (order.Rating != null) { return(BadRequest(new { response = "Уже оценено" })); } order.Rating = rating.Rating; await db.SaveChangesAsync(); return(Ok()); }
public void when_rating_order_successfully() { var rateOrder = new RateOrder { AccountId = _accountId, OrderId = _orderId, Note = "Note", RatingScores = new List <RatingScore> { new RatingScore { RatingTypeId = Guid.NewGuid(), Score = 1, Name = "Politness" }, new RatingScore { RatingTypeId = Guid.NewGuid(), Score = 2, Name = "Safety" } } }; _sut.When(rateOrder); var @event = _sut.ThenHasSingle <OrderRated>(); Assert.AreEqual(_orderId, @event.SourceId); Assert.That(@event.Note, Is.EqualTo(rateOrder.Note)); Assert.That(@event.RatingScores.Count, Is.EqualTo(2)); Assert.That(@event.RatingScores.First().Score, Is.EqualTo(rateOrder.RatingScores.First().Score)); Assert.That(@event.RatingScores.First().RatingTypeId, Is.EqualTo(rateOrder.RatingScores.First().RatingTypeId)); Assert.That(@event.RatingScores.First().Name, Is.EqualTo(rateOrder.RatingScores.First().Name)); Assert.That(@event.RatingScores.ElementAt(1).Score, Is.EqualTo(rateOrder.RatingScores.ElementAt(1).Score)); Assert.That(@event.RatingScores.ElementAt(1).RatingTypeId, Is.EqualTo(rateOrder.RatingScores.ElementAt(1).RatingTypeId)); Assert.That(@event.RatingScores.ElementAt(1).Name, Is.EqualTo(rateOrder.RatingScores.ElementAt(1).Name)); }
public void when_rating_twice_order_get_error() { var orderRated = new OrderRated { SourceId = _orderId, Note = "Note", RatingScores = new List <RatingScore> { new RatingScore { RatingTypeId = Guid.NewGuid(), Score = 1, Name = "Politness" }, new RatingScore { RatingTypeId = Guid.NewGuid(), Score = 2, Name = "Safety" } } }; var rateOrder2 = new RateOrder { AccountId = _accountId, OrderId = _orderId, Note = "Note", RatingScores = new List <RatingScore> { new RatingScore { RatingTypeId = Guid.NewGuid(), Score = 1, Name = "Politness" }, new RatingScore { RatingTypeId = Guid.NewGuid(), Score = 2, Name = "Safety" } } }; _sut.Given(orderRated); _sut.When(rateOrder2); Assert.AreEqual(0, _sut.Events.Count); }