OnboardingDataCollectionManager.mjs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import OnboardingDataCollectionModel from '../../models/OnboardingDataCollection.mjs'
  2. import OError from '@overleaf/o-error'
  3. const { OnboardingDataCollection, OnboardingDataCollectionSchema } =
  4. OnboardingDataCollectionModel
  5. async function getOnboardingDataCollection(userId, projection = {}) {
  6. try {
  7. return await OnboardingDataCollection.findOne(
  8. { _id: userId },
  9. projection
  10. ).exec()
  11. } catch (error) {
  12. throw OError.tag(error, 'Failed to get OnboardingDataCollection')
  13. }
  14. }
  15. async function getOnboardingDataValue(userId, key) {
  16. if (!OnboardingDataCollectionSchema.paths[key]) {
  17. throw new Error(`${key} is not a valid onboarding data key`)
  18. }
  19. const result = await getOnboardingDataCollection(userId, { [key]: 1 })
  20. return result ? result[key] : null
  21. }
  22. async function upsertOnboardingDataCollection({
  23. userId,
  24. firstName,
  25. lastName,
  26. usedLatex,
  27. primaryOccupation,
  28. companyDivisionDepartment,
  29. companyJobTitle,
  30. governmentJobTitle,
  31. institutionName,
  32. otherJobTitle,
  33. nonprofitDivisionDepartment,
  34. nonprofitJobTitle,
  35. role,
  36. subjectArea,
  37. updatedAt,
  38. }) {
  39. const odc = await OnboardingDataCollection.findOneAndUpdate(
  40. { _id: userId },
  41. {
  42. firstName,
  43. lastName,
  44. usedLatex,
  45. primaryOccupation,
  46. companyDivisionDepartment,
  47. companyJobTitle,
  48. governmentJobTitle,
  49. institutionName,
  50. otherJobTitle,
  51. nonprofitDivisionDepartment,
  52. nonprofitJobTitle,
  53. role,
  54. subjectArea,
  55. updatedAt,
  56. },
  57. { upsert: true }
  58. )
  59. return odc
  60. }
  61. function deleteOnboardingDataCollection(id) {
  62. return OnboardingDataCollection.deleteOne({ _id: id })
  63. }
  64. export default {
  65. getOnboardingDataCollection,
  66. upsertOnboardingDataCollection,
  67. deleteOnboardingDataCollection,
  68. getOnboardingDataValue,
  69. }