Spaces:
Sleeping
Sleeping
| # Database Enum Types Reference | |
| ## Enum Naming Convention | |
| The database uses **PascalCase** for enum type names (defined in `01_foundation.sql`): | |
| | Enum Type | Values | | |
| |-----------|--------| | |
| | `AppRole` | `platform_admin`, `client_admin`, `contractor_admin`, `sales_manager`, `project_manager`, `dispatcher`, `field_agent`, `sales_agent` | | |
| | `UserStatus` | `invited`, `pending_setup`, `active`, `suspended` | | |
| | `PayoutMethod` | `mobile_money`, `bank_transfer`, `cash`, `other` | | |
| | `OrganizationType` | `client`, `contractor` | | |
| ## New Enums (User Invitations) | |
| Added in `11_user_invitations.sql`: | |
| | Enum Type | Values | | |
| |-----------|--------| | |
| | `invitation_status` | `pending`, `accepted`, `expired`, `cancelled` | | |
| | `invitation_method` | `whatsapp`, `email`, `both` | | |
| ## Usage in Migrations | |
| When creating tables, reference enums with PascalCase: | |
| ```sql | |
| -- β CORRECT | |
| invited_role AppRole NOT NULL | |
| -- β WRONG | |
| invited_role app_role NOT NULL | |
| ``` | |
| ## Usage in SQLAlchemy Models | |
| In Python models, use String columns and let the database handle enum constraints: | |
| ```python | |
| # β CORRECT | |
| role = Column(String(50), nullable=False) # AppRole ENUM in DB | |
| status = Column(String(50), default='invited') # UserStatus ENUM in DB | |
| # The database enforces the enum constraint | |
| # Python just sees it as a string | |
| ``` | |
| ## Usage in Constraints | |
| When referencing enum values in constraints, cast explicitly: | |
| ```sql | |
| -- β CORRECT | |
| invited_role = 'platform_admin'::AppRole | |
| -- Also works (implicit cast) | |
| invited_role = 'platform_admin' | |
| ``` | |
| ## Migration File Fixed | |
| The `11_user_invitations.sql` migration has been corrected to use: | |
| - `AppRole` instead of `app_role` | |
| - Proper enum casting in constraints | |
| You can now run the migration successfully! | |