27 lines
1.4 KiB
Python
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,
|
|
}
|