models/note.js

/**
* Modelo de productos y validaciones
* @module NoteModel
*/

/**
 * Note
 * @typedef {Object} Note
 * @property {number} id_nota identificador de la nota
 * @property {string} descripcion_nota descripcion de la nota
 * @property {string} creacion timestamp de creacion de la nota
 * @property {string} fecha_entrega fecha de entrega de la nota
 * @property {number} id_cliente identificador del cliente de la nota
 * @property {number} userid identificador del usuario que crea la nota
 * @property {'EN_PROCESO'|'ENTREGADA'|'ACEPTADO'|'CANCELADA'|'POSPUESTO'} status estado de entrega
*/
const { PATTERNS } = require('../util-functions/string');

/** @type Note */
const NOTE_MODEL = Object.freeze({
    // id_nota: 0,
    descripcion_nota: '',
    fecha_entrega: '',
    userid: 0,
    id_cliente: 0,
    status: 'ACEPTADO'
});

/**
 * valida si el contenido de la nota es correcto
 * @param {Note} note nota a validar
 * @returns {boolean} 
 */
function validate( note ) {
    
    // validamos las propiedades
    let key = Array.from( Object.keys( NOTE_MODEL ) )
        .every( key => note.hasOwnProperty( key ) );
    

    
       // log de comprobacion de regex usar si alguna muestra falla
        
        console.log({
            key: key,
            //id_nota: Number.isInteger( note.id_nota ),
            id_cliente: Number.isInteger( note.id_cliente ),
            userid: Number.isInteger( note.userid ),
            descripcion_nota: PATTERNS.lettersAndNumbers.test( note.descripcion_nota ),
            status: (note.status === "ACEPTADO") || (note.status === "CANCELADA") || (note.status === "ENTREGADA")
                    || (note.status === "POSPUESTO") || (note.status === "EN_PROCESO")
        });

    

    // si hay propiedades aƱadidas o retiradas dentro del producto
    // lo rechaza
    if ( !key ) {
        return false;
    }

    // revisamos cada campo
    if ( !Number.isInteger( note.id_cliente ) ) {
        return false;
    }

    if ( !Number.isInteger( note.userid ) ) {
        return false;
    }

    if ( !PATTERNS.lettersAndNumbers.test( note.descripcion_nota ) ) {
        return false; 
    }

    switch ( note.status ) {
        case 'ACEPTADO':
            break;
        
        case 'CANCELADA':
            break;
        
        case 'ENTREGADA':
            break;
        
        case 'EN_PROCESO':
            break;

        case 'POSPUESTO':
            break;
        
        default:
            return false;
    }
    
    // si pasa las validaciones retorna true
    return true;
}

module.exports = { validate };