Your IP : 216.73.216.91


Current Path : /var/node/inatote/Inatote-Backend/search/
Upload File :
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)
        }
    }

}