Пример #1
0
        public async Task <MessageHandlerResult> HandleAsync(Events.AccountUpdated payload, string trackingId)
        {
            ThreadContext.Properties[EXTERNAL_ID] = payload.ExternalId;
            try
            {
                if (Validator.IsAllowedEvent(payload))
                {
                    _logger.EventReceived(trackingId, payload);

                    if (Validator.IsValidPayload(payload))
                    {
                        var user = Mapper.Map <AccountUpdatedTransferObject>(payload);

                        try
                        {
                            var isUserExists = await DbCommands.IsUserExists(externalLoginId : user.ExternalLoginId);

                            if (isUserExists)
                            {
                                _logger.UpdatingUser(user);
                                await DbCommands.UpdateUser(user.ExternalLoginId, user.Username, user.FirstName, user.LastName, user.EmailAddress, user.PermissionSets);
                            }

                            await MessagingLogger.MessageProcessedSuccessfully(payload, trackingId);

                            _logger.Processed(trackingId, payload);
                        }
                        catch (ListenerException ex)
                        {
                            _logger.ListenerException(ex, trackingId, user);
                            return(MessageHandlerResult.Fatal);
                        }
                    }
                    else
                    {
                        var errors = Validator.GetErrors();
                        _logger.InvalidModel(trackingId, payload, errors);
                        await MessagingLogger.ReceivedInvalidModel(trackingId, payload, errors);

                        return(MessageHandlerResult.Fatal);
                    }
                }
            }
            catch (Exception e)
            {
                _logger.Error(e);
                return(MessageHandlerResult.Fatal);
            }
            finally
            {
                ThreadContext.Properties.Remove(EXTERNAL_ID);
            }
            return(MessageHandlerResult.Success);
        }