C. Carpeta « js / modelo »

Versión para imprimir.

1. js / modelo / Pasatiempo.js

1export class Pasatiempo {
2
3 /**
4 * @param { {
5 * uuid?: string,
6 * nombre?: string,
7 * modificacion?: number,
8 * eliminado?: boolean,
9 * } } modelo
10 */
11 constructor(modelo) {
12 this.nombre = modelo.nombre === undefined
13 ? ""
14 : modelo.nombre
15 this.uuid = modelo.uuid === undefined
16 ? ""
17 : modelo.uuid
18 this.modificacion = modelo.modificacion === undefined
19 ? NaN
20 : modelo.modificacion
21 this.eliminado = modelo.eliminado === undefined
22 ? true
23 : modelo.eliminado
24 }
25
26 validaNuevo() {
27 if (this.nombre === "")
28 throw new Error("Falta el nombre.")
29 }
30
31 valida() {
32 if (this.uuid === "")
33 throw new Error("Falta el uuid.")
34 if (this.nombre === "")
35 throw new Error("Falta el nombre.")
36 }
37
38}
39
40// Permite que los eventos de html usen la clase.
41window["Pasatiempo"] = Pasatiempo

2. js / modelo / recuperaPasatiempo.js

1import { Pasatiempo } from "./Pasatiempo.js"
2import {
3 validaPasatiempo
4} from "./validaPasatiempo.js"
5
6/** @param { any } objeto */
7export function recuperaPasatiempo(objeto) {
8 const validado = validaPasatiempo(objeto)
9 return new Pasatiempo({
10 uuid: validado.uuid,
11 nombre: validado.nombre,
12 modificacion: validado.modificacion,
13 eliminado: validado.eliminado,
14 })
15}

3. js / modelo / validaPasatiempo.js

1/**
2 * @param { any } objeto
3 * @returns { {
4 * uuid: string,
5 * nombre: string,
6 * modificacion: number,
7 * eliminado: boolean,
8 * } }
9 */
10export function validaPasatiempo(objeto) {
11
12 if (typeof objeto.uuid !== "string")
13 throw new Error("El uuid debe ser texto.")
14
15 if (typeof objeto.nombre !== "string")
16 throw new Error("El nombre debe ser texto.")
17
18 if (typeof objeto.modificacion !== "number")
19 throw new Error("El campo modificacion debe ser número.")
20
21 if (typeof objeto.eliminado !== "boolean")
22 throw new Error("El campo eliminado debe ser booleano.")
23
24 return objeto
25
26}