| Current Path : /var/node/inatote/qa_inatote/configurations/ |
| 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)
}
}
}