This commit is contained in:
2026-04-19 12:59:18 +02:00
parent c01876ad81
commit 7065cb3945
8 changed files with 347 additions and 25 deletions
+44
View File
@@ -3,6 +3,7 @@ package db
import (
"database/sql"
"log"
"strings"
_ "modernc.org/sqlite"
)
@@ -36,10 +37,53 @@ func Migrate(db *sql.DB) error {
return err
}
}
if err := migrateAddBookingSource(db); err != nil {
log.Printf("⚠ migration booking source: %v", err)
}
log.Println("✓ Migrations appliquées")
return nil
}
// migrateAddBookingSource ajoute 'booking' aux sources autorisées de calendar_events.
// Vérifie d'abord le DDL pour ne s'exécuter qu'une seule fois.
func migrateAddBookingSource(db *sql.DB) error {
var ddl string
if err := db.QueryRow(`SELECT sql FROM sqlite_master WHERE name='calendar_events' AND type='table'`).Scan(&ddl); err != nil {
return nil // table absente, rien à faire
}
if strings.Contains(ddl, "'booking'") {
return nil // déjà migré
}
tx, err := db.Begin()
if err != nil {
return err
}
defer tx.Rollback()
for _, step := range []string{
`CREATE TABLE calendar_events_new (
id TEXT PRIMARY KEY,
property_id TEXT NOT NULL REFERENCES properties(id) ON DELETE CASCADE,
title TEXT,
start_date DATE NOT NULL,
end_date DATE NOT NULL,
source TEXT NOT NULL CHECK(source IN ('airbnb','manual','booking')),
ical_uid TEXT,
notes TEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
UNIQUE(property_id, ical_uid)
)`,
`INSERT INTO calendar_events_new SELECT * FROM calendar_events`,
`DROP TABLE calendar_events`,
`ALTER TABLE calendar_events_new RENAME TO calendar_events`,
} {
if _, err := tx.Exec(step); err != nil {
return err
}
}
log.Println("✓ Migration calendar_events: source 'booking' ajouté")
return tx.Commit()
}
const sqlCreateUsers = `
CREATE TABLE IF NOT EXISTS users (
id TEXT PRIMARY KEY,