/**
* Modelo de productos y validaciones
* @module ProductModel
*/
/**
* Product
* @typedef {Object} Product
* @property {number} [productoid] identificador de producto
* @property {number} userid identificador de usuario
* @property {number} categoriaid identificador de categoria
* @property {string} nombre nombre del producto
* @property {string} descripcion descripcion de producto
* @property {number} precio precio del producto
* @property {number} cantidad cantidad de productos
* @property {boolean} disponibilidad disponibilidad de producto
*/
const { PATTERNS } = require('../util-functions/string');
/** @type {Product} */
const PRODUCT_MODEL = Object.freeze({
userid: 0,
categoriaid: 0,
nombre: '',
descripcion: '',
precio: 0,
cantidad: 0,
disponibilidad: false,
});
/**
* Valida la importacion de productos antes de mandar a base de datos
* @param {Product} product Producto a validar
* @returns {boolean}
*/
function validate( product ) {
// validamos las propiedades
let key = Array.from( Object.keys( PRODUCT_MODEL ) )
.every( key => product.hasOwnProperty( key ) );
/*
console.log({
key: key,
userid: Number.isInteger( product.userid ),
categoriaid: Number.isInteger( product.categoriaid ),
cantidad: Number.isInteger( product.cantidad ),
precio: { cond: typeof product.precio, valor: product.precio } ,
nombre: { cond: PATTERNS.lettersAndNumbers.test( product.nombre ), valor: product.nombre },
descipcion: { cond: PATTERNS.lettersAndNumbers.test( product.descripcion ), valor: product.descripcion },
disponibilidad: ( product.disponibilidad < 0 ) || ( product.disponibilidad > 1 )
});
*/
// revisamos cada campo
// si hay propiedades aƱadidas o retiradas dentro del producto
// lo rechaza
if ( !key ) {
return false;
}
if ( !Number.isInteger( product.userid ) ) {
return false;
}
if ( !Number.isInteger( product.categoriaid ) ) {
return false;
}
if ( !Number.isInteger( product.cantidad ) ) {
return false;
}
if ( typeof product.precio !== 'number' ) {
return false;
}
if ( !PATTERNS.lettersAndNumbers.test( product.nombre ) ) {
return false;
}
if ( !PATTERNS.lettersAndNumbers.test( product.descripcion ) ) {
return false;
}
// verificamos que la disponibilidad es un booleano
if ( ( product.disponibilidad < 0 ) || ( product.disponibilidad > 1 ) ) {
return false;
}
return true;
}
module.exports = {
validate
};