const mongoose = require('mongoose');
const models = require('@models');
const Endpoint = require('@src/models/settings/Endpoint');
const CRUD = require('@CRUD');
const UpdateDocument = models.routes.collection.UpdateDocument;
const Response = UpdateDocument.response;
/**
* Represents a controller endpoint for updating a document in a collection.
* @name CollectionUpdateDocument
* @type {Endpoint}
*/
module.exports = new Endpoint({
method: 'POST',
routePath: '/collection/update/document',
isAuthRoute: true,
bodySchema: {
updateType: {
type: String,
default: 'one',
enum: ['one', 'many']
},
collectionName: {
type: String,
required: true
},
data: {
type: Object,
required: true
},
filter: {
required: true,
type: mongoose.SchemaTypes.Mixed
},
options: {
default: {},
type: {
returnDocs: { type: Boolean },
mongooseOpt: { type: Object }
}
}
},
controller: async (req, res) => {
const body = req.body;
try {
body.data.sessionUser = req.session.currentUser;
const updated = await CRUD.update(body);
const response = new Response(updated, body.collection);
return res.status(200).json(response);
} catch(err) {
const error = new Error.Log(err).append('database.updating_document', body.filter);
return res.status(500).send(error);
}
}
});