crea-fascicolo: aprire il fascicolo di chi ha gia' un account
"Anche un admin deve avere il suo referto" (Adriano). Il codice lo permetteva gia': il referto si aggancia all'utente, non al ruolo. Mancava il modo di creare la riga che lega utente e fascicolo senza passare da seed-demo, che inventa anche la persona e le risposte. Non indovina niente: --sesso e' obbligatorio perche' entra nelle curve dei punteggi, la data di nascita si puo' omettere e allora l'eta' resta vuota - meglio un campo vuoto di una data plausibile e falsa. Si ferma se quell'utente ha gia' un fascicolo: due fascicoli per la stessa persona sono due storie parallele, e nessuna e' quella giusta. Il fascicolo nasce vuoto: il referto dice "non hai ancora compilato il questionario" finche' la persona non lo compila, che e' il percorso vero. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EndnceRA5WnA6rvA5iV9WL
This commit is contained in:
@@ -11,7 +11,8 @@
|
|||||||
"test": "vitest run",
|
"test": "vitest run",
|
||||||
"create-user": "node scripts/create-user.mjs",
|
"create-user": "node scripts/create-user.mjs",
|
||||||
"sync-campus": "node scripts/sync-campus.mjs",
|
"sync-campus": "node scripts/sync-campus.mjs",
|
||||||
"seed-demo": "tsx scripts/seed-demo.ts"
|
"seed-demo": "tsx scripts/seed-demo.ts",
|
||||||
|
"crea-fascicolo": "tsx scripts/crea-fascicolo.ts"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@astrojs/node": "11.0.1",
|
"@astrojs/node": "11.0.1",
|
||||||
|
|||||||
@@ -0,0 +1,75 @@
|
|||||||
|
/**
|
||||||
|
* crea-fascicolo.ts — apre il fascicolo Longevity di una persona che ha già un account.
|
||||||
|
*
|
||||||
|
* A COSA SERVE: il referto si aggancia all'utente, non al ruolo (`codicePerUtenteLoggato`),
|
||||||
|
* quindi chiunque abbia un account — cliente, trainer o admin — può avere il proprio, ma
|
||||||
|
* solo se esiste la riga che lo lega al fascicolo. Finché non c'è il gestionale trainer,
|
||||||
|
* questo è l'unico modo di crearla senza inventarsi dati come fa seed-demo.
|
||||||
|
*
|
||||||
|
* COME SI USA:
|
||||||
|
* npm run crea-fascicolo -- --utente nicola --nome Nicola --cognome Antonelli --sesso M
|
||||||
|
* opzionali: --nascita 1980-01-31 --email x@y.it --telefono 333...
|
||||||
|
* percorsi: --utenti-db / --longevity-db / --identity-db, oppure DB_PATH /
|
||||||
|
* LONGEVITY_DB_PATH / IDENTITY_DB_PATH (gli stessi nomi del container).
|
||||||
|
*
|
||||||
|
* ⚠️ NON inventa niente. `--sesso` è obbligatorio perché entra nel calcolo dei punteggi
|
||||||
|
* (le curve dei test fisici sono distinte per sesso), e la data di nascita si può omettere
|
||||||
|
* ma allora l'età della sessione resta vuota: meglio un campo vuoto che una data
|
||||||
|
* plausibile e falsa.
|
||||||
|
* ⚠️ Si ferma se quell'utente ha già un fascicolo: due fascicoli per la stessa persona
|
||||||
|
* significano due storie parallele, e nessuna delle due è quella giusta.
|
||||||
|
* ⚠️ Il fascicolo nasce VUOTO: il referto dirà «non hai ancora compilato il questionario»
|
||||||
|
* finché la persona non lo compila da sé, che è il percorso vero.
|
||||||
|
*
|
||||||
|
* DIPENDE DA: tsx (devDependency).
|
||||||
|
*/
|
||||||
|
import { createLongevityDb, createIdentityDb } from '../src/lib/longevity/db';
|
||||||
|
import { creaCliente, codicePerUtente } from '../src/lib/longevity/anagrafica';
|
||||||
|
import { createDb } from '../src/lib/db';
|
||||||
|
|
||||||
|
const argv = process.argv.slice(2);
|
||||||
|
const opt = (nome: string, def?: string): string | undefined => {
|
||||||
|
const i = argv.indexOf(nome);
|
||||||
|
return i >= 0 && argv[i + 1] && !argv[i + 1].startsWith('--') ? argv[i + 1] : def;
|
||||||
|
};
|
||||||
|
|
||||||
|
const utente = opt('--utente');
|
||||||
|
const nome = opt('--nome');
|
||||||
|
const cognome = opt('--cognome');
|
||||||
|
const sesso = opt('--sesso');
|
||||||
|
|
||||||
|
if (!utente || !nome || !cognome || (sesso !== 'M' && sesso !== 'F')) {
|
||||||
|
console.error('Uso: npm run crea-fascicolo -- --utente <username> --nome <N> --cognome <C> --sesso <M|F>');
|
||||||
|
console.error(' opzionali: --nascita AAAA-MM-GG --email <mail> --telefono <n>');
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
const utentiDb = createDb(opt('--utenti-db', process.env.DB_PATH ?? 'data/piattaforme.db'));
|
||||||
|
const longevity = createLongevityDb(opt('--longevity-db', process.env.LONGEVITY_DB_PATH ?? 'data/longevity.db'));
|
||||||
|
const identity = createIdentityDb(opt('--identity-db', process.env.IDENTITY_DB_PATH ?? 'data/identity.db'));
|
||||||
|
|
||||||
|
const riga = utentiDb.prepare('SELECT id, role FROM users WHERE username = ?').get(utente) as
|
||||||
|
{ id: number; role: string } | undefined;
|
||||||
|
if (!riga) {
|
||||||
|
console.error(`L'utente "${utente}" non esiste: crealo prima con npm run create-user.`);
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
const esistente = codicePerUtente(identity, riga.id);
|
||||||
|
if (esistente) {
|
||||||
|
console.error(`"${utente}" ha già il fascicolo ${esistente}: non ne apro un secondo.`);
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
const code = creaCliente(identity, longevity, {
|
||||||
|
nome, cognome, sesso,
|
||||||
|
data_nascita: opt('--nascita'),
|
||||||
|
email: opt('--email'),
|
||||||
|
telefono: opt('--telefono'),
|
||||||
|
user_id: riga.id,
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log(`fascicolo ${code} aperto per ${nome} ${cognome}`);
|
||||||
|
console.log(` utente ${utente} (id ${riga.id}, ruolo ${riga.role})`);
|
||||||
|
console.log(` nascita ${opt('--nascita') ?? '— non dichiarata: l\'età delle sessioni resterà vuota'}`);
|
||||||
|
console.log('\nÈ vuoto: da /longevity/questionario la persona lo compila e il referto compare.');
|
||||||
Reference in New Issue
Block a user