Files
rezervovator/.claude/rules/database.md
T
2026-10-09 18:18:35 +02:00

1.6 KiB

paths
paths
migrations/**
src/backend/data.rs

Database rules

  • PostgreSQL. Schema changes are plain SQL files in migrations/, named NN_short_name.sql with the next two-digit number. They are embedded with sqlx::migrate!() and applied automatically at server start.
  • Never edit or rename a migration that has been committed — sqlx stores a checksum per version and existing installations will refuse to start. Fix things with a new migration.
  • Migrations must work on a database that already holds production data: add columns as nullable or with a DEFAULT, backfill in the same file if needed.
  • migrate!() reads the directory at compile time and there is no build.rs, so cargo may not notice a new .sql file. If a new migration doesn't run, touch src/main.rs and rebuild.
  • Default rows (admin user, company, message templates, appearance) are seeded in Rust at startup (create_admin, check_*), not in migrations. A new singleton table or message_type value needs the matching seeding code.
  • Keep the schema and src/backend/data.rs in sync in the same change: column names = struct field names (SELECT * + FromRow), Postgres enum labels = Rust variant names. A new enum value needs ALTER TYPE ... ADD VALUE plus the Rust variant, its Display arm and, for message_type, the list in check_messages.
  • Naming: singular snake_case tables (reservation_sum, closing_time), id SERIAL PRIMARY KEY, "user" always quoted, money as NUMERIC(9, 2) ↔ rust_decimal::Decimal, dates/times as DATE/TIME ↔ chrono::NaiveDate/NaiveTime.