Exemplo n.º 1
0
        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());
        }
Exemplo n.º 3
0
        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);
        }