CloudScrapy / controllers / fileController.js
fileController.js
Raw
const Screenshot = require("../models/screenshotModel");
const Log = require("../models/logModel");
const Pdf = require("../models/pdfModel");
const os = require("os");
const logger = require('../utils/logger')("")
const fs = require('fs')
const config = require("config");
const {LOGIN_REGISTER_ERRORS} = require("../utils/constants");
const {images_path, logs_path, pdf_path} = config.get('paths')


function FileController() {

    async function getScreenshot(req, res) {
        const imageName = req.params.screenshotName
        const image = `${images_path}${imageName}`
        fs.readFile(image, function (err, data) {
            if (err) {
                return res.status(404).send({
                    code: 404,
                    message: "File not found"
                });
            } else {
                res.writeHead(200, {'Content-Type': 'image/jpg'});
                res.write(data)
                return res.end(data)
            }
        });
    }

    async function getPdf(req, res) {
        const pdfName = req.params.pdfName
        const pdf = `${pdf_path}${pdfName}`
        fs.readFile(pdf, function (err, data) {
            if (err) {
                return res.status(404).send({
                    code: 404,
                    message: "File not found"
                });
            } else {
                res.writeHead(200, {'Content-Type': 'application/pdf'});
                res.write(data)
                return res.end(data)
            }
        });
    }

    async function getLog(req, res) {
        const logName = req.params.logName
        const log = `${logs_path}${logName}`
        fs.readFile(log, function (err, data) {
            if (err) {
                return res.status(404).send({
                    code: 404,
                    message: "File not found"
                });
            } else {
                res.writeHead(200, {'Content-Type': 'text/plain'});
                res.write(data)
                return res.end(data)
            }
        });
    }

    async function getScreenshotInfo(req, res) {
        try {
            const requestId = req.params.screenshotRequestId
            let response = {
                hostname: os.hostname()
            }
            Screenshot.findOne({idRequest: requestId}).lean().exec(function (err, doc) {
                if (doc !== null) {
                    response['message'] = `Screenshot fetched correctly`
                    response['code'] = 200
                    response['screenshot'] = doc
                    logger.info(`Document ${JSON.stringify(doc)} fetched correctly`)
                    return res.status(200).send(response);
                } else {
                    response['code'] = 404
                    response['message'] = `Screenshot not found`
                    return res.status(404).send(response);
                }
            });
        } catch (error) {
            logger.error(error.toString())
            return res.status(500).json({
                hostname: os.hostname(),
                code: LOGIN_REGISTER_ERRORS.INTERNAL_SERVER_ERROR.code,
                message: LOGIN_REGISTER_ERRORS.INTERNAL_SERVER_ERROR.message,
                error: {error: JSON.stringify(error)}
            })
        }
    }

    async function getPdfInfo(req, res) {
        try {
            const requestId = req.params.pdfRequestId
            let response = {
                hostname: os.hostname()
            }
            Pdf.findOne({idRequest: requestId}).lean().exec(function (err, doc) {
                if (doc !== null) {
                    response['message'] = `Pdf fetched correctly`
                    response['code'] = 200
                    response['pdf'] = doc
                    logger.info(`Document ${JSON.stringify(doc)} fetched correctly`)
                    return res.status(200).send(response);
                } else {
                    response['code'] = 404
                    response['message'] = `Pdf not found`
                    return res.status(404).send(response);
                }
            });
        } catch (error) {
            logger.error(error.toString())
            return res.status(500).json({
                hostname: os.hostname(),
                code: LOGIN_REGISTER_ERRORS.INTERNAL_SERVER_ERROR.code,
                message: LOGIN_REGISTER_ERRORS.INTERNAL_SERVER_ERROR.message,
                error: {error: JSON.stringify(error)}
            })
        }
    }

    async function getLogInfo(req, res) {
        try {
            const requestId = req.params.logRequestId
            let response = {
                hostname: os.hostname(),
            }
            Log.findOne({idRequest: requestId}).lean().exec(function (err, doc) {
                if (doc !== null) {
                    response['message'] = `Log fetched correctly`
                    response['code'] = 200
                    response['log'] = doc
                    logger.info(`Document ${JSON.stringify(doc)} fetched correctly`)
                    return res.status(200).send(response);
                } else {
                    response['code'] = 404
                    response['message'] = `Log not found`
                    return res.status(404).send(response);
                }
            });
        } catch (error) {
            logger.error(error.toString())
            return res.status(500).json({
                hostname: os.hostname(),
                code: LOGIN_REGISTER_ERRORS.INTERNAL_SERVER_ERROR.code,
                message: LOGIN_REGISTER_ERRORS.INTERNAL_SERVER_ERROR.message,
                error: {error: JSON.stringify(error)}
            })
        }
    }

    return Object.freeze({
        getScreenshot,
        getPdf,
        getLog,
        getScreenshotInfo,
        getPdfInfo,
        getLogInfo
    })

}

module.exports = FileController()