HR-ATS-Portal/frontend/src/api/assessments.js

99 lines
2.6 KiB
JavaScript

import { request } from '../lib/apiClient'
import { toDate } from '../lib/format'
/** Assessments — backend/assessments/app.py. Dual-key: exactly one of inbox_id / manual_upload_candidate_id. */
export const ASSESSMENT_TYPES = [
'Coding Challenge',
'Take-home Project',
'Cognitive Test',
'Personality Assessment',
'SQL Test',
'Case Study',
]
export const ASSESSMENT_STATUSES = ['pending', 'in_progress', 'completed', 'expired']
const STATUS_LABEL = {
pending: 'Pending',
in_progress: 'In Progress',
completed: 'Completed',
expired: 'Expired',
}
export function list({ assessmentId, inboxId, manualUploadCandidateId, jobPostId, assessmentStatus, top, skip } = {}) {
return request('/assessments/fetch', {
params: {
assessment_id: assessmentId,
inbox_id: inboxId,
manual_upload_candidate_id: manualUploadCandidateId,
job_post_id: jobPostId,
assessment_status: assessmentStatus,
top,
skip,
},
})
}
export function counts() {
return request('/assessments/counts')
}
export function create(body) {
return request('/assessments/create', { method: 'POST', body })
}
export function update(assessmentId, body) {
return request('/assessments/update', {
method: 'PATCH',
params: { assessment_id: assessmentId },
body,
})
}
export function remove(assessmentId) {
return request('/assessments/delete', {
method: 'DELETE',
params: { assessment_id: assessmentId },
})
}
export function remind(assessmentId) {
return request('/assessments/remind', {
method: 'POST',
params: { assessment_id: assessmentId },
})
}
function durationLabel(minutes) {
if (minutes == null) return null
if (minutes >= 1440 && minutes % 1440 === 0) {
const days = minutes / 1440
return days === 1 ? '1 day' : `${days} days`
}
return `${minutes} min`
}
export function toAssessmentView(row) {
const name = row.candidate_name || 'Unknown'
return {
id: row.id,
inboxId: row.inbox_id,
manualUploadCandidateId: row.manual_upload_candidate_id,
jobPostId: row.job_post_id,
candidate: name,
jobTitle: row.job_title || '—',
type: row.assessment_type,
status: STATUS_LABEL[row.assessment_status] ?? row.assessment_status,
statusKey: row.assessment_status,
score: row.score ?? null,
sectionScores: Array.isArray(row.section_scores) ? row.section_scores : [],
duration: durationLabel(row.duration_minutes) || '—',
durationMinutes: row.duration_minutes,
assigned: toDate(row.assigned_at),
due: toDate(row.due_at),
completedAt: toDate(row.completed_at),
remindedAt: toDate(row.reminded_at),
}
}