You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
senzapaura_es/scripts/db/sembrar-animos.mjs

120 lines
3.1 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/**
* 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();

Powered by TurnKey Linux.