3.0 KiB
3.0 KiB
🧠 MEMORY.md — Stato Progetto
Goal
- Risolvere login non funzionante dopo fresh install (causa: tinker senza escaping +
2>/dev/null) - Sostituire tinker per creazione admin con PDO prepared statement + SQL file per schema
Constraints & Preferences
- Laravel 13, PHP 8.4, AdminLTE 4, MySQL/MariaDB (install.sql solo MySQL)
- Zero placeholder, zero TODO, codice funzionante
- Compatibilità cross-DB MySQL ↔ SQLite (fallback migration per SQLite)
Progress
Done
- Creazione
database/install.sql— schema MySQL completo + seed data (~1059 righe):- Tutte le 45 tabelle nello stato finale (consolidate da 58 migration)
- Seed: 119 diocesi, 54 comuni, 8 tipologie documenti, 8 tipologie eventi, 8 ruoli, 23 permessi Spatie, 2 ruoli Spatie, 3 role preset, 5 email folders, 1 riga app_settings
- NON contiene l'admin (creato via PDO da install.php)
SET FOREIGN_KEY_CHECKS=0per ordine tabelle, riattivato alla fine
- Riscritto
install.php— eliminata dipendenza da tinker per la creazione admin:- Aggiunta funzione
createAdminUser(): PDO prepared statement +password_hash()+ Spatie role assignment - Fresh Install Apache: importa
install.sqlviamysqlCLI, poi crea admin via PDO - Fresh Install Docker: copia
install.sqlnel container, importa via mysql CLI, crea admin via script PHP temporaneo convar_export()(safe) - Restore: crea admin via PDO se non esiste
- Fallback SQLite: mantiene
php artisan migrate --seed+ tinker ma convar_export()per escaping - Step 5 rinominato da "MIGRATION E SEED" a "SCHEMA DATABASE E DATI BASE"
- Step 6 usa PDO invece di tinker (MySQL)
- Aggiunta funzione
In Progress
- (nessuno)
Blocked
- (nessuno)
Key Decisions
- PDO > tinker:
createAdminUser()usa PDO prepared statement conpassword_hash(), niente interpolazione PHP in stringhe shell → zero escaping issues install.sql> migration sequenziali: unico file SQL per fresh install, più veloce e debuggabile (si può lanciaremysql < install.sqla mano)var_export()per tinker fallback: nei rari casi SQLite, si usavar_export()che produce stringhe PHP valide con escaping automatico2>/dev/nullrimosso dal MySQL main path (non serve più, non c'è tinker)- Docker MySQL credenziali: hardcoded
mysql:glastree:secret:glastree(dal docker-compose.mysql.yml)
Next Steps
- (nessuno)
Critical Context
install.sqlè solo per MySQL. SQLite usaphp artisan migrate --seed+DatabaseSeederDatabaseSeedercrea ancora adminadmin@glastree.local / passwordma per MySQL viene cancellato dal PDO scriptcreateAdminUser()settais_admin=1,status='active',permissionscompleto,role_preset_id=1, e Spatiemodel_has_rolescon role_id=1password_hash($pass, PASSWORD_BCRYPT)produce hash$2y$...compatibile conHash::check()di Laravel
Relevant Files
database/install.sql: NEW — schema MySQL completo + seed data (1059 righe)install.php: MODIFIED —createAdminUser()function + SQL import + PDO admin + Docker/restore adattati