|
|
|
const { Route, Handler } = require('../service/server');
|
|
|
|
const contest = require('../model/contest');
|
|
|
|
const user = require('../model/user');
|
|
|
|
const training = require('../model/training');
|
|
|
|
const { PERM_VIEW_TRAINING, PERM_VIEW_CONTEST, PERM_VIEW_DISCUSSION } = require('../permission');
|
|
|
|
const { CONTESTS_ON_MAIN, TRAININGS_ON_MAIN, DISCUSSIONS_ON_MAIN } = require('../options').constants;
|
|
|
|
|
|
|
|
class HomeHandler extends Handler {
|
|
|
|
async contest() {
|
|
|
|
if (this.user.hasPerm(PERM_VIEW_CONTEST)) {
|
|
|
|
const tdocs = await contest.getMulti()
|
|
|
|
.limit(CONTESTS_ON_MAIN)
|
|
|
|
.toArray();
|
|
|
|
const tsdict = await contest.getListStatus(
|
|
|
|
this.user._id, tdocs.map((tdoc) => tdoc._id),
|
|
|
|
);
|
|
|
|
return [tdocs, tsdict];
|
|
|
|
}
|
|
|
|
return [[], {}];
|
|
|
|
}
|
|
|
|
|
|
|
|
async training() {
|
|
|
|
if (this.user.hasPerm(PERM_VIEW_TRAINING)) {
|
|
|
|
const tdocs = await training.getMulti()
|
|
|
|
.sort('_id', 1)
|
|
|
|
.limit(TRAININGS_ON_MAIN)
|
|
|
|
.toArray();
|
|
|
|
const tsdict = await training.getListStatus(
|
|
|
|
this.user._id, tdocs.map((tdoc) => tdoc._id),
|
|
|
|
);
|
|
|
|
return [tdocs, tsdict];
|
|
|
|
}
|
|
|
|
return [[], {}];
|
|
|
|
}
|
|
|
|
|
|
|
|
async discussion() {
|
|
|
|
// TODO(masnn)
|
|
|
|
// if (this.user.hasPerm(PERM_VIEW_DISCUSSION)) {
|
|
|
|
// const ddocs = await discussion.getMulti()
|
|
|
|
// .limit(DISCUSSIONS_ON_MAIN)
|
|
|
|
// .toArray();
|
|
|
|
// const vndict = await discussion.getListVnodes(map(discussion.node_id, ddocs));
|
|
|
|
// return [ddocs, vndict];
|
|
|
|
// }
|
|
|
|
return [[], {}];
|
|
|
|
}
|
|
|
|
|
|
|
|
async get() {
|
|
|
|
const [[tdocs, tsdict], [trdocs, trsdict], [ddocs, vndict]] = await Promise.all([
|
|
|
|
this.contest(), this.training(), this.discussion(),
|
|
|
|
]);
|
|
|
|
const udict = await user.getList(ddocs.map((ddoc) => ddoc.owner));
|
|
|
|
this.response.template = 'main.html';
|
|
|
|
this.response.body = {
|
|
|
|
tdocs, tsdict, trdocs, trsdict, ddocs, vndict, udict,
|
|
|
|
};
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
Route('/', HomeHandler);
|