Files
overleaf-cep/services/web/app/src/Features/OnboardingDataCollection/OnboardingDataCollectionManager.mjs
T
Andrew Rumble 0f4d5a7be6 Rename files
GitOrigin-RevId: 80b975b03ebca16328b84fabf11e71bbea87c8bc
2025-11-06 09:05:41 +00:00

78 lines
1.7 KiB
JavaScript

const {
OnboardingDataCollection,
OnboardingDataCollectionSchema,
} = require('../../models/OnboardingDataCollection')
const OError = require('@overleaf/o-error')
async function getOnboardingDataCollection(userId, projection = {}) {
try {
return await OnboardingDataCollection.findOne(
{ _id: userId },
projection
).exec()
} catch (error) {
throw OError.tag(error, 'Failed to get OnboardingDataCollection')
}
}
async function getOnboardingDataValue(userId, key) {
if (!OnboardingDataCollectionSchema.paths[key]) {
throw new Error(`${key} is not a valid onboarding data key`)
}
const result = await getOnboardingDataCollection(userId, { [key]: 1 })
return result ? result[key] : null
}
async function upsertOnboardingDataCollection({
userId,
firstName,
lastName,
usedLatex,
primaryOccupation,
companyDivisionDepartment,
companyJobTitle,
governmentJobTitle,
institutionName,
otherJobTitle,
nonprofitDivisionDepartment,
nonprofitJobTitle,
role,
subjectArea,
updatedAt,
}) {
const odc = await OnboardingDataCollection.findOneAndUpdate(
{ _id: userId },
{
firstName,
lastName,
usedLatex,
primaryOccupation,
companyDivisionDepartment,
companyJobTitle,
governmentJobTitle,
institutionName,
otherJobTitle,
nonprofitDivisionDepartment,
nonprofitJobTitle,
role,
subjectArea,
updatedAt,
},
{ upsert: true }
)
return odc
}
function deleteOnboardingDataCollection(id) {
return OnboardingDataCollection.deleteOne({ _id: id })
}
module.exports = {
getOnboardingDataCollection,
upsertOnboardingDataCollection,
deleteOnboardingDataCollection,
getOnboardingDataValue,
}