Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 20 additions & 1 deletion services/application/src/actions/user/set-unverified-data.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ const { createError } = require('micro');
const { createRequiredParamError } = require('@base-cms/micro').service;
const { isObject, asArray } = require('@base-cms/utils');
const setConsentAnswer = require('./utils/set-regional-consent-answer');
const setCustomSelectAnswers = require('./utils/set-custom-select-answers');

const { AppUser } = require('../../mongodb/models');

Expand All @@ -16,7 +17,25 @@ module.exports = async ({ applicationId, email, payload } = {}) => {
// do nothing if the user is already verified.
if (user.verified) return user;

const { regionalConsentAnswers, ...fields } = payload;
const {
// customBooleanFieldAnswers,
customSelectFieldAnswers,
// customTextFieldAnswers,
regionalConsentAnswers,
...fields
} = payload;

// if (asArray(customBooleanFieldAnswers).length) {
// setCustomBooleanAnswers({ user, answers: customBooleanFieldAnswers });
// }

if (asArray(customSelectFieldAnswers).length) {
setCustomSelectAnswers({ user, answers: customSelectFieldAnswers });
}

// if (asArray(customTextFieldAnswers).length) {
// setCustomTextAnswers({ user, answers: customTextFieldAnswers });
// }

// overwrite/set regional consent answers
user.set('regionalConsentAnswers', []);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ const { createRequiredParamError } = require('@base-cms/micro').service;
const { handleError } = require('@identity-x/utils').mongoose;

const { AppUser } = require('../../mongodb/models');
const setCustomSelectAnswers = require('./utils/set-custom-select-answers');

const { isArray } = Array;

Expand All @@ -21,34 +22,8 @@ module.exports = async ({
// do not update user answers when passed answers are not an array
if (!isArray(answers)) return user;

// get all current answers as object { id, value }
const userObj = user.customSelectFieldAnswers.reduce((obj, { _id, values, writeInValues }) => ({
...obj,
[_id]: { values, writeInValues },
}), {});
setCustomSelectAnswers({ user, answers });

const newAnswers = answers
// Allow for optionIds to be empty if forceUnset is set to true
.filter(({ optionIds, forceUnset }) => optionIds.length || forceUnset)
.map(item => ({ _id: item.fieldId, ...item }))
.reduce((obj, { _id, optionIds, writeInValues }) => ({
...obj,
[_id]: {
values: optionIds,
writeInValues: (writeInValues || []).map(v => ({ _id: v.optionId, value: v.value })),
},
}), {});

// merge new and old answers to account for old non active answers
const mergedAnswers = { ...userObj, ...newAnswers };

// convert merged answers into valid array of { _id, values } answers
const toSet = Object.keys(mergedAnswers).map((key) => {
const { values, writeInValues } = mergedAnswers[key];
return { _id: key, values, writeInValues };
});

user.set('customSelectFieldAnswers', toSet);
if (profileLastVerifiedAt) {
user.set('profileLastVerifiedAt', profileLastVerifiedAt);
user.set('forceProfileReVerification', false);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
const { createRequiredParamError } = require('@base-cms/micro').service;

module.exports = ({ user, answers }) => {
if (!answers) throw createRequiredParamError('answers');

// get all current answers as object { id, value }
const userObj = user.customSelectFieldAnswers.reduce((obj, { _id, values, writeInValues }) => ({
...obj,
[_id]: { values, writeInValues },
}), {});

const newAnswers = answers
// Allow for optionIds to be empty if forceUnset is set to true
.filter(({ optionIds, forceUnset }) => optionIds.length || forceUnset)
.map(item => ({ _id: item.fieldId, ...item }))
.reduce((obj, { _id, optionIds, writeInValues }) => ({
...obj,
[_id]: {
values: optionIds,
writeInValues: (writeInValues || []).map(v => ({ _id: v.optionId, value: v.value })),
},
}), {});

// merge new and old answers to account for old non active answers
const mergedAnswers = { ...userObj, ...newAnswers };

// convert merged answers into valid array of { _id, values } answers
const toSet = Object.keys(mergedAnswers).map((key) => {
const { values, writeInValues } = mergedAnswers[key];
return { _id: key, values, writeInValues };
});

user.set('customSelectFieldAnswers', toSet);
};
3 changes: 3 additions & 0 deletions services/graphql/src/graphql/definitions/app-user.js
Original file line number Diff line number Diff line change
Expand Up @@ -459,6 +459,9 @@ input SetAppUserUnverifiedDataMutationInput {
mobileNumber: String
phoneNumber: String

# customBooleanFieldAnswers: [UpdateAppUserCustomBooleanAnswer!] = []
customSelectFieldAnswers: [UpdateAppUserCustomSelectAnswer!] = []
# customTextFieldAnswers: [UpdateAppUserCustomTextAnswer!] = []
regionalConsentAnswers: [SetAppUserRegionalConsentAnswerInput!] = []
}

Expand Down
6 changes: 6 additions & 0 deletions services/graphql/src/graphql/resolvers/app-user.js
Original file line number Diff line number Diff line change
Expand Up @@ -612,6 +612,9 @@ module.exports = {
mobileNumber,
phoneNumber,
regionalConsentAnswers,
// customBooleanFieldAnswers,
customSelectFieldAnswers,
// customTextFieldAnswers,
} = input;

const payload = {
Expand All @@ -628,6 +631,9 @@ module.exports = {
mobileNumber,
phoneNumber,
regionalConsentAnswers,
// customBooleanFieldAnswers,
customSelectFieldAnswers,
// customTextFieldAnswers,
};

return applicationService.request('user.setUnverifiedData', {
Expand Down