/** * Siembra los ánimos. * * npm run db:animos * * Son los nueve factores de la **GEMS** (*Geneva Emotional Music Scale*), que es * una escala hecha para emoción musical y no para emoción en general: por eso * tiene «trascendencia» y «nostalgia» y no tiene «miedo» ni «asco». * * Cada uno lleva además los dos ejes del modelo circumplejo de Russell: * valencia —si tira a agradable o a desagradable— y energía. Sirven para * ordenar, para interpolar entre dos ánimos, y sobre todo porque son * redactables: «alta energía, valencia baja» es una instrucción que una IA * entiende; «tensión» a secas, no. * * Idempotente por código: volver a lanzarlo actualiza y no duplica. */ import pg from 'pg'; /** `valencia` va de −1 a 1 y `energia` de 0 a 100, como dice el esquema. */ const ANIMOS = [ { codigo: 'asombro', nombre: 'Asombro', gems: 'wonder', valencia: 1, energia: 60, descripcion: 'Lo que abre los ojos. Deslumbra sin arrollar.' }, { codigo: 'trascendencia', nombre: 'Trascendencia', gems: 'transcendence', valencia: 1, energia: 45, descripcion: 'Sacar a alguien de sí mismo. Lo solemne sin lo grandilocuente.' }, { codigo: 'ternura', nombre: 'Ternura', gems: 'tenderness', valencia: 1, energia: 30, descripcion: 'El cariño dicho de cerca y en voz baja.' }, { codigo: 'nostalgia', nombre: 'Nostalgia', gems: 'nostalgia', valencia: 0, energia: 30, descripcion: 'Lo que se recuerda con gusto y duele un poco. La valencia va en medio a propósito.' }, { codigo: 'serenidad', nombre: 'Serenidad', gems: 'peacefulness', valencia: 1, energia: 20, descripcion: 'Calma sin sueño. Nada que resolver.' }, { codigo: 'fuerza', nombre: 'Fuerza', gems: 'power', valencia: 1, energia: 85, descripcion: 'Empuje, triunfo, ganas. Lo que se canta de pie.' }, { codigo: 'alegria-vital', nombre: 'Alegría vital', gems: 'joyful activation', valencia: 1, energia: 80, descripcion: 'Alegría que mueve el cuerpo. Es la de bailar, no la de sonreír.' }, { codigo: 'tension', nombre: 'Tensión', gems: 'tension', valencia: -1, energia: 75, descripcion: 'Nervio, inquietud, algo a punto de pasar.' }, { codigo: 'tristeza', nombre: 'Tristeza', gems: 'sadness', valencia: -1, energia: 20, descripcion: 'La pena quieta. En un bolero, la de siempre.' } ]; const c = new pg.Client({ connectionString: process.env.DATABASE_URL, query_timeout: 15_000 }); await c.connect(); let nuevos = 0; for (const a of ANIMOS) { const { rows } = await c.query( `insert into animo (id, codigo, nombre, gems, valencia, energia, descripcion) values (gen_random_uuid(), $1, $2, $3, $4, $5, $6) on conflict (codigo) do update set nombre = excluded.nombre, gems = excluded.gems, valencia = excluded.valencia, energia = excluded.energia, descripcion = excluded.descripcion returning (xmax = 0) as insertado`, [a.codigo, a.nombre, a.gems, a.valencia, a.energia, a.descripcion] ); if (rows[0].insertado) nuevos++; } console.log(`${ANIMOS.length} ánimos: ${nuevos} nuevos, ${ANIMOS.length - nuevos} actualizados.`); await c.end();