# Database Status - LOAF Membership Platform **Database:** `loaf_new` **Host:** 10.9.23.11:54321 **Last Updated:** 2026-01-03 **Status:** ✅ Fully initialized with seed data --- ## Database Summary ### Tables (18 total) | Table Name | Status | Records | Purpose | |------------|--------|---------|---------| | ✅ alembic_version | Active | 1 | Migration tracking (001_initial_baseline) | | ✅ users | Active | 0 | User accounts and profiles | | ✅ events | Active | 0 | Event management | | ✅ event_rsvps | Active | 0 | Event RSVPs and attendance | | ✅ event_galleries | Active | 0 | Event photo galleries | | ✅ roles | Active | 5 | RBAC role definitions | | ✅ permissions | Active | 25 | RBAC permission definitions | | ✅ role_permissions | Active | 49 | Role-permission mappings | | ✅ user_invitations | Active | 0 | Admin invitation system | | ✅ subscriptions | Active | 0 | User subscriptions | | ✅ subscription_plans | Active | 3 | Available membership plans | | ✅ donations | Active | 0 | Donation tracking | | ✅ import_jobs | Active | 0 | CSV import tracking | | ✅ import_rollback_audit | Active | 0 | Import rollback audit trail | | ✅ newsletter_archives | Active | 0 | Newsletter document archive | | ✅ financial_reports | Active | 0 | Financial document archive | | ✅ bylaws_documents | Active | 0 | Bylaws document archive | | ✅ storage_usage | Active | 1 | Storage quota tracking (100GB limit) | ### ENUMs (8 total) | ENUM Name | Values | Used By | |-----------|--------|---------| | ✅ userstatus | pending_email, awaiting_event, pre_approved, payment_pending, active, inactive | users.status | | ✅ userrole | guest, member, admin, finance, superadmin | users.role, user_invitations.role | | ✅ rsvpstatus | yes, no, maybe | event_rsvps.rsvp_status | | ✅ subscriptionstatus | active, past_due, canceled, incomplete, trialing | subscriptions.status | | ✅ donationtype | one_time, recurring, pledge, in_kind, memorial | donations.donation_type | | ✅ donationstatus | pending, completed, failed, refunded | donations.status | | ✅ invitationstatus | pending, accepted, expired, revoked | user_invitations.status | | ✅ importjobstatus | processing, completed, failed | import_jobs.status | --- ## Seed Data Loaded ### Roles (5) | Code | Name | System Role | Permissions | |------|------|-------------|-------------| | admin | Admin | Yes | 16 | | finance | Finance | Yes | 7 | | guest | Guest | Yes | 0 | | member | Member | Yes | 1 | | superadmin | Super Admin | Yes | 25 | ### Permissions (25 across 5 modules) **Users Module (6 permissions):** - users.view - View Users - users.create - Create Users - users.edit - Edit Users - users.delete - Delete Users - users.approve - Approve Users - users.import - Import Users **Events Module (6 permissions):** - events.view - View Events - events.create - Create Events - events.edit - Edit Events - events.delete - Delete Events - events.publish - Publish Events - events.manage_attendance - Manage Attendance **Finance Module (5 permissions):** - finance.view - View Financial Data - finance.manage_plans - Manage Subscription Plans - finance.manage_subscriptions - Manage Subscriptions - finance.view_reports - View Financial Reports - finance.export - Export Financial Data **Content Module (3 permissions):** - content.newsletters - Manage Newsletters - content.documents - Manage Documents - content.gallery - Manage Gallery **System Module (5 permissions):** - system.settings - System Settings - system.roles - Manage Roles - system.invitations - Manage Invitations - system.storage - Manage Storage - system.audit - View Audit Logs ### Subscription Plans (3) | Plan Name | Price | Billing | Custom Pricing | Donation Support | |-----------|-------|---------|----------------|------------------| | Pay What You Want Membership | $30.00 (min) | Annual | ✅ Yes | ✅ Yes | | Annual Individual Membership | $60.00 | Annual | ❌ No | ❌ No | | Annual Group Membership | $100.00 | Annual | ❌ No | ❌ No | **Note:** Stripe price IDs need to be configured after Stripe setup. --- ## Migration Status **Current Revision:** `001_initial_baseline (head)` **Migration System:** Alembic 1.14.0 **Schema Source:** `migrations/000_initial_schema.sql` **Seed Source:** `migrations/seed_data.sql` **Migration History:** - `001_initial_baseline` - Empty baseline marker (2026-01-02) **Future migrations** will be generated using: ```bash alembic revision --autogenerate -m "description" alembic upgrade head ``` --- ## Next Steps ### Immediate (Required) 1. **Create Superadmin User** ```bash cd backend python3 create_superadmin.py ``` 2. **Configure Stripe Price IDs** ```sql UPDATE subscription_plans SET stripe_price_id = 'price_xxx' WHERE name = 'Annual Individual Membership'; UPDATE subscription_plans SET stripe_price_id = 'price_yyy' WHERE name = 'Annual Group Membership'; UPDATE subscription_plans SET stripe_price_id = 'price_zzz' WHERE name = 'Pay What You Want Membership'; ``` 3. **Set Environment Variables** - Copy `backend/.env.example` to `backend/.env` - Fill in all required values (DATABASE_URL, JWT_SECRET, SMTP, Stripe, R2) 4. **Test Application** ```bash # Backend cd backend uvicorn server:app --reload # Frontend (separate terminal) cd frontend yarn start ``` ### Optional (Recommended) 1. **Add Sample Events** - Login as superadmin - Navigate to Admin → Events - Create 2-3 sample events 2. **Test Registration Flow** - Register a test user - Verify email verification works - Test event RSVP - Test admin approval flow 3. **Configure Email Templates** - Review templates in `backend/email_service.py` - Customize colors, branding, copy 4. **Set Up Monitoring** - Configure error logging - Set up uptime monitoring - Configure backup schedule --- ## Database Maintenance ### Backup Command ```bash PGPASSWORD='your-password' pg_dump -h 10.9.23.11 -p 54321 -U postgres loaf_new > backup_$(date +%Y%m%d_%H%M%S).sql ``` ### Restore Command ```bash PGPASSWORD='your-password' psql -h 10.9.23.11 -p 54321 -U postgres -d loaf_new < backup_file.sql ``` ### Health Check Queries ```sql -- Check user count by status SELECT status, COUNT(*) FROM users GROUP BY status; -- Check upcoming events SELECT title, start_at FROM events WHERE start_at > NOW() ORDER BY start_at LIMIT 5; -- Check active subscriptions SELECT COUNT(*) FROM subscriptions WHERE status = 'active'; -- Check storage usage SELECT total_bytes_used / 1024 / 1024 / 1024 as used_gb, max_bytes_allowed / 1024 / 1024 / 1024 as max_gb, ROUND((total_bytes_used::numeric / max_bytes_allowed * 100)::numeric, 2) as percent_used FROM storage_usage; ``` --- ## Support & Resources - **Deployment Guide:** See `DEPLOYMENT.md` for complete deployment instructions - **API Documentation:** http://localhost:8000/docs (when backend running) - **Alembic Guide:** See `backend/alembic/README.md` for migration documentation - **Project Documentation:** See `CLAUDE.md` for codebase overview --- ## Changelog **2026-01-03:** - ✅ Created all 17 data tables - ✅ Created all 8 ENUMs - ✅ Loaded seed data (5 roles, 25 permissions, 3 subscription plans) - ✅ Initialized Alembic tracking (001_initial_baseline) - ✅ Created superadmin user helper script **Status:** Database is fully initialized and ready for use. Next step: Create superadmin user and start application.