Exemple #1
0
        public async Task <IActionResult> UpdatePakje([FromBody] Pakje pakje)
        {
            var entity = await _context.Pakjes.FirstOrDefaultAsync(p => p.PakjeId == pakje.PakjeId);

            if (entity == null)
            {
                return(new NotFoundResult());
            }

            // determine update type
            PakjeMessage pakjeMessage = null;

            if (pakje.LeveringsStatus == LeveringsStatus.Geleverd)
            {
                pakjeMessage = new PakjeGeleverdMessage();
                ((PakjeGeleverdMessage)pakjeMessage).GeleverdOp = pakje.GeleverdOp;
            }
            else if (pakje.LeveringsStatus != entity.LeveringsStatus)
            {
                pakjeMessage = new PakjeStatusGewijzigdMessage();
                ((PakjeStatusGewijzigdMessage)pakjeMessage).VorigeStatus = entity.LeveringsStatus;
                ((PakjeStatusGewijzigdMessage)pakjeMessage).NieuweStatus = pakje.LeveringsStatus;
            }
            else if (pakje.VoorzieneLeveringOp != entity.VoorzieneLeveringOp)
            {
                pakjeMessage = new PakjeLeveringGewijzigdMessage();
                ((PakjeLeveringGewijzigdMessage)pakjeMessage).VorigeVoorzieneLeveringOp = entity.VoorzieneLeveringOp;
                ((PakjeLeveringGewijzigdMessage)pakjeMessage).NieuweVoorzieneLeveringOp = pakje.VoorzieneLeveringOp;
            }
            else
            {
                pakjeMessage = new PakjeMessage();
            }

            // save changes
            entity.LeveringsStatus     = pakje.LeveringsStatus;
            entity.Bestemmeling        = pakje.Bestemmeling ?? entity.Bestemmeling;
            entity.Inhoud              = pakje.Inhoud ?? entity.Inhoud;
            entity.KoerierDienst       = pakje.KoerierDienst ?? entity.KoerierDienst;
            entity.Verzender           = pakje.Verzender ?? entity.Verzender;
            entity.VoorzieneLeveringOp = pakje.VoorzieneLeveringOp ?? entity.VoorzieneLeveringOp;
            entity.GeleverdOp          = pakje.GeleverdOp ?? entity.GeleverdOp;
            await _context.SaveChangesAsync();

            // send message
            pakjeMessage.Bestemmeling        = entity.Bestemmeling;
            pakjeMessage.Inhoud              = entity.Inhoud;
            pakjeMessage.KoerierDienst       = entity.KoerierDienst;
            pakjeMessage.Verzender           = entity.Verzender;
            pakjeMessage.VoorzieneLeveringOp = entity.VoorzieneLeveringOp;
            await _queueSender.SendMessage(pakjeMessage);

            return(new OkObjectResult(entity));
        }
        public async Task SendMessage(PakjeMessage pakjeMessage)
        {
            Address    address    = new Address(_settings.Address);
            Connection connection = await Connection.Factory.CreateAsync(address);

            Session session = new Session(connection);

            Message message = new Message()
            {
                BodySection = new AmqpValue <PakjeMessage>(pakjeMessage)
            };
            SenderLink sender = new SenderLink(session, "sender-link", _settings.QueueName);
            await sender.SendAsync(message);


            await sender.CloseAsync();

            await session.CloseAsync();

            await connection.CloseAsync();
        }