public async Task <IActionResult> InitiateGdprExportProcess([FromBody] InitiateGdprProcessCommand cmd) { try { cmd = await AppendUserDataToCommand(cmd); cmd.ProcessKey = GdprProcessEnum.Export; } catch (ArgumentNullException e) { _logger.LogWarning(e, "Argument for GDPR process initialization is not defined."); return((IActionResult)BadRequest(new { message = e.Message })); } catch (Exception e) { _logger.LogError(e, "An error occurred while initializing GDPR process."); return(StatusCode(500)); } var initiateProcessCommand = new IdentifiedCommand <InitiateGdprProcessCommand, string>(cmd, new Guid()); var commandResult = await _mediator.Send(initiateProcessCommand); return(commandResult == null ? (IActionResult)Ok() : (IActionResult)BadRequest(new { message = commandResult })); }
private async Task <InitiateGdprProcessCommand> AppendUserDataToCommand(InitiateGdprProcessCommand cmd) { cmd.UserType = this.User.Claims.Where(x => x.Type == "user_type").FirstOrDefault()?.Value; var username = IsCustomer(cmd.UserType) ? this.User.Claims.Where(x => x.Type == "preferred_username").FirstOrDefault()?.Value : cmd.Username; if (string.IsNullOrEmpty(username)) { throw new ArgumentNullException("Username is not available"); } var userData = await _userInfoRetrieval.GetUserData(username); if (string.IsNullOrEmpty(userData.Email)) { throw new ArgumentNullException("Email is not available"); } cmd.Username = userData.Username; cmd.CustomerNumber = userData.CustomerNumber; cmd.Email = userData.Email; cmd.PhoneNumber = userData.PhoneNumber; cmd.FirstName = userData.FirstName; cmd.LastName = userData.LastName; cmd.Initiator = this.User.Claims.Where(x => x.Type == "preferred_username").FirstOrDefault()?.Value; return(cmd); }