@router.post("/manual")
async def add_manual(payload_in: ManualIn,
                     user: User = Depends(get_current_user),
                     db: AsyncSession = Depends(get_db),
                     request: Request = None):
    payload, list_id = payload_in.recipient, payload_in.list_id
    rl = await db.get(RecipientList, list_id)
    if not rl or rl.user_id != user.id:
        raise HTTPException(404, "Recipient list not found")
    sup, bounced = await _suppression_and_bounces(db)
    existing = set((await db.execute(select(Recipient.email).where(
        Recipient.list_id == list_id))).scalars().all())
    rpt = recipient_service.validate_rows(
        [payload.model_dump(exclude={"custom_fields"}) | {"custom_fields": payload.custom_fields}],
28:class SuppressionIn(BaseModel):
54:@router.get("/list")
75:@router.post("/add")
95:@router.post("/import")
160:@router.post("/bulk")
180:@router.post("/check")
192:@router.post("/{sid}/delete")
206:@router.post("/clear-all")
22:@router.get("/list")
23:async def list_subjects(q: str = "", page: int = 1, limit: int = 100,
34:@router.post("")
35:async def add_subject(payload: SubjectIn, user: User = Depends(get_current_user),
47:@router.post("/bulk")
48:async def add_bulk(payload: dict, user: User = Depends(get_current_user),
63:@router.post("/import")
64:async def import_subjects(file: UploadFile = File(...), user: User = Depends(get_current_user),
92:@router.get("/export")
93:async def export_subjects(user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db)):
106:@router.put("/{subject_id}")
107:async def edit_subject(subject_id: int, payload: SubjectIn,
117:@router.delete("/{subject_id}")
118:async def delete_subject(subject_id: int, user: User = Depends(get_current_user),
27:@router.get("/list")
42:@router.post("")
62:@router.post("/upload")
81:@router.post("/upload-multiple")
101:@router.get("/{template_id}")
113:@router.put("/{template_id}")
129:@router.post("/{template_id}/duplicate")
142:@router.delete("/{template_id}")
153:@router.post("/clear-all")
160:@router.post("/{template_id}/preview")
191:@router.post("/{template_id}/test-pdf")
