Files
betterhuman/backend/dist/routes/recruitment.js
T

106 lines
3.7 KiB
JavaScript

"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const express_1 = require("express");
const prisma_1 = __importDefault(require("../lib/prisma"));
const auth_1 = require("../middleware/auth");
const router = (0, express_1.Router)();
// GET /recruitment/jobs
router.get('/jobs', auth_1.requireAuth, async (req, res) => {
try {
const { status } = req.query;
const where = { companyId: req.user.companyId };
if (status)
where.status = status;
const jobs = await prisma_1.default.job.findMany({
where,
include: {
department: { select: { name: true } },
location: { select: { name: true } },
_count: { select: { candidates: true } },
},
orderBy: { createdAt: 'desc' },
});
return res.json(jobs);
}
catch (err) {
return res.status(500).json({ error: 'Internal server error' });
}
});
// POST /recruitment/jobs
router.post('/jobs', auth_1.requireAuth, async (req, res) => {
try {
const job = await prisma_1.default.job.create({
data: { ...req.body, companyId: req.user.companyId },
});
return res.status(201).json(job);
}
catch (err) {
return res.status(500).json({ error: 'Internal server error' });
}
});
// PATCH /recruitment/jobs/:id
router.patch('/jobs/:id', auth_1.requireAuth, async (req, res) => {
try {
const job = await prisma_1.default.job.update({ where: { id: req.params.id }, data: req.body });
return res.json(job);
}
catch (err) {
return res.status(500).json({ error: 'Internal server error' });
}
});
// GET /recruitment/jobs/:id/candidates
router.get('/jobs/:id/candidates', auth_1.requireAuth, async (req, res) => {
try {
const candidates = await prisma_1.default.candidate.findMany({
where: { jobId: req.params.id },
include: { interviews: true },
orderBy: { appliedAt: 'desc' },
});
return res.json(candidates);
}
catch (err) {
return res.status(500).json({ error: 'Internal server error' });
}
});
// POST /recruitment/jobs/:id/candidates
router.post('/jobs/:id/candidates', auth_1.requireAuth, async (req, res) => {
try {
const candidate = await prisma_1.default.candidate.create({
data: { ...req.body, jobId: req.params.id, currentStage: 'APPLIED' },
});
return res.status(201).json(candidate);
}
catch (err) {
return res.status(500).json({ error: 'Internal server error' });
}
});
// PATCH /recruitment/candidates/:id/stage
router.patch('/candidates/:id/stage', auth_1.requireAuth, async (req, res) => {
try {
const candidate = await prisma_1.default.candidate.update({
where: { id: req.params.id },
data: { currentStage: req.body.stage, notes: req.body.notes },
});
return res.json(candidate);
}
catch (err) {
return res.status(500).json({ error: 'Internal server error' });
}
});
// POST /recruitment/candidates/:id/interviews
router.post('/candidates/:id/interviews', auth_1.requireAuth, async (req, res) => {
try {
const interview = await prisma_1.default.interviewRound.create({
data: { ...req.body, candidateId: req.params.id },
});
return res.status(201).json(interview);
}
catch (err) {
return res.status(500).json({ error: 'Internal server error' });
}
});
exports.default = router;
//# sourceMappingURL=recruitment.js.map