@router.post("") async def add_subject(payload: SubjectIn, user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db)): count = (await db.execute(select(func.count(SubjectLine.id)).where( SubjectLine.user_id == user.id))).scalar() if count >= settings.MAX_SUBJECTS: raise HTTPException(400, f"Maximum of {settings.MAX_SUBJECTS} subject variations reached") row = SubjectLine(user_id=user.id, subject=payload.subject.strip()[:500]) db.add(row) await db.commit() return {"id": row.id, "subject": row.subject} @router.post("") async def create_template(payload: TemplateIn, user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db)): if not payload.body_html.strip(): raise HTTPException(400, "HTML body is required") if len(payload.body_html) > 1024 * 1024: raise HTTPException(413, "Template too large (max 1 MB)") problems = [] if re.search(r"