| Current Path : /var/node/inatote/Inatote-Backend/vendors/ |
| 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
}
}
}