Your IP : 216.73.216.91


Current Path : /var/node/inatote/Inatote-Backend/vendors/
Upload File :
Current File : /var/node/inatote/Inatote-Backend/vendors/vendor.js

import requiredParam from '../helpers/required-param.js'
import { InvalidPropertyError } from '../helpers/errors.js'
import isValidEmail from '../helpers/is-valid-email.js'
import upperFirst from '../helpers/upper-first.js'
import makevendorList from './vendor-list.js'

export default function makeVendor(vendorInfo = requiredParam('vendorInfo')) {
    //console.log("vendorInfo" , vendorInfo);
    const validVendor = validate(vendorInfo)
    const normalVendor = normalize(validVendor)
    return Object.freeze(normalVendor)

    function validate({
        vendorID = requiredParam('vendorID'),
        vendorName = requiredParam('vendorName'),
        mainAddress = requiredParam('mainAddress'),
        location = requiredParam('location'),
        contacts = requiredParam('contacts'),

        ...otherInfo
    } = {}) {
        validateVendorName(vendorName)
        validateVendorID(vendorID)
        // validateLocation(location)
        // validateContact(contacts)

        return { vendorID, vendorName, mainAddress, location, contacts, ...otherInfo }
    }


    function validateVendorName(name) {
        if (name.length < 3) {
            throw new InvalidPropertyError(
                `A vendor's name must be at least 3 characters long.`
            )
        }
    }

    function validateVendorID(vendorID) {
        if (!isValidEmail(vendorID)) {
            throw new InvalidPropertyError('Invalid vendor email address.')
        }
    }

    function validateLocation(location) {

        if (!location['type'])
            throw new InvalidPropertyError('location type field required.')

        if (!location['coordinates'] || location['coordinates'].length < 2)
            throw new InvalidPropertyError('Invalid location coordinates.')
    }

    function validateContact(contacts) {
        if (!contacts) {
            throw new InvalidPropertyError('Vendor contact information required.')
        }

        if (!contacts['emailAddress']) {
            throw new InvalidPropertyError('Vendor support email required.')
        }

        if (!isValidEmail(contacts['emailAddress'])) {
            throw new InvalidPropertyError('Invalid email address.')
        }

        if (!contacts['phone']) {
            throw new InvalidPropertyError('Vendor support phone number required.')
        }
    }

    function normalize({ vendorID, vendorName, ...otherInfo }) {
        console.log("Normalize" ,otherInfo.isEnabled ? true : false );
        return {
            ...otherInfo,
            vendorID: vendorID.toLowerCase(),
            vendorName: upperFirst(vendorName),
            ratingAverage : otherInfo.ratingAverage > 0?otherInfo.ratingAverage : 0,
            ratingCount : otherInfo.ratingCount > 0?otherInfo.ratingCount : 0,
            ratingSum : otherInfo.ratingSum > 0? otherInfo.ratingSum : 0,
            is_deleted : otherInfo.is_deleted ? true : false,
            isEnabled : otherInfo.isEnabled ? true : false
        }
    }
}