questionnaire-order.ts 1.3 KB

1234567891011121314151617181920212223242526272829303132333435
  1. import type { Model, Document } from 'mongoose';
  2. import { Schema } from 'mongoose';
  3. import { getOrCreateModel } from '~/server/util/mongoose-utils';
  4. import type { IQuestionnaireOrder } from '../../interfaces/questionnaire-order';
  5. import conditionSchema from './schema/condition';
  6. import questionSchema from './schema/question';
  7. export interface QuestionnaireOrderDocument extends IQuestionnaireOrder, Document {}
  8. export type QuestionnaireOrderModel = Model<QuestionnaireOrderDocument>
  9. const questionnaireOrderTitleSchema = new Schema<IQuestionnaireOrder['title']>({
  10. ja_JP: { type: String, required: true },
  11. en_US: { type: String, required: true },
  12. }, { _id: false });
  13. const questionnaireOrderSchema = new Schema<QuestionnaireOrderDocument>({
  14. shortTitle: { type: questionnaireOrderTitleSchema, required: true },
  15. title: { type: questionnaireOrderTitleSchema, required: true },
  16. showFrom: { type: Date, required: true },
  17. showUntil: {
  18. type: Date,
  19. required: true,
  20. validate: [function(value) {
  21. return this.showFrom <= value;
  22. }, 'showFrom must be before showUntil'],
  23. },
  24. questions: [questionSchema],
  25. condition: { type: conditionSchema, required: true },
  26. }, { timestamps: true });
  27. export default getOrCreateModel<QuestionnaireOrderDocument, QuestionnaireOrderModel>('QuestionnaireOrder', questionnaireOrderSchema);