Source: controllers/collection/get/doc.js

const mongoose = require('mongoose');
const models = require('@models');
const GetDoc = models.routes.collection.GetDoc;
const Response = GetDoc.response;
const CRUD = require('@services/database/crud');
const Endpoint = require('@src/models/settings/Endpoint');

/**
 * Represents a controller endpoint for getting a document in a collection.
 * @name CollectionGetDoc
 * @type {Endpoint}
 */
module.exports = new Endpoint({
    method: 'GET',
    routePath: '/collection/get/doc',
    isAuthRoute: true,
    bodySchema: {
        collectionName: {
            type: String,
            required: true
        },
        filter: {
            type: mongoose.SchemaTypes.Mixed,
            required: true
        },
        options: {
            default: {},
            type: {
                paginate: {
                    views: { type: Number },
                    page: { type: Number },
                    seeMore: { type: Boolean }
                },
                select: {
                    default: [],
                    type: Array
                },
                populate: {
                    type: Object
                }
            }
        }
    },
    controller: async (req, res) => {
        try {
            const body = req.body;
            const {populate, select} = body.options || {};
            const queryDoc = CRUD.getDoc(body);
    
            if (populate) {
                queryDoc.populateAll(populate);
            }

            queryDoc.select(select);
    
            const execute = await queryDoc.exec();
            const response = new Response(execute, body);
    
            return res.status(200).json(response);
        } catch(err) {
            const error = new Error.Log(err).append('apiResponse.collection.get.doc')
            res.status(500).send(error);
        }
    }
});