@universis/candidates
Version:
Universis api server plugin for study program candidates, internship selection etc
104 lines (90 loc) • 3.54 kB
JavaScript
import express from 'express';
import { multerInstance } from './middlewares/multer';
import { TraceUtils } from '@themost/common';
import path from 'path';
function studyProgramEnrollmentEventRouter(configuration) {
const router = express.Router();
const upload = multerInstance(configuration);
upload.storage.getDestination(null, null, (err, destination) => {
if (err) {
TraceUtils.error(`Routes: An error occurred while initializing instructors router.`);
return TraceUtils.error(err);
}
TraceUtils.info(`Routes: Instructors router starts using "${path.resolve(destination)}" as user storage.`);
});
const validateUser = async (context, enrollmentEventId) => {
const enrollmentEvent = await context
.model('StudyProgramEnrollmentEvent')
.where('viewers/name')
.equal(context.user.name)
.and("id")
.equal(enrollmentEventId)
.select('id')
.value();
if (enrollmentEvent) {
return true;
}
return false;
}
router.post('/:id/requests/:request/review', async function getEntity(req, res, next) {
try {
const request = await req.context.model('StudyProgramRegisterAction').where('id').equal(req.params.request).silent().getTypedItem();
await request.setReview(req.body)
return res.json();
} catch (err) {
return next(err);
}
});
router.get('/:id/requests/:request/messages', async function getEntity(req, res, next) {
try {
const context = req.context;
const enrollmentEvent = req.params.id;
const request = req.params.request;
let query = context
.model('StudyProgramRegisterActionMessage')
.where('action')
.equal(request)
.expand(
{
name: 'attachments'
},
{
name: 'sender',
options: {
$select: 'id,name,alternateName'
}
}
)
.orderByDescending('dateCreated');
if (await validateUser(context, enrollmentEvent) === true) {
return res.json(await query.silent().getItems());
}
return res.json(await query.getItems());
} catch (err) {
return next(err);
}
});
router.post('/:id/requests/:request/message', async function getEntity(req, res, next) {
try {
const request = await req.context.model('StudyProgramRegisterAction').where('id').equal(req.params.request).silent().getTypedItem();
await request.postMessages(req.body)
return res.json();
} catch (err) {
return next(err);
}
});
router.post('/:id/requests/:request/sendMessage', upload.single('attachment'), async function sendCourseClassStudentMessages(req, res, next) {
try {
const request = await req.context.model('StudyProgramRegisterAction').where('id').equal(req.params.request).silent().getTypedItem();
await request.sendMessage(req.file, req.body)
return res.json();
}
catch (err) {
return next(err);
}
});
return router;
}
export {
studyProgramEnrollmentEventRouter
}