Beispiel #1
0
        public IActionResult AssociateCustomerUser([FromBody] AssociateCustomerUserEvent customerUser)
        {
            try
            {
                customerUser.ReceivedUTC = DateTime.UtcNow;
                if (customerService.GetCustomer(customerUser.CustomerUID) == null)
                {
                    logger.LogInformation(Messages.CustomerDoesntExist);
                    return(BadRequest(Messages.CustomerDoesntExist));
                }

                var userCustomerInDb =
                    userCustomerService.GetCustomerUser(customerUser.CustomerUID, customerUser.UserUID);
                if (userCustomerInDb != null)
                {
                    logger.LogInformation(Messages.CustomerUserAlreadyExists);
                    return(BadRequest(Messages.CustomerUserAlreadyExists));
                }

                if (userCustomerService.AssociateCustomerUser(customerUser))
                {
                    return(Ok());
                }

                logger.LogWarning(Messages.UnableToSaveToDb);
                return(BadRequest(Messages.UnableToSaveToDb));
            }
            catch (Exception ex)
            {
                logger.LogError(string.Format(Messages.ExceptionOccured, ex.Message, ex.StackTrace));
                return(StatusCode((int)HttpStatusCode.InternalServerError, ex.Message));
            }
        }
Beispiel #2
0
        public static AssociateCustomerUserEvent GetDefaultValidAssociateCustomerUserServiceRequest()
        {
            AssociateCustomerUserEvent defaultValidAssociateCustomerAssetServiceModel = new AssociateCustomerUserEvent();

            defaultValidAssociateCustomerAssetServiceModel.CustomerUID = customerServiceSupport.CreateCustomerModel.CustomerUID;
            defaultValidAssociateCustomerAssetServiceModel.UserUID     = Guid.NewGuid();
            defaultValidAssociateCustomerAssetServiceModel.ActionUTC   = DateTime.UtcNow;
            defaultValidAssociateCustomerAssetServiceModel.ReceivedUTC = null;
            return(defaultValidAssociateCustomerAssetServiceModel);
        }
Beispiel #3
0
        public void AssociateCustomerUser_GivenPayload_ExpectedTransactionStatus(AssociateCustomerUserEvent userEvent,
                                                                                 bool hasValidCustomer, bool transactionStatus, int upsertCalls, int publishCalls, bool hasException)
        {
            //Arrange
            DbCustomer customerData = hasValidCustomer ? new DbCustomer()
            {
                CustomerID = 109
            } : null;

            if (hasException)
            {
                transaction.Get <DbCustomer>(Arg.Any <string>()).Returns(e => throw new Exception());
            }
            else
            {
                transaction.Get <DbCustomer>(Arg.Any <string>()).Returns(new List <DbCustomer> {
                    customerData
                });
            }
            transaction.Execute(Arg.Any <List <Action> >())
            .Returns(a =>
            {
                a.Arg <List <Action> >().ForEach(action => action.Invoke());
                return(true);
            });

            //Act
            if (hasException)
            {
                Assert.Throws <Exception>(() => userCustomerService.AssociateCustomerUser(userEvent));
            }
            else
            {
                var resultData = userCustomerService.AssociateCustomerUser(userEvent);

                Assert.Equal(transactionStatus, resultData);
            }

            //Assert
            transaction.Received(upsertCalls).Upsert(
                Arg.Is <DbUserCustomer>(userCust => ValidateCustomerUserObject(userEvent, userCust, customerData)));
            transaction.Received(publishCalls).Publish(
                Arg.Is <List <KafkaMessage> >(messages => messages
                                              .TrueForAll(m => ValidateCustomerUserKafkaObject(false, m, userEvent))));
        }
Beispiel #4
0
        public bool AssociateCustomerUser(AssociateCustomerUserEvent associateCustomerUser)
        {
            try
            {
                var customer = GetCustomer(associateCustomerUser.CustomerUID);
                if (customer?.CustomerID > 0)
                {
                    List <KafkaMessage> messages = CustomerTopics
                                                   ?.Select(topic => new KafkaMessage
                    {
                        Key     = associateCustomerUser.CustomerUID.ToString(),
                        Message = new { AssociateCustomerUserEvent = associateCustomerUser },
                        Topic   = topic
                    })
                                                   ?.ToList();

                    var userCustomer = new DbUserCustomer
                    {
                        fk_CustomerID  = customer.CustomerID,
                        fk_CustomerUID = associateCustomerUser.CustomerUID,
                        fk_UserUID     = associateCustomerUser.UserUID,
                        LastUserUTC    = DateTime.UtcNow
                    };

                    var actions = new List <Action>
                    {
                        () => transaction.Upsert(userCustomer),
                        () => transaction.Publish(messages)
                    };
                    return(transaction.Execute(actions));
                }

                return(false);
            }
            catch (Exception ex)
            {
                logger.LogError($"Error while associating user for customer : {ex.Message}, {ex.StackTrace}");
                throw;
            }
        }