diff --git a/backend/routers/admin.py b/backend/routers/admin.py index f9dd334..14c9693 100644 --- a/backend/routers/admin.py +++ b/backend/routers/admin.py @@ -603,3 +603,50 @@ def bulk_import_links( "updated_performances": updated_performances, "errors": errors } + + +# ============ EMAIL & NOTIFICATIONS ============ + +@router.post("/send-weekly-digest") +def trigger_weekly_digest( + session: Session = Depends(get_session), + _: User = Depends(allow_admin) +): + """Manually trigger weekly digest emails (runs automatically every Sunday 9am UTC)""" + from services.weekly_digest import send_weekly_digests + + try: + send_weekly_digests() + return {"message": "Weekly digest emails sent successfully"} + except Exception as e: + raise HTTPException(status_code=500, detail=f"Failed to send digest: {str(e)}") + + +@router.post("/test-email") +def test_email( + to_email: str, + session: Session = Depends(get_session), + _: User = Depends(allow_admin) +): + """Send a test email to verify email configuration""" + from services.email_service import email_service + + subject = "Elmeg Test Email" + html_content = """ + + +

Test Email

+

This is a test email from Elmeg to verify email configuration.

+

If you received this, SMTP is working correctly!

+ + + """ + text_content = "This is a test email from Elmeg. If you received this, SMTP is working correctly!" + + success = email_service.send_email(to_email, subject, html_content, text_content) + + if success: + return {"message": f"Test email sent to {to_email}"} + else: + raise HTTPException(status_code=500, detail="Failed to send test email") + diff --git a/docker-compose.yml b/docker-compose.yml index f2dc074..8c78f0e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -130,20 +130,9 @@ services: networks: - elmeg - # Weekly digest email scheduler - scheduler: - image: mcuadros/ofelia:latest - command: daemon --docker - volumes: - - /var/run/docker.sock:/var/run/docker.sock:ro - labels: - # Run weekly digest every Sunday at 9am UTC - - "ofelia.job-exec.weekly-digest.schedule=0 9 * * 0" - - "ofelia.job-exec.weekly-digest.container=elmeg-demo-backend-1" - - "ofelia.job-exec.weekly-digest.command=python services/weekly_digest.py" - restart: unless-stopped - networks: - - elmeg + # Note: Weekly digest emails are triggered via admin API: POST /api/admin/send-weekly-digest + # Or set up system cron to call: curl -X POST https://elmeg.xyz/api/admin/send-weekly-digest -H "Authorization: Bearer $ADMIN_TOKEN" + umami: image: ghcr.io/umami-software/umami:postgresql-latest