Survey.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. const mongoose = require('../infrastructure/Mongoose')
  2. const { Schema } = mongoose
  3. const MIN_NAME_LENGTH = 3
  4. const MAX_NAME_LENGTH = 200
  5. const NAME_REGEX = /^[a-z0-9-]+$/
  6. const SurveySchema = new Schema(
  7. {
  8. name: {
  9. type: String,
  10. minLength: MIN_NAME_LENGTH,
  11. maxlength: MAX_NAME_LENGTH,
  12. required: true,
  13. validate: {
  14. validator: function (input) {
  15. return input !== null && NAME_REGEX.test(input)
  16. },
  17. message: `invalid, must match: ${NAME_REGEX}`,
  18. },
  19. },
  20. title: {
  21. type: String,
  22. required: true,
  23. },
  24. text: {
  25. type: String,
  26. required: true,
  27. },
  28. cta: {
  29. type: String,
  30. required: false,
  31. },
  32. url: {
  33. type: String,
  34. required: true,
  35. },
  36. options: {
  37. hasRecurlyGroupSubscription: {
  38. type: Boolean,
  39. default: false,
  40. },
  41. earliestSignupDate: {
  42. type: Date,
  43. },
  44. latestSignupDate: {
  45. type: Date,
  46. },
  47. rolloutPercentage: {
  48. type: Number,
  49. default: 100,
  50. },
  51. excludeLabsUsers: {
  52. type: Boolean,
  53. default: false,
  54. },
  55. },
  56. },
  57. {
  58. collection: 'surveys',
  59. minimize: false,
  60. }
  61. )
  62. module.exports = {
  63. Survey: mongoose.model('Survey', SurveySchema),
  64. SurveySchema,
  65. }