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); }
public async Task <MessageHandlerResult> HandleAsync(Events.AccountCreateFailed payload, string trackingId) { ThreadContext.Properties[INTERNAL_ID] = payload.InternalId; try { if (Validator.IsAllowedEvent(payload)) { _logger.EventReceived(trackingId, payload); if (Validator.IsValidPayload(payload)) { var operationFailed = Mapper.Map <AccountCreateFailedTransferObject>(payload); // only StarChef account can be found by loginId, so this filters messages and only StarChef related will make effect var isUserExists = await DbCommands.IsUserExists(operationFailed.LoginId); if (isUserExists) { _logger.DisablingUser(operationFailed); await DbCommands.DisableLogin(operationFailed.LoginId); } await MessagingLogger.ReceivedFailedMessage(operationFailed, trackingId); _logger.Processed(trackingId, payload); } 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(INTERNAL_ID); } return(MessageHandlerResult.Success); }
public async Task <MessageHandlerResult> HandleAsync(Events.AccountStatusChanged payload, string trackingId) { ThreadContext.Properties[EXTERNAL_ID] = payload.ExternalId; try { if (Validator.IsAllowedEvent(payload)) { _logger.EventReceived(trackingId, payload); if (Validator.IsValidPayload(payload)) { try { var statusChanged = Mapper.Map <AccountStatusChangedTransferObject>(payload); var isUserExists = await DbCommands.IsUserExists(externalLoginId : statusChanged.ExternalLoginId); if (isUserExists) { if (statusChanged.IsActive) { _logger.EnablingUser(statusChanged); await DbCommands.EnableLogin(externalLoginId : statusChanged.ExternalLoginId); } else { _logger.DisablingUser(statusChanged); await DbCommands.DisableLogin(externalLoginId : statusChanged.ExternalLoginId); } } await MessagingLogger.MessageProcessedSuccessfully(payload, trackingId); _logger.Processed(trackingId, payload); } catch (ListenerException ex) { _logger.ListenerException(ex, trackingId, payload); 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); }
public async Task <MessageHandlerResult> HandleAsync(AccountCreated payload, string trackingId) { ThreadContext.Properties[INTERNAL_ID] = payload.InternalId; try { if (Validator.IsAllowedEvent(payload)) { _logger.EventReceived(trackingId, payload); if (Validator.IsValidPayload(payload)) { AccountCreatedTransferObject user = null; try { user = Mapper.Map <AccountCreatedTransferObject>(payload); if (payload.HasSource && payload.Source == SourceSystem.STARCHEF) { int userId = 0; if (int.TryParse(user.InternalId, out userId)) { user.InternalLoginId = userId; } } var isUserExists = await DbCommands.IsUserExists(user.InternalLoginId, username : user.Username); if (isUserExists) { /* NOTE * LoginId is missing in the system when the event is issued * #1 by another system OR * #2 be user management API (as of 18/Apr/17). * The operation to originate loginId will lookup database for the actual value. * NB: it should be originated always because User Management send event with StarChef source system. */ user.InternalLoginId = await DbCommands.OriginateLoginId(user.InternalLoginId, user.Username); _logger.UpdatingUserExternalId(user); await DbCommands.UpdateExternalId(user); } else { _logger.AddingUser(user); user.InternalLoginId = await DbCommands.AddUser(user); } await MessagingLogger.MessageProcessedSuccessfully(payload, trackingId); _logger.Processed(trackingId, payload); // run subscribed post-events var evt = OnProcessed; if (evt != null) { _logger.Info("Post-processing the event"); await evt(this, user, _config); } } 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 (System.Exception e) { _logger.Error(e); return(MessageHandlerResult.Fatal); } finally { ThreadContext.Properties.Remove(INTERNAL_ID); } return(MessageHandlerResult.Success); }