106 lines
3.7 KiB
JavaScript
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
|