/// <summary>
        /// Create Acknowledgements Queue
        /// </summary>
        /// <param name="acknowledgementsQueue"></param>
        /// <returns></returns>
        public async Task CreateAcknowledgementsQueue(AcknowledgementsQueue acknowledgementsQueue)
        {
            DateTime dateCreated = DateTime.UtcNow;

            acknowledgementsQueue.DateCreated = dateCreated;

            await dbConnection.AcknowledgementsQueue.AddAsync(acknowledgementsQueue);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Commit Inbound Message
        /// </summary>
        /// <param name="messageQueue"></param>
        /// <returns></returns>
        public async Task <ResponseModel <MessageQueue> > CommitInboundMessage(MessageQueue messageQueue, ConnectionStrings connectionStrings)
        {
            ResponseModel <MessageQueue> returnResponse = new ResponseModel <MessageQueue>();

            try
            {
                _loggingManagementDataService.OpenConnection(connectionStrings.PrimaryDatabaseConnectionString);
                _loggingManagementDataService.BeginTransaction((int)IsolationLevel.ReadCommitted);

                MessagesSent existingMessageSent = await _loggingManagementDataService.GetMessageSent(messageQueue.TransactionQueueId, messageQueue.ExchangeName, messageQueue.TransactionCode);

                if (messageQueue.QueueName != string.Empty && messageQueue.QueueName != null)
                {
                    MessagesReceived existingMessageReceived = await _loggingManagementDataService.GetMessageReceived(messageQueue.TransactionQueueId, messageQueue.ExchangeName, messageQueue.TransactionCode, messageQueue.QueueName);

                    if (existingMessageReceived != null)
                    {
                        returnResponse.ReturnStatus = true;
                        return(returnResponse);
                    }
                }

                if (existingMessageSent == null)
                {
                    MessagesSent messageSent = new MessagesSent();

                    messageSent.ExchangeName             = messageQueue.ExchangeName;
                    messageSent.SenderTransactionQueueId = messageQueue.TransactionQueueId;
                    messageSent.TransactionCode          = messageQueue.TransactionCode;
                    messageSent.Payload = messageQueue.Payload;

                    if (messageSent.TransactionCode == MessageQueueExchanges.ProductUpdated)
                    {
                        messageSent.AcknowledgementsRequired = MessageExchangeFanouts.ProductUpdated;
                        messageSent.AcknowledgementsReceived = 0;
                    }
                    else if (messageSent.TransactionCode == MessageQueueExchanges.PurchaseOrderSubmitted)
                    {
                        messageSent.AcknowledgementsRequired = MessageExchangeFanouts.PurchaseOrderSubmitted;
                        messageSent.AcknowledgementsReceived = 0;
                    }
                    else if (messageSent.TransactionCode == MessageQueueExchanges.SalesOrderSubmitted)
                    {
                        messageSent.AcknowledgementsRequired = MessageExchangeFanouts.SalesOrderSubmitted;
                        messageSent.AcknowledgementsReceived = 0;
                    }
                    else if (messageSent.TransactionCode == MessageQueueExchanges.InventoryReceived)
                    {
                        messageSent.AcknowledgementsRequired = MessageExchangeFanouts.InventoryReceived;
                        messageSent.AcknowledgementsReceived = 0;
                    }
                    else if (messageSent.TransactionCode == MessageQueueExchanges.InventoryShipped)
                    {
                        messageSent.AcknowledgementsRequired = MessageExchangeFanouts.InventoryShipped;
                        messageSent.AcknowledgementsReceived = 0;
                    }

                    if (messageQueue.QueueName != string.Empty && messageQueue.QueueName != null)
                    {
                        existingMessageSent.AcknowledgementsReceived = existingMessageSent.AcknowledgementsReceived + 1;
                    }

                    await _loggingManagementDataService.CreateMessagesSent(messageSent);
                }

                if (messageQueue.QueueName != string.Empty && messageQueue.QueueName != null)
                {
                    if (existingMessageSent != null)
                    {
                        existingMessageSent.AcknowledgementsReceived = existingMessageSent.AcknowledgementsReceived + 1;
                        await _loggingManagementDataService.UpdateMessagesSent(existingMessageSent);
                    }

                    MessagesReceived messageReceived = new MessagesReceived();
                    messageReceived.ExchangeName             = messageQueue.ExchangeName;
                    messageReceived.SenderTransactionQueueId = messageQueue.TransactionQueueId;
                    messageReceived.TransactionCode          = messageQueue.TransactionCode;
                    messageReceived.Payload   = messageQueue.Payload;
                    messageReceived.QueueName = messageQueue.QueueName;

                    await _loggingManagementDataService.CreateMessagesReceived(messageReceived);

                    if (existingMessageSent.AcknowledgementsReceived == existingMessageSent.AcknowledgementsRequired)
                    {
                        AcknowledgementsQueue acknowledgementsQueue = new AcknowledgementsQueue();
                        acknowledgementsQueue.ExchangeName             = messageQueue.ExchangeName;
                        acknowledgementsQueue.SenderTransactionQueueId = messageQueue.TransactionQueueId;
                        acknowledgementsQueue.TransactionCode          = messageQueue.TransactionCode;

                        if (acknowledgementsQueue.TransactionCode == MessageQueueExchanges.ProductUpdated)
                        {
                            acknowledgementsQueue.AcknowledgementQueue = MessageQueueEndpoints.InventoryQueue;
                        }
                        else if (acknowledgementsQueue.TransactionCode == MessageQueueExchanges.PurchaseOrderSubmitted)
                        {
                            acknowledgementsQueue.AcknowledgementQueue = MessageQueueEndpoints.PurchaseOrderQueue;
                        }
                        else if (acknowledgementsQueue.TransactionCode == MessageQueueExchanges.SalesOrderSubmitted)
                        {
                            acknowledgementsQueue.AcknowledgementQueue = MessageQueueEndpoints.SalesOrderQueue;
                        }
                        else if (acknowledgementsQueue.TransactionCode == MessageQueueExchanges.InventoryReceived)
                        {
                            acknowledgementsQueue.AcknowledgementQueue = MessageQueueEndpoints.InventoryQueue;
                        }
                        else if (acknowledgementsQueue.TransactionCode == MessageQueueExchanges.InventoryShipped)
                        {
                            acknowledgementsQueue.AcknowledgementQueue = MessageQueueEndpoints.InventoryQueue;
                        }

                        await _loggingManagementDataService.CreateAcknowledgementsQueue(acknowledgementsQueue);
                    }
                }

                await _loggingManagementDataService.UpdateDatabase();

                _loggingManagementDataService.CommitTransaction();

                returnResponse.ReturnStatus = true;
            }
            catch (Exception ex)
            {
                _loggingManagementDataService.RollbackTransaction();
                returnResponse.ReturnStatus = false;
                returnResponse.ReturnMessage.Add(ex.Message);
            }
            finally
            {
                _loggingManagementDataService.CloseConnection();
            }

            returnResponse.Entity = messageQueue;

            return(returnResponse);
        }
        /// <summary>
        /// Delete Acknowledgements Queue Item
        /// </summary>
        /// <param name="acknowledgementsQueueId"></param>
        /// <returns></returns>
        public async Task DeleteAcknowledgementsQueue(int acknowledgementsQueueId)
        {
            AcknowledgementsQueue acknowledgementsQueue = await dbConnection.AcknowledgementsQueue.Where(x => x.AcknowledgementsQueueId == acknowledgementsQueueId).FirstOrDefaultAsync();

            dbConnection.AcknowledgementsQueue.Remove(acknowledgementsQueue);
        }