resource-watch/doc-orchestrator

View on GitHub
app/src/models/task.model.js

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
const mongoose = require('mongoose');
const uuidV4 = require('uuid/v4');
const { task } = require('rw-doc-importer-messages');
const { TASK_STATUS } = require('app.constants');
const mongoosePaginate = require('mongoose-paginate');

const { Schema } = mongoose;
const { MESSAGE_TYPES } = task;

const Log = new Schema({
    type: { type: String, required: true },
    taskId: { type: String, required: false },
    file: { type: String, required: false },
    hash: { type: String, required: false },
    index: { type: String, required: false },
    withErrors: { type: Boolean, required: false },
    detail: { type: Schema.Types.Mixed, required: false },
    elasticTaskId: { type: String, required: false },
    elasticTaskStatus: { type: Schema.Types.Mixed, required: false },
}, { _id: false, strict: false });

const Task = new Schema({
    _id: { type: String, default: uuidV4 },
    type: { type: String, enum: Object.keys(MESSAGE_TYPES), default: MESSAGE_TYPES.EXECUTION_CREATE },
    message: { type: Schema.Types.Mixed },
    status: { type: String, enum: Object.keys(TASK_STATUS), default: TASK_STATUS.INIT },
    filesProcessed: { type: Number, min: 0, default: 0 },
    reads: { type: Number, min: 0, default: 0 },
    writes: { type: Number, min: 0, default: 0 },
    createdAt: { type: Date, default: Date.now },
    updatedAt: { type: Date, default: Date.now },
    index: { type: String, trim: true },
    elasticTaskId: { type: String, trim: true },
    datasetId: { type: String, trim: true },
    logs: [{ type: Log }],
    error: { type: String, trim: true }
});

Task.plugin(mongoosePaginate);

module.exports = mongoose.model('Task', Task);