b49d4bfaaa938d4f2e5d02ae53d0992636a162a0
Mettere una rata su "saldato" la faceva saltare in fondo. Non era un'impressione: payments non aveva NESSUNA colonna d'ordine (ne' sort_order ne' created_at) e nessuna delle 13 query che la leggono aveva un ORDER BY. Postgres fa seq-scan e restituisce l'ordine fisico; una UPDATE in MVCC riscrive la tupla in coda, quindi la riga aggiornata tornava ultima. In produzione 3 progetti su 5 mostravano gia' l'ordine sbagliato (uno 30/20/50, uno del tutto rovesciato 20/30/50, e la coppia legacy con Saldo prima di Acconto). Per questo la migration 0019 NON fa il backfill per ctid, che avrebbe fotografato lo scombinamento: ordina per percent DESC con tie su label, che ricostruisce l'intento di tutti gli schemi esistenti. Verificato: rimette a posto tutti e 5. Aggiunto anche l'indice su (project_id, sort_order): una FK non crea indice sul lato referenziante, e payments non ne aveva alcuno oltre alla PK. Ora le rate si rinominano e gli importi si sovrascrivono a mano (EditableCell + updatePaymentField, con la stessa normalizzazione it-IT di updateServiceField). L'importo scritto a mano e' legge: amount_locked lo esclude dal ricalcolo. Quando la somma delle rate non corrisponde al totale il tab lo dice, con la cifra esatta, invece di aggiustare di nascosto. Lo schema a 3 rate passa da 50/30/20 a 50/25/25 (le righe gia' esistenti non cambiano: vale solo quando lo si riseleziona). Due bug trovati per strada e chiusi: - rescalePayments decideva con some(percent !== null): bastava UNA riga con percent per far entrare tutto il progetto nel ramo percentuale, che calcolava newTotal * 0 e azzerava ogni riga con percent NULL. splitPayment inserisce la Rata 2 proprio cosi', quindi splittare una rata e poi toccare il totale la portava a zero. Ora la regola e' per riga, non per progetto. - Il selettore di schema fa DELETE+INSERT e cancellava in silenzio anche status e paid_at, con due rate gia' saldate in produzione. Ora chiede conferma, ma solo quando c'e' davvero storico da perdere. Migration 0019 applicata a prod prima del push. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Description
ClientHub portale clienti
Languages
TypeScript
80.5%
HTML
18.6%
Shell
0.4%
CSS
0.4%