HR-ATS-Portal/backend/assessments/serializers.py

27 lines
1.4 KiB
Python

def serialize_assessment(row, *, candidate_name=None, job_title=None) -> dict:
"""`candidate_name` / `job_title` come from one batched lookup in views —
never a lazy per-row load. The Assessments table's first two columns are an
avatar + name and cannot render off foreign keys alone."""
return {
"id": str(row.id) if row.id else None,
"inbox_id": row.inbox_id,
"manual_upload_candidate_id": (
str(row.manual_upload_candidate_id) if row.manual_upload_candidate_id else None
),
"job_post_id": str(row.job_post_id) if row.job_post_id else None,
"candidate_name": candidate_name,
"job_title": job_title,
"assessment_type": row.assessment_type,
"assessment_status": row.assessment_status,
"score": row.score,
"section_scores": list(row.section_scores or []),
"duration_minutes": row.duration_minutes,
"assigned_at": row.assigned_at.isoformat() if row.assigned_at else None,
"due_at": row.due_at.isoformat() if row.due_at else None,
"completed_at": row.completed_at.isoformat() if row.completed_at else None,
"reminded_at": row.reminded_at.isoformat() if row.reminded_at else None,
"created_by": str(row.created_by) if row.created_by else None,
"created_at": row.created_at.isoformat() if row.created_at else None,
"updated_at": row.updated_at.isoformat() if row.updated_at else None,
}