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:
@@ -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