
class CheckEmails(BaseModel):
    emails: list[EmailStr]


def _serialize(s: SuppressionEntry) -> dict:
    return {
        "id": s.id,
        "email": s.email,
        "reason": s.reason,
        "source": s.source,
        "campaign_id": s.campaign_id,
        "created_at": s.created_at.isoformat() if s.created_at else None,
    }


@router.get("/list")
async def list_suppression(search: str = Query(""),
                           reason: str = Query(""),
=== phones out ===
41:    return {
76:    return {"phones": [_serialize(p) for p in rows],
160:    return {"added": added, "duplicates": duplicates,
189:    return {"deleted": pid}
203:    return {"deleted": len(rows)}
PHONE_RE = re.compile(r"^\+?[0-9][0-9 ()\-.]{4,30}$")


class PhoneIn(BaseModel):
    phone: str
    label: str = ""

    @field_validator("phone")
    @classmethod
    def valid_phone(cls, v):
        v = v.strip()
        if not PHONE_RE.match(v):
            raise ValueError("Invalid phone number format")
        return v


class PhonePatch(BaseModel):
    label: Optional[str] = None
    is_active: Optional[bool] = None


def _serialize(p: CompanyPhoneNumber) -> dict:
