diff --git a/.brain/adr-log.md b/.brain/adr-log.md index e69de29..4e77ef1 100644 --- a/.brain/adr-log.md +++ b/.brain/adr-log.md @@ -0,0 +1,17 @@ +# ADR 001: PostgreSQL 16 Hybrid Multi-Tenant Architektur + +## Status +Akzeptiert + +## Kontext +Gastro-SaaS Tischreservierung benötigt strenge Mandantentrennung bei hoher Performance. + +## Entscheidung +- Nutzung von PostgreSQL 16 Schema-basierter Multi-Tenancy. +- Master-Schema (`public` / `tenants` Tabelle) für Mandantenverwaltung. +- Eigene Schemas pro Tenant (`tenant_`) für operative Daten (`reservations`, `restaurant_tables`, `guests`). +- Spring Boot 3 `SchemaBasedMultiTenantConnectionProvider` & `CurrentTenantIdentifierResolver`. + +## Konsequenzen +- Hohe Datenisolation & einfache Backups pro Tenant. +- Migrationen laufen schemaweise über Flyway. diff --git a/.brain/index.md b/.brain/index.md index ba1c8d5..5dfb12d 100644 --- a/.brain/index.md +++ b/.brain/index.md @@ -1,5 +1,7 @@ # Second Brain Wiki -- [Supabase Schema](file:///c:/source/webshop/.brain/supabase-schema.md) -- [ADR Log](file:///c:/source/webshop/.brain/adr-log.md) -- [LicServer API Spezifikation](file:///c:/source/webshop/.brain/licserver-api.md) +- [PostgreSQL Hybrid Multi-Tenant Setup](file:///c:/source/SmartSeat/SmartSeat/.brain/postgres-multi-tenant.md) +- [ADR Log](file:///c:/source/SmartSeat/SmartSeat/.brain/adr-log.md) +- [Supabase Schema](file:///c:/source/SmartSeat/SmartSeat/.brain/supabase-schema.md) +- [LicServer API Spezifikation](file:///c:/source/SmartSeat/SmartSeat/.brain/licserver-api.md) + diff --git a/.brain/postgres-multi-tenant.md b/.brain/postgres-multi-tenant.md new file mode 100644 index 0000000..2e3793f --- /dev/null +++ b/.brain/postgres-multi-tenant.md @@ -0,0 +1,12 @@ +# PostgreSQL 16 Hybrid Multi-Tenant Setup + +## Architektur Overview +- **Docker Setup**: PostgreSQL 16 Alpine via Docker Compose. +- **Rollen-Isolation**: `app_user` (DML) & `migration_user` (DDL). +- **Master Schema**: `tenants` Tabelle in `V1__init_master_schema.sql`. +- **Tenant Schemas**: `dining_areas`, `restaurant_tables`, `guests`, `reservations`, `reservation_table_assignments`, `staff_users` in `V1__init_tenant_schema.sql`. + +## Backend Integration +- `TenantContext` (ThreadLocal Schema Resolver) +- `SchemaBasedMultiTenantConnectionProvider` (Hibernate Connection Handling) +- HikariCP Connection Pool optimiert für Postgres in `application.yml`.