fragments / src / routes / api / put.js
put.js
Raw
// src/routes/api/get.js

// Use crypto.randomUUID() to create unique IDs, see:
// https://nodejs.org/api/crypto.html#cryptorandomuuidoptions

const { Fragment } = require('../../model/fragment');
const logger = require('../../logger');

const createSuccessResponse = require('../../response').createSuccessResponse;
const createErrorResponse = require('../../response').createErrorResponse;

const apiURL = process.env.API_URL;


module.exports = async (req, res) => {

    if (!Buffer.isBuffer(req.body)) {
        return res.status(415).json(createErrorResponse(415, 'Unsupported Type'));
    }   
    try{
        const fragmentID = req.params.id.split('.')[0];

		logger.debug(`fragment id:  ${fragmentID}`);

		const fragmentById = new Fragment(await Fragment.byId(req.user, fragmentID));

        if (fragmentById.type !== req.get('Content-Type')) {
			return res
				.status(400)
				.json(createErrorResponse(400, "Content type doesn't match the existing fragment's type"));
		}

        fragmentById.updated = new Date();
		await fragmentById.setData(req.body);
        
    
        logger.info({ fragmentById }, '==== Successfully update a new Fragment ====');
    
        const host = (`http://${req.headers.host}`) || apiURL;
        res.setHeader('Location', `${host}/v1/fragments/${fragmentById.id}`);
    
        let Location = host + '/v1/fragments/' + fragmentById.id;
        logger.info(Location, '==== Successfully generate Location====');
    
        const response = createSuccessResponse({ fragments: fragmentById});
        res.status(200).json(response);
    }
    catch(err){
        logger.error(err.message, 'Something went wrong...');
			res.status(404).json(createErrorResponse(404, err.message));
    }
};