feat: add email settings with database overrides for admin and vendor

Platform Email Settings (Admin):
- Add GET/PUT/DELETE /admin/settings/email/* endpoints
- Settings stored in admin_settings table override .env values
- Support all providers: SMTP, SendGrid, Mailgun, Amazon SES
- Edit mode UI with provider-specific configuration forms
- Reset to .env defaults functionality
- Test email to verify configuration

Vendor Email Settings:
- Add VendorEmailSettings model with one-to-one vendor relationship
- Migration: v0a1b2c3d4e5_add_vendor_email_settings.py
- Service: vendor_email_settings_service.py with tier validation
- API endpoints: /vendor/email-settings/* (CRUD, status, verify)
- Email tab in vendor settings page with full configuration
- Warning banner until email is configured (like billing warnings)
- Premium providers (SendGrid, Mailgun, SES) tier-gated to Business+

Email Service Updates:
- get_platform_email_config(db) checks DB first, then .env
- Configurable provider classes accept config dict
- EmailService uses database-aware providers
- Vendor emails use vendor's own SMTP (Wizamart doesn't pay)
- "Powered by Wizamart" footer for Essential/Professional tiers
- White-label (no footer) for Business/Enterprise tiers

Other:
- Add scripts/install.py for first-time platform setup
- Add make install target
- Update init-prod to include email template seeding

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-05 22:23:47 +01:00
parent ad28a8a9a3
commit 36603178c3
51 changed files with 4959 additions and 1141 deletions

View File

@@ -97,21 +97,30 @@ migrate-status:
init-prod:
@echo "🔧 Initializing production database..."
@echo ""
@echo "Step 1/4: Creating admin user and platform alerts..."
@echo "Step 1/5: Creating admin user and platform settings..."
$(PYTHON) scripts/init_production.py
@echo ""
@echo "Step 2/4: Initializing log settings..."
@echo "Step 2/5: Initializing log settings..."
$(PYTHON) scripts/init_log_settings.py
@echo ""
@echo "Step 3/4: Creating default CMS content pages..."
@echo "Step 3/5: Creating default CMS content pages..."
$(PYTHON) scripts/create_default_content_pages.py
@echo ""
@echo "Step 4/4: Creating platform pages and landing..."
@echo "Step 4/5: Creating platform pages and landing..."
$(PYTHON) scripts/create_platform_pages.py
@echo ""
@echo "Step 5/5: Seeding email templates..."
$(PYTHON) scripts/seed_email_templates.py
@echo ""
@echo "✅ Production initialization completed"
@echo "✨ Platform is ready for production OR development"
# First-time installation - Complete setup with configuration validation
install:
@echo "🚀 WIZAMART PLATFORM INSTALLATION"
@echo "=================================="
$(PYTHON) scripts/install.py
# Demo data seeding - Cross-platform using Python to set environment
seed-demo:
@echo "🎪 Seeding demo data (normal mode)..."
@@ -423,7 +432,8 @@ help:
@echo " migrate-up - Apply pending migrations"
@echo " migrate-down - Rollback last migration"
@echo " migrate-status - Show migration status"
@echo " init-prod - Initialize platform (admin, logging, CMS, pages)"
@echo " install - First-time setup (validates config + migrate + init)"
@echo " init-prod - Initialize platform (admin, CMS, pages, emails)"
@echo " seed-demo - Seed demo data (3 companies + vendors)"
@echo " seed-demo-minimal - Seed minimal demo (1 company + vendor)"
@echo " seed-demo-reset - DELETE ALL demo data and reseed"
@@ -483,13 +493,23 @@ help-db:
@echo " migrate-down - Rollback last migration"
@echo " migrate-status - Show current status and history"
@echo ""
@echo "FIRST-TIME INSTALLATION:"
@echo "──────────────────────────────────────────────────────────"
@echo " install - Complete installation wizard:"
@echo " - Validates .env configuration"
@echo " - Checks Stripe, Email, Security settings"
@echo " - Runs database migrations"
@echo " - Initializes all platform data"
@echo " - Provides configuration report"
@echo ""
@echo "PLATFORM INITIALIZATION (Production + Development):"
@echo "──────────────────────────────────────────────────────────"
@echo " init-prod - Complete platform setup (4 steps):"
@echo " 1. Create admin user + alerts"
@echo " init-prod - Complete platform setup (5 steps):"
@echo " 1. Create admin user + settings"
@echo " 2. Initialize log settings"
@echo " 3. Create CMS defaults"
@echo " 4. Create platform pages"
@echo " 5. Seed email templates"
@echo ""
@echo "DEMO DATA (Development Only - NEVER in production):"
@echo "──────────────────────────────────────────────────────────"
@@ -510,17 +530,18 @@ help-db:
@echo ""
@echo "TYPICAL FIRST-TIME SETUP (Development):"
@echo "──────────────────────────────────────────────────────────"
@echo " 1. make migrate-up # Apply database schema"
@echo " 2. make init-prod # Initialize platform (admin, CMS, logging, pages)"
@echo " 3. make seed-demo # Add demo data (companies, vendors, products)"
@echo " 4. make dev # Start development server"
@echo ""
@echo " OR simply: make db-setup # Does all the above!"
@echo " 1. cp .env.example .env # Configure environment"
@echo " 2. make install # Validates config + initializes platform"
@echo " 3. make seed-demo # Add demo data (optional)"
@echo " 4. make dev # Start development server"
@echo ""
@echo "PRODUCTION SETUP:"
@echo "──────────────────────────────────────────────────────────"
@echo " 1. Set ENV=production or ENVIRONMENT=production"
@echo " 2. make migrate-up # Apply database schema"
@echo " 3. make init-prod # Initialize platform (with .env credentials)"
@echo " 4. Create companies via admin panel"
@echo " 5. DO NOT run seed-demo in production!"
@echo " 1. Configure .env with production values:"
@echo " - DATABASE_URL (PostgreSQL recommended)"
@echo " - JWT_SECRET_KEY (use: openssl rand -hex 32)"
@echo " - STRIPE_SECRET_KEY, STRIPE_PUBLISHABLE_KEY"
@echo " - Email provider settings (SMTP/SendGrid/Mailgun/SES)"
@echo " - ADMIN_PASSWORD (strong password)"
@echo " 2. make install # Validates + initializes"
@echo " 3. DO NOT run seed-demo in production!"