UNPKG

@infect/infect-rda-sample-storage

Version:

INFECT Sample Storage for RDA

119 lines (82 loc) 3.54 kB
import { Controller } from '@infect/rda-service'; import type from 'ee-types'; import log from 'ee-log'; export default class DataVersionController extends Controller { constructor({db}) { super('data-version'); this.db = db; this.enableAction('update'); this.enableAction('create'); this.enableAction('listOne'); } /** * returns on edata evrsion * * @return {Promise} data version */ async listOne(request) { const version = await this.db.dataVersion('*', { sourceHash: request.getParameter('id'), }).findOne(); if (version) request.response().status(200).send(); else request.response().status(404).send(); } /** * register a new version */ async create(request) { const data = await request.getData(); if (!data) request.response().status(400).send(`Missing request body!`); else if (!type.object(data)) request.response().status(400).send(`Request body must be a json object!`); else if (!type.string(data.dataSet)) request.response().status(400).send(`Missing parameter 'dataSet' in request body!`); else { // make sure the data set exists let dataSet = await this.db.dataSet('*', { identifier: data.dataSet }).findOne(); if (!dataSet) { dataSet = await new this.db.dataSet({ identifier: data.dataSet, }).save(); } // create a new data version return new this.db.dataVersion({ identifier: data.identifier || null, description: data.description || null, dataVersionStatus: this.db.dataVersionStatus('*', { identifier: 'building' }), dataSet: dataSet, sourceHash: data.sourceHash, }).save(); } } /** *set status on data version */ async update(request) { const data = await request.getData(); const dataVersionIdentifier = request.parameter('id'); if (!data) request.response().status(400).send(`Missing request body!`); else if (!type.object(data)) request.response().status(400).send(`Request body must be a json object!`); else if (!type.string(data.status)) request.response().status(400).send(`Missing parameter 'status' in request body!`); else { const filter = {}; // let the user filter by identifier and id if (!/^[0-9]/.test(dataVersionIdentifier)) filter.identifier = dataVersionIdentifier; else filter.id = dataVersionIdentifier; // load the data version to update let dataVersion = await this.db.dataVersion('*', filter).findOne(); if (dataVersion) { // get status const dataVersionStatus = await this.db.dataVersionStatus({ identifier: data.status }).findOne(); if (dataVersionStatus) { dataVersion.dataVersionStatus = dataVersionStatus; return await dataVersion.save(); } else request.response().status(404).send(`The data version status '${dataVersionIdentifier}' was not found!`); } else request.response().status(404).send(`The data version '${dataVersionIdentifier}' was not found!`); } } }