test(T05): contact router, rental router, email service, rate limiting tests + retry queue
This commit is contained in:
+18
-3
@@ -6,11 +6,11 @@ from fastapi.middleware.cors import CORSMiddleware
|
||||
from apscheduler.schedulers.asyncio import AsyncIOScheduler
|
||||
|
||||
from app.config import get_settings
|
||||
from app.database import engine, init_db
|
||||
from app.database import engine, init_db, async_session
|
||||
from app.cache import cache
|
||||
from app.routers import equipment, health, admin, rental_requests, contact
|
||||
from app.services.sync_service import SyncService
|
||||
from app.database import async_session
|
||||
from app.services.email_service import EmailService
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
settings = get_settings()
|
||||
@@ -27,6 +27,14 @@ async def run_equipment_sync() -> None:
|
||||
logger.info("Scheduled sync complete: %s", result)
|
||||
|
||||
|
||||
async def run_email_retry() -> None:
|
||||
"""Scheduled job: retry failed emails every 15 minutes."""
|
||||
logger.info("Starting scheduled email retry")
|
||||
async with async_session() as db:
|
||||
sent = await EmailService.retry_failed_emails(db)
|
||||
logger.info("Email retry complete: %d emails sent", sent)
|
||||
|
||||
|
||||
@asynccontextmanager
|
||||
async def lifespan(app: FastAPI):
|
||||
"""Application lifespan: init DB, start scheduler, connect cache."""
|
||||
@@ -44,8 +52,15 @@ async def lifespan(app: FastAPI):
|
||||
id="equipment_sync",
|
||||
replace_existing=True,
|
||||
)
|
||||
scheduler.add_job(
|
||||
run_email_retry,
|
||||
trigger="cron",
|
||||
minute="*/15",
|
||||
id="email_retry",
|
||||
replace_existing=True,
|
||||
)
|
||||
scheduler.start()
|
||||
logger.info("APScheduler started with equipment_sync job (every 6h)")
|
||||
logger.info("APScheduler started with equipment_sync (every 6h) and email_retry (every 15min)")
|
||||
|
||||
yield
|
||||
|
||||
|
||||
Reference in New Issue
Block a user