/**
* @module method/update
*/
const admin = require('firebase-admin');
const FieldValue = admin.firestore.FieldValue;
const {has, pick} = require('lodash');
const errorMessages = require('../error/error.json');
const db = admin.firestore();
/**
* Update a user’s user meta on Firebase
*
* @param {object} user - User object
* @param {string} user.uid - Firebase User ID, e.g. hk_wx5555556.
* @param {string} user.passwordHash - Hashed password.
* @param {boolean} forceSet - True if user should be set instead of updated.
*
* @return {userMeta} User’s user meta.
*/
const update = (user, forceSet) => {
if (forceSet === undefined) {
forceSet = false;
}
const userMeta = pick(user, [
'borrowerID',
'branchID',
'country',
'failCount',
'idNumber',
'passwordHash',
'hasReloanPhoneNumber',
'reloanStartTime',
'appointmentType',
]);
return admin.auth().getUser(user.uid).then((authUser) => {
if (forceSet) {
return db.collection('appUserMeta').doc(authUser.uid).set(userMeta)
}
return db.collection('appUserMeta').doc(authUser.uid).update(userMeta)
}).then((result) => {
console.info('[Success] Updated user meta to database');
return result;
}).catch((error) => {
let response = {
"code": "unknown",
"message": "Sorry, there are some issues on our side",
"details": "Please try again in a few minutes. If it’s still not working, call us at +852 9847 4943."
};
if (has(error, 'errorInfo.code')) {
if (has(errorMessages, error.errorInfo.code)) {
response = errorMessages[error.errorInfo.code];
}
}
console.error('[Failure] Error updating user meta:', error);
throw new functions.https.HttpsError(
response.code,
response.message,
response.details
);
});
};
module.exports = update;