來源決策:
java-backend-architecture-proposal.md§7
作法:開發期改docs/latest_schema.sql→docker compose down -v && up -d整檔重建
同步文件:docs/schema-enums.md、docs/database-schema-guide.md、相關docs/database-documents/
範圍:Phase 1–4、6(本輪);Phase 5 不做
驗證:2026-07-20 — Docker 重建成功(66 tables / 12 views);npm run validate:dataOK。2026-07-21 — 獨立暫存 PostgreSQL 以完整latest_schema.sql驗證 Booking 冪等唯一約束通過。 後續:線 A 骨架見backend/README.md;認證為 Firebase ID Token(不自簽 JWT),見架構書 v1.1。
payment_method 改為 ECPay 通道 + codfirebase_uidorders/bookings,不新建 checkout_sessionscustomers 新增 firebase_uiddocs/database-documents/user-and-admin/customers.mdadmin_users 新增 firebase_uidadmin_users.mdactive_customers View 不加入 firebase_uid鎖定 ENUM:ecpay-credit |
ecpay-atm |
ecpay-cvs |
ecpay-other |
cod |
CREATE TYPE payment_methodorders.payment_method COMMENTdocs/schema-enums.mdorders-and-coupons.mdcredit-card/line-pay → 新值bookings.payment_method + CHECK 禁止 codbookings.payment_statusbookings.paid_atbookings.mdorders.checkout_expires_at + COMMENTbookings.checkout_expires_at + 部分索引(pending)expires_at 同交易寫入payment_notifications 表docs/database-documents/orders-and-coupons/payment-notifications.mdbookings.checkout_idempotency_key(會員範圍 key)bookings.checkout_request_hash(正規化 payload 的 SHA-256 指紋)UNIQUE (customer_id, checkout_idempotency_key)IDEMPOTENCY_CONFLICTdocs/latest_schema.sql 可被 compose 掛載執行docs/schema-enums.md 與 ENUM 一致docs/database-schema-guide.md 補說明database-documents/*.md 已同步docker compose down -v && up -d 建庫無錯為讓 Docker 首次 init 能完整套用 DDL,一併修正:
DROP SCHEMA IF EXISTS public CASCADE 再 CREATE SCHEMA public(否則空庫上 CREATE SCHEMA public 會失敗)branch_features.id 改為 IDENTITY(避免 sequence 在表之後建立)active_rental_listing_view 移到 rental_skus/rental_sku_variants 之後orders.checkout_idempotency_key、checkout_request_hash 與 UNIQUE (customer_id, checkout_idempotency_key)。bookings.checkout_idempotency_key、checkout_request_hash 與 UNIQUE (customer_id, checkout_idempotency_key);payload 指紋比較留在線 E Service。