gfw-api/gfw-forms-api

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

Summary

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

const { Schema } = mongoose;
const { ObjectId } = Schema;

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

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

const Report = new Schema({
    name: { type: Schema.Types.Mixed, required: true, default: {} },
    user: { type: ObjectId, required: true },
    languages: { type: Array, required: true, default: false },
    defaultLanguage: { type: String, required: true, trim: true },
    public: { type: Boolean, required: true, default: false },
    createdAt: { type: Date, required: true, default: Date.now },
    status: {
        type: String, required: true, trim: true, default: 'unpublished'
    },
    questions: [ReportsQuestion]
});

mongoose.model('ReportsQuestion', ReportsQuestion);
module.exports = mongoose.model('Report', Report);