Your IP : 216.73.216.91


Current Path : /var/node/inatote/qa_inatote/configurations/
Upload File :
Current File : /var/node/inatote/qa_inatote/configurations/configuration-endpoint.js

import {
    UniqueConstraintError,
    InvalidPropertyError,
    RequiredParameterError
} from '../helpers/errors.js'
import makeHttpError from '../helpers/http-error.js'
import makeConfiguration from './configuration.js'

export default function makeConfigurationEndpointHandler({ configurationList }) {
    return async function handle(httpRequest) {
        //console.log(httpRequest.method)

        switch (httpRequest.method) {
            case 'POST':
                return postConfiguration(httpRequest)

            case 'GET':
                return getConfiguration(httpRequest)

            case 'DELETE':
                return deleteConfiguration(httpRequest)

            case 'PUT':
                return updateConfiguration(httpRequest)

            case 'PATCH':
                return replacerateCharge(httpRequest)

            default:
                return makeHttpError({
                    statusCode: 405,
                    errorMessage: `${httpRequest.method} method not allowed.`
                })
        }
    }


    // todo
    async function updateConfiguration(httpRequest) {
        const { id } = httpRequest.pathParams || {}

        const result = await configurationList.update({ configurationId: id, configuration: httpRequest.body })

        return {
            headers: {
                'Content-Type': 'application/json'
            },
            statusCode: 200,
            data: JSON.stringify(result)
        }
    }

    // todo
    async function replacerateCharge(httpRequest) { }

    // todo
    async function postConfiguration(httpRequest) {
        let configurationInfo = httpRequest.body
        if (!configurationInfo) {
            return makeHttpError({
                statusCode: 400,
                errorMessage: 'Bad request. No POST body.'
            })
        }

        if (typeof httpRequest.body === 'string') {
            try {
                configurationInfo = JSON.parse(configurationInfo)
            } catch {
                return makeHttpError({
                    statusCode: 400,
                    errorMessage: 'Bad request. POST body must be valid JSON.'
                })
            }
        }


        try {
            const configuration = makeConfiguration(configurationInfo)
            const result = await configurationList.add(configuration)
            return {
                headers: {
                    'Content-Type': 'application/json'
                },
                statusCode: 201,
                data: JSON.stringify(result)
            }
        } catch (e) {
            return makeHttpError({
                errorMessage: e.message,
                statusCode:
                    e instanceof UniqueConstraintError
                        ? 409
                        : e instanceof InvalidPropertyError ||
                            e instanceof RequiredParameterError
                            ? 400
                            : 500
            })
        }
    }

    // todo
    async function getConfiguration(httpRequest) {
        const { id } = httpRequest.pathParams || {}
        const { max, before, after } = httpRequest.queryParams || {}

        const result = id
            ? await configurationList.findById({ configurationId: id })
            : await configurationList.getItems({ max, before, after })
        return {
            headers: {
                'Content-Type': 'application/json'
            },
            statusCode: 200,
            data: JSON.stringify(result)
        }
    }

    // todo
    async function deleteConfiguration(httpRequest) {
        const { id } = httpRequest.pathParams || {}

        const result = await configurationList.remove({ configurationId: id })

        return {
            headers: {
                'Content-Type': 'application/json'
            },
            statusCode: 200,
            data: JSON.stringify(result)
        }
    }
}