Files
orion/app/modules/tenancy/docs/data-model.md
Samir Boulahtit f141cc4e6a docs: migrate module documentation to single source of truth
Move 39 documentation files from top-level docs/ into each module's
docs/ folder, accessible via symlinks from docs/modules/. Create
data-model.md files for 10 modules with full schema documentation.
Replace originals with redirect stubs. Remove empty guide stubs.

Modules migrated: tenancy, billing, loyalty, marketplace, orders,
messaging, cms, catalog, inventory, hosting, prospecting.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 23:38:37 +01:00

161 lines
4.6 KiB
Markdown

# Tenancy Data Model
## Entity Relationship Overview
```
┌──────────────┐
│ Platform │
└──────┬───────┘
│ 1:N
┌──────────────┐ ┌─────────────────┐
│ Merchant │────▶│ MerchantDomain │
└──────┬───────┘ 1:N └─────────────────┘
│ 1:N
┌──────────────┐ ┌─────────────┐ ┌──────────────┐
│ Store │────▶│ StoreUser │────▶│ Role │
└──────┬───────┘ 1:N └──────┬──────┘ └──────────────┘
│ │
│ ▼
│ ┌──────────────┐
│ │ User │
│ └──────────────┘
├────▶ StoreDomain (1:N)
└────▶ StorePlatform (N:M bridge to Platform)
```
## Core Entities
### Platform
Top-level SaaS instance. All merchants and stores belong to a platform.
| Column | Type | Description |
|--------|------|-------------|
| `id` | Integer | Primary key |
| `name` | String | Platform name |
| `code` | String | Unique platform code |
| `is_active` | Boolean | Platform enabled/disabled |
### Merchant
Business entity that owns one or more stores.
| Column | Type | Description |
|--------|------|-------------|
| `id` | Integer | Primary key |
| `name` | String | Business name |
| `owner_user_id` | Integer | FK to User — the merchant owner |
| `contact_email` | String | Primary contact email |
| `is_active` | Boolean | Merchant active status |
### Store
A storefront belonging to a merchant. Central entity for multi-tenant scoping.
| Column | Type | Description |
|--------|------|-------------|
| `id` | Integer | Primary key |
| `merchant_id` | Integer | FK to Merchant |
| `name` | String | Store name |
| `code` | String | Unique store code (used in URLs) |
| `is_active` | Boolean | Store active status |
### User
Admin users at platform, merchant, or store level.
| Column | Type | Description |
|--------|------|-------------|
| `id` | Integer | Primary key |
| `email` | String | Unique email |
| `username` | String | Username |
| `role` | UserRole | `super_admin`, `platform_admin`, `merchant_owner`, `store_member` |
| `hashed_password` | String | Bcrypt password hash |
| `is_active` | Boolean | Account active status |
### StoreUser
Membership link between users and stores, with role assignment.
| Column | Type | Description |
|--------|------|-------------|
| `id` | Integer | Primary key |
| `store_id` | Integer | FK to Store |
| `user_id` | Integer | FK to User |
| `role_id` | Integer | FK to Role (NULL for owners) |
| `is_active` | Boolean | Membership active |
| `invitation_token` | String | Pending invitation token |
| `invitation_accepted_at` | DateTime | When invitation was accepted |
### Role
Permission roles for store team members.
| Column | Type | Description |
|--------|------|-------------|
| `id` | Integer | Primary key |
| `store_id` | Integer | FK to Store |
| `name` | String | Role name (Manager, Staff, etc.) |
| `permissions` | JSON | Array of permission strings |
## Supporting Entities
### AdminPlatform
Links admin users to platforms they can manage.
### StorePlatform
N:M bridge between stores and platforms.
### StoreDomain
Custom domain configuration for stores.
### MerchantDomain
Custom domain configuration for merchants.
### EmailVerificationToken
Tokens for verifying email addresses during registration.
### UserPasswordResetToken
Tokens for password reset flow.
### AdminAuditLog
Audit trail for admin actions.
### AdminSession
Active admin login sessions.
### AdminSetting
Platform/store-level admin settings (key-value).
### PlatformAlert
System alerts displayed to platform admins.
### PlatformModule
Tracks which modules are enabled per platform.
### ApplicationLog
Application log entries for the monitoring module.
## Key Relationships
- A **Platform** has many **Merchants** (via StorePlatform)
- A **Merchant** has many **Stores** and one **owner User**
- A **Store** has many **StoreUsers** (team members)
- A **StoreUser** has one **Role** (except owners who have all permissions)
- **User.role** determines the user type: `super_admin` > `platform_admin` > `merchant_owner` > `store_member`