diff --git a/core/entity/base-schema.js b/core/entity/base-schema.js index 79a0865b..6ed31d5f 100644 --- a/core/entity/base-schema.js +++ b/core/entity/base-schema.js @@ -3,7 +3,7 @@ const util = require('util') const mongoose = require('mongoose') const Schema = mongoose.Schema -const lifecicle = require('mongoose-lifecycle') +const lifecycle = require('mongoose-lifecycle') const FetchBy = require('../lib/fetch-by'); const baseProperties = require('./base-schema-properties') @@ -31,7 +31,7 @@ function BaseSchema (props, specs) { this.set('toJSON' , def) this.set('toObject', def) - this.plugin(lifecicle) + this.plugin(lifecycle) this.statics.fetchBy = function (filter, next) { FetchBy.call(this,filter,next) diff --git a/core/entity/test/index.js b/core/entity/test/index.js new file mode 100644 index 00000000..21c38d86 --- /dev/null +++ b/core/entity/test/index.js @@ -0,0 +1,51 @@ +const mongoose = require('mongoose') +const ObjectId = mongoose.Schema.Types.ObjectId +const apiFetch = require('../api-fetch') +const db = require('../../lib/mongodb').db +const BaseSchema = require('../base-schema') + +module.exports = function () { + const Test = db.model('Test', new Schema()) + + const TaskTest = Test.discriminator( + 'TaskTest', + new Schema({ + task_id: ObjectId, + task: { type: ObjectId, ref: 'Task' }, + }) + ) + + const WorkflowTest = Test.discriminator( + 'WorkflowTest', + new Schema({ + workflow_id: { type: ObjectId }, + workflow: { type: ObjectId, ref: 'Workflow' }, + }) + ) + + return { Test, TaskTest, WorkflowTest } +} + +function Schema (props = {}) { + const schema = new BaseSchema( + Object.assign({ + order: { type: Number, default: 0 }, + name: { type: String, required: true }, + tags: { type: Array }, + description : { type: String }, + task_arguments: { type: Array }, // input parameters + task_outputs: { type: Array }, // output parameters + customer: { type: ObjectId, ref: 'Customer' }, + customer_id: { type: String, required: true }, + creation_date: { type: Date, default: () => { return new Date() }, required: true }, + last_update: { type: Date, default: () => { return new Date() }, required: true } + }, props), { + collection: 'tests', + discriminatorKey: '_type' + } + ) + + schema.statics.apiFetch = apiFetch + + return schema +}