public void TakeDelivery(int userId, int deliveryId)
        {
            var delivery = _queryFacade.Deliveries.FirstOrDefault(d => d.Id == deliveryId);

            if (delivery == null)
            {
                //404 код, если доставки с указанным id не найдено
                HttpContext.Response.StatusCode = 404;
                HttpContext.Response.WriteAsync($"Delivery with id {deliveryId} not found").Wait();
            }
            else if (delivery.Status != DeliveySatus.Available)
            {
                //422, если доставка не доступна
                HttpContext.Response.StatusCode = 422;
                HttpContext.Response.WriteAsync($"Delivery with id {deliveryId} is not available").Wait();
            }
            else
            {
                //если все ок - назначем
                AssignToUserCommand command = new AssignToUserCommand()
                {
                    DeliveryId = delivery.Id, UserId = userId
                };
                _commandHandler.Handle(command);
            }
        }
Exemplo n.º 2
0
        public Task Execute(IJobExecutionContext context)
        {
            return(Task.Run(() =>
            {
                //выбираем нужные доставки
                var expiredDeliveries = _query.Deliveries.Where(
                    d => d.Status == Models.DeliveySatus.Available &&
                    d.CreationDate.Add(TimeSpan.FromSeconds(d.ExpirationTime)) < DateTime.Now)
                                        .ToList();

                int expiredCount = expiredDeliveries.Count;

                //каждую помечаем, как выполненную
                foreach (var expire in expiredDeliveries)
                {
                    _commandHandler.Handle(new DeliveryExpireCommand()
                    {
                        DeliveryId = expire.Id
                    });
                }

                if (expiredCount > 0)
                {
                    _logger.LogInformation($"{expiredCount} deliveries expired!");
                }
            }));
        }
Exemplo n.º 3
0
        public Task Execute(IJobExecutionContext context)
        {
            return(Task.Run(() =>
            {
                //в качестве рандомного тайтла используем гуид
                string title = Guid.NewGuid().ToString();
                int expTime = _optionsAccessor.Value.ExpirationTime;
                int newId = _commandHandler.Handle(new CreateDeliveryCommand()
                {
                    Title = title, ExpirationTime = expTime
                });

                _logger.LogInformation($"Job {newId} {title} created!");
            }));
        }