gfw-api/gfw-forms-api

View on GitHub
app/src/models/questionnaireModel.js

Summary

Maintainability
A
45 mins
Test Coverage
A
100%
const mongoose = require('mongoose');

const { Schema } = mongoose;

const QuestionConditional = new Schema({
    type: { type: String, required: true, trim: true },
    label: { type: Schema.Types.Mixed, required: true, trim: true },
    name: { type: String, required: true, trim: true },
    defaultValue: { type: String, required: false, trim: true },
    values: [{ type: String, required: true, trim: true }],
    required: { type: Boolean, required: true, default: false },
    order: { type: Number, required: false, default: false },
    conditionalValue: { type: String, required: false, trim: true }
});

const Question = new Schema({
    type: { type: String, required: true, trim: true },
    label: { type: String, required: true, trim: true },
    name: { type: String, required: true, trim: true },
    defaultValue: { type: String, required: false, trim: true },
    values: [{ type: String, required: true, trim: true }],
    required: { type: Boolean, required: true, default: false },
    order: { type: Number, required: false, default: false },
    childQuestions: [QuestionConditional],
    conditions: [{
        name: { type: String, required: false, trim: true },
        value: { type: String, required: false, trim: true },
    }]
});

const Questionnaire = new Schema({
    name: { type: String, required: true, trim: true },
    questions: [Question],
    createdAt: { type: Date, required: true, default: Date.now }
});

mongoose.model('Question', Question);
module.exports = mongoose.model('Questionnaire', Questionnaire);