Files
smoothschedule/PLATFORM_INTEGRATION.md
poduck 2e111364a2 Initial commit: SmoothSchedule multi-tenant scheduling platform
This commit includes:
- Django backend with multi-tenancy (django-tenants)
- React + TypeScript frontend with Vite
- Platform administration API with role-based access control
- Authentication system with token-based auth
- Quick login dev tools for testing different user roles
- CORS and CSRF configuration for local development
- Docker development environment setup

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-27 01:43:20 -05:00

181 lines
5.3 KiB
Markdown

# Platform Integration Summary
## What We've Completed
### ✅ Backend (Django)
1. **Created Platform App** (`smoothschedule/platform/`)
- `apps.py` - App configuration
- `serializers.py` - TenantSerializer, PlatformUserSerializer, PlatformMetricsSerializer
- `permissions.py` - IsPlatformAdmin, IsPlatformUser
- `views.py` - TenantViewSet, PlatformUserViewSet
- `urls.py` - URL routing
2. **API Endpoints Created**
- `GET /api/platform/businesses/` - List all tenants
- `GET /api/platform/businesses/{id}/` - Get specific tenant
- `GET /api/platform/businesses/metrics/` - Get platform metrics
- `GET /api/platform/users/` - List all users
- `GET /api/platform/users/{id}/` - Get specific user
3. **Configuration Updates**
- Added `platform` to `INSTALLED_APPS` in `config/settings/base.py`
- Added platform URLs to `config/urls.py`
### ✅ Frontend (React)
The frontend already has complete implementation from the tarball:
1. **Platform Pages**
- `pages/platform/PlatformDashboard.tsx` - Metrics and charts
- `pages/platform/PlatformBusinesses.tsx` - Tenant list with masquerade
- `pages/platform/PlatformUsers.tsx` - User management
- `pages/platform/PlatformSupport.tsx` - Support tickets
- `pages/platform/PlatformSettings.tsx` - Platform settings
2. **Routing**
- Role-based access configured in `App.tsx`
- Routes protected by user role (SUPERUSER, PLATFORM_MANAGER, etc.)
3. **API Integration**
- `hooks/usePlatform.ts` - React Query hooks
- `api/platform.ts` - API client functions
## Next Steps
### 1. Restart Django Server
The Django server needs to be restarted to pick up the new `platform` app:
```bash
# Stop the current server (Ctrl+C in the terminal)
# Then restart it
docker-compose -f docker-compose.local.yml restart django
```
### 2. Test API Endpoints
Once the server is restarted, test the endpoints:
```bash
# List all tenants (requires authentication)
curl -H "Authorization: Bearer YOUR_TOKEN" http://lvh.me:8000/api/platform/businesses/
# List all users
curl -H "Authorization: Bearer YOUR_TOKEN" http://lvh.me:8000/api/platform/users/
```
### 3. Create Platform Admin User
You need a user with platform admin role to access these endpoints:
```python
# In Django shell
from smoothschedule.users.models import User
# Create or update a superuser
user = User.objects.filter(username='admin').first()
if user:
user.role = User.Role.SUPERUSER
user.is_staff = True
user.is_superuser = True
user.save()
```
### 4. Test Frontend
1. Navigate to `http://platform.lvh.me:5173/`
2. Login with platform admin credentials
3. You should see:
- Platform Dashboard with metrics
- Businesses page showing all tenants
- Users page showing all users
- Support and Settings pages
## Known Limitations
### Need to Add Tenant Reference to User Model
Currently, the `User` model doesn't have a direct reference to which `Tenant` they belong to. This is needed for:
- Showing business name in user list
- Filtering users by business
- Getting accurate owner information
**To fix:** Add a foreign key to `User` model:
```python
# In smoothschedule/users/models.py
from core.models import Tenant
class User(AbstractUser):
# ... existing fields ...
tenant = models.ForeignKey(
Tenant,
on_delete=models.CASCADE,
null=True,
blank=True,
related_name='users',
help_text="Tenant this user belongs to (null for platform users)"
)
```
Then run migrations:
```bash
python manage.py makemigrations
python manage.py migrate
```
## Architecture Notes
### Multi-Tenancy with django-tenants
- **Public Schema**: Stores `Tenant` and `Domain` models
- **Tenant Schemas**: Each tenant gets isolated PostgreSQL schema
- **Platform API**: Operates on public schema to list all tenants
- **User Model**: Stored in public schema (shared across tenants)
### Permission Model
1. **Platform Roles** (access all tenants):
- `SUPERUSER` - Full access
- `PLATFORM_MANAGER` - Manage tenants and users
- `PLATFORM_SUPPORT` - View-only access
- `PLATFORM_SALES` - Sales operations
2. **Tenant Roles** (access single tenant):
- `TENANT_OWNER` - Tenant administrator
- `TENANT_MANAGER` - Manage tenant settings
- `TENANT_STAFF` - Use tenant features
3. **Customer Role**:
- `CUSTOMER` - End user of tenant
## File Structure
```
smoothschedule/
├── platform/ # NEW - Platform management app
│ ├── __init__.py
│ ├── apps.py
│ ├── serializers.py # API serializers
│ ├── permissions.py # Custom permissions
│ ├── views.py # ViewSets
│ └── urls.py # URL routing
├── core/
│ └── models.py # Tenant, Domain models
├── smoothschedule/users/
│ └── models.py # User model
└── config/
├── settings/base.py # Updated INSTALLED_APPS
└── urls.py # Added platform URLs
```
## Testing the Complete Flow
1. **Backend**: Platform API serving tenant/user data
2. **Frontend**: React app consuming API and displaying in UI
3. **Authentication**: Role-based access control
4. **Multi-tenancy**: Proper isolation between tenants
Once the server is restarted and a platform admin user is created, the entire platform section should be functional!