feat: implement email template system with vendor overrides
Add comprehensive email template management for both admin and vendors:
Admin Features:
- Email templates management page at /admin/email-templates
- Edit platform templates with language support (en, fr, de, lb)
- Preview templates with sample variables
- Send test emails
- View email logs per template
Vendor Features:
- Email templates customization page at /vendor/{code}/email-templates
- Override platform templates with vendor-specific versions
- Preview and test customized templates
- Revert to platform defaults
Technical Changes:
- Migration for vendor_email_templates table
- VendorEmailTemplate model with override management
- Enhanced EmailService with language resolution chain
(customer preferred -> vendor preferred -> platform default)
- Branding resolution (Wizamart default, removed for whitelabel)
- Platform-only template protection (billing templates)
- Admin and vendor API endpoints with full CRUD
- Updated seed script with billing and team templates
Files: 22 changed, ~3,900 lines added
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -500,6 +500,30 @@ async def admin_notifications_page(
|
||||
)
|
||||
|
||||
|
||||
# ============================================================================
|
||||
# EMAIL TEMPLATES ROUTES
|
||||
# ============================================================================
|
||||
|
||||
|
||||
@router.get("/email-templates", response_class=HTMLResponse, include_in_schema=False)
|
||||
async def admin_email_templates_page(
|
||||
request: Request,
|
||||
current_user: User = Depends(get_current_admin_from_cookie_or_header),
|
||||
db: Session = Depends(get_db),
|
||||
):
|
||||
"""
|
||||
Render email templates management page.
|
||||
Shows all platform email templates with edit capabilities.
|
||||
"""
|
||||
return templates.TemplateResponse(
|
||||
"admin/email-templates.html",
|
||||
{
|
||||
"request": request,
|
||||
"user": current_user,
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
# ============================================================================
|
||||
# MESSAGING ROUTES
|
||||
# ============================================================================
|
||||
|
||||
Reference in New Issue
Block a user