CREATE TABLE pietanze ( id SERIAL PRIMARY KEY, nome VARCHAR(150) NOT NULL, descrizione TEXT, allergeni JSONB, -- Array di allergeni: ["glutine", "lattosio", ...] created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE pasti ( id SERIAL PRIMARY KEY, data_pasto DATE NOT NULL, tipo_pasto VARCHAR(20) DEFAULT 'pranzo', -- Add missing column referenced in UNIQUE constraint portate JSONB, -- Lista di portate e relative pietanze con numero di prenotazioni massime (se 0 nessun limite): {"primo": {1: 100, 2: 50}, "secondo": {3: 100, 4: 50}, ...} disponibile BOOLEAN DEFAULT true, turni JSONB, -- Dizionario con i turni di prenotazione e posti massimi disponibili (se 0 nessun limite): {"12:45": 100, "13:00": 100, ...} created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, UNIQUE(data_pasto, tipo_pasto) ); CREATE TABLE prenotazioni ( id SERIAL PRIMARY KEY, user_id VARCHAR(100) NOT NULL, -- Estratto dal JWT pasto_id INTEGER REFERENCES pasti(id) ON DELETE CASCADE, pietanze_selezionate JSONB, -- Lista di pietanze scelte per il pasto: [1, 2, 3] note TEXT, stato VARCHAR(20) DEFAULT 'attiva', -- Stati: 'attiva', 'servita', 'pagata', 'annullata' created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, UNIQUE(user_id, pasto_id) );