Your IP : 216.73.216.91


Current Path : /var/node/inatote/Inatote-Backend/categories/
Upload File :
Current File : /var/node/inatote/Inatote-Backend/categories/categories-endpoint.js

import {
    UniqueConstraintError,
    InvalidPropertyError,
    RequiredParameterError
} from '../helpers/errors.js'
import makeHttpError from '../helpers/http-error.js'
import makeCategory from './category.js'
import validateHeaders from '../helpers/validate-headers.js'

export default function makeCategoriesEndpointHandler({ categoryList }) {
    return {
        postcategory: postcategory,
        getcategories : getcategorys,
        deletecategory : deletecategory,
        updatecategory : updatecategory
    }
    // return async function handle(httpRequest) {

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

    //         case 'GET':
    //             return getcategorys(httpRequest)

    //         case 'DELETE':
    //             return deletecategory(httpRequest)

    //         case 'PUT':
    //             return updatecategory(httpRequest)

    //         case 'PATCH':
    //             return replacecategory(httpRequest)

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

    // todo
    async function updatecategory(req , res) { 
        let category_id = req.params.id
        let categoryInfo = req.body;
        if (!categoryInfo) {
            return makeHttpError({
                statusCode: 400,
                errorMessage: 'Bad request. No POST body.'
            })
        }

        if (typeof req.body === 'string') {
            try {
                categoryInfo = JSON.parse(categoryInfo)
            } catch {
                return makeHttpError({
                    statusCode: 400,
                    errorMessage: 'Bad request. POST body must be valid JSON.'
                })
            }
        }
    
    try {
        let files = []
        if(req.files && req.files.length > 0){
            let imageFile = req.files;
            imageFile.map(f=>{
                files = [...files  , f.path]
            })
            categoryInfo.imageURL = files;
        }
        if(Object.keys(categoryInfo).includes("isEnabled")){
            categoryInfo.isEnabled = categoryInfo.isEnabled == "true" || categoryInfo.isEnabled == true ? true : false
        }
        //console.log("category" , categoryInfo); 
        const category =categoryInfo
        const result = await categoryList.update({categoryId : category_id  , category: category });
        return res.status(200).json({
            headers: {
                'Content-Type': 'application/json'
            },
            statusCode: 201,
            data:result
        })
    } catch (e) {
        //console.log("e" , e);
        return res.status(400).json({
            errorMessage: e.message ? e.message : e,
            statusCode:
                e instanceof UniqueConstraintError
                    ? 409
                    : e instanceof InvalidPropertyError ||
                        e instanceof RequiredParameterError
                        ? 400
                        : 500
        })
    }


    }

    // todo
    async function replacecategory(httpRequest) { }

    // todo
    async function postcategory(req , res) {
        let categoryInfo = req.body
        if (!categoryInfo) {
            return makeHttpError({
                statusCode: 400,
                errorMessage: 'Bad request. No POST body.'
            })
        }

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


        try {
            let files = []
            if(req.files && req.files.length > 0){
                let imageFile = req.files;
                imageFile.map(f=>{
                    files = [...files  , f.path]
                })
            }
            categoryInfo.imageURL = files;
            categoryInfo.products = [];
            //console.log("category" , categoryInfo); 
            const category = makeCategory(categoryInfo)
            const result = await categoryList.add(category)
            return res.status(200).json({
                headers: {
                    'Content-Type': 'application/json'
                },
                statusCode: 201,
                data:result
            })
        } catch (e) {
            //console.log("e" , e);
            return res.status(400).json({
                errorMessage: e.message ? e.message : e,
                statusCode:
                    e instanceof UniqueConstraintError
                        ? 409
                        : e instanceof InvalidPropertyError ||
                            e instanceof RequiredParameterError
                            ? 400
                            : 500
            })
        }
    }

    // todo
    async function getcategorys(req , res) {
        const { id } = req.params || {}
        const { max, before, after } = req.query || {}

        const result = id
            ? await categoryList.findById({ categoryId: id })
            : await categoryList.getItems({ max, before, after })
        return res.status(200).json({
            headers: {
                'Content-Type': 'application/json'
            },
            statusCode: 200,
            data: result
        })
    }

    // todo
    async function deletecategory(req , res) {
        const { id } = req.params || {}

        const result = await categoryList.remove({ categoryId: id })

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

}