def _serialize(p: CompanyPhoneNumber) -> dict:
    return {
        "id": p.id,
        "label": p.label,
        "phone": p.phone,
        "is_active": bool(p.is_active),
        "use_count": p.use_count,
        "created_at": p.created_at.isoformat() if p.created_at else None,
    }


=== subjects ===
from app.models import SubjectLine, User

router = APIRouter(prefix="/subjects", tags=["subjects"])


class SubjectIn(BaseModel):
    subject: str


@router.get("")
async def list_subjects(q: str = "", page: int = 1, limit: int = 100,
                        user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db)):
    stmt = select(SubjectLine).where(SubjectLine.user_id == user.id)
    if q:
        stmt = stmt.where(SubjectLine.subject.ilike(f"%{q}%"))
    total = (await db.execute(select(func.count()).select_from(stmt.subquery()))).scalar()
    rows = (await db.execute(stmt.order_by(SubjectLine.id).offset((page - 1) * limit).limit(limit))).scalars().all()
    return {"total": total, "subjects": [{"id": s.id, "subject": s.subject,
                                          "use_count": s.use_count} for s in rows]}


@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")
=== templates ===
