| Current Path : /var/node/inatote/Inatote-Backend/search/ |
| Current File : /var/node/inatote/Inatote-Backend/search/search-endpoints.js |
import {
UniqueConstraintError,
InvalidPropertyError,
RequiredParameterError,
ApiTokenError,
AuthorizationTokenError
} from '../helpers/errors.js'
import makeHttpError from '../helpers/http-error.js'
// import makeProduct from './product.js'
import multer from 'multer'
import validateHeaders from '../helpers/validate-headers.js'
import config from '../config.js'
var Storage = multer.diskStorage({
destination: function (httpRequest, file, callback) {
callback(null, `./static/images`)
}
})
var upload = multer({
storage: Storage
}).array("imageURL", 2)
export default function makesearchEndpointHandler({ searchList }) {
return async function handle(httpRequest) {
//console.log("httpRequest" ,httpRequest.path);
switch (httpRequest.path) {
// case 'POST':
// return postproduct(httpRequest)
case '/':
return getItems(httpRequest)
// case 'DELETE':
// return deleteproduct(httpRequest)
// case 'PUT':
// return updateproduct(httpRequest)
// case 'PATCH':
// return replaceproduct(httpRequest)
default:
return makeHttpError({
statusCode: 405,
errorMessage: `${httpRequest.path} method not allowed.`
})
}
}
// todo
async function updateproduct(httpRequest) {
const { categoryId, id } = httpRequest.pathParams || {}
//console.log(categoryId)
//console.log(id)
let productInfo = httpRequest.body
//console.log(productInfo)
const result = await productList.update({ productId: id, categoryId: categoryId, product: productInfo })
return {
headers: config.app.headers,
statusCode: 200,
data: JSON.stringify(result)
}
}
// todo
async function replaceproduct(httpRequest) { }
// todo
async function postproduct(httpRequest) {
//console.log("httpRequest")
let productInfo = httpRequest.body
if (!productInfo) {
return makeHttpError({
statusCode: 400,
errorMessage: 'Bad request. No POST body.'
})
}
if (typeof httpRequest.body === 'string') {
try {
productInfo = JSON.parse(productInfo)
} catch {
return makeHttpError({
statusCode: 400,
errorMessage: 'Bad request. POST body must be valid JSON.'
})
}
}
try {
if (productInfo.sizes)
productInfo.sizes = JSON.parse(productInfo.sizes)
if (productInfo.ratings)
productInfo.ratings = JSON.parse(productInfo.ratings)
productInfo['imageURL'] = []
var d = Date.now()
for (var i = 0; i < httpRequest.req.files.length; i++) {
var file = httpRequest.req.files[i]
productInfo['imageURL'].push(file.fieldname + "_" + d + "_" + file.originalname)
}
upload(httpRequest.req, {}, function (err) {
if (err) {
//console.log("err")
//console.log(err)
throw new InvalidPropertyError("Something went wrong")
}
//console.log("success")
})
const product = makeProduct(productInfo)
const result = await productList.add(product)
return {
headers: config.app.headers,
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 getItems(httpRequest) {
// const { id } = httpRequest.pathParams || {}
const { name } = httpRequest.queryParams || {}
//console.log("name" , name);
const result = await searchList.getItems(name);
// : await productList.getItems({ max, page, categoryId })
//console.log("asanjnjn" , result)
return {
headers: config.app.headers,
statusCode: 200,
data: JSON.stringify(result)
}
}
// todo
async function deleteproduct(httpRequest) {
const { id } = httpRequest.pathParams || {}
const result = await productList.remove({ productId: id })
return {
headers: config.app.headers,
statusCode: 200,
data: JSON.stringify(result)
}
}
}