core: api: problem.manage.edit & problem.manage.delete

This commit is contained in:
undefined committed 2021-10-27 22:42:40 +08:00
1 parent a75804362d
commit 5d9310fb78
7 files changed
+62 -15

No files matched your search

+33 -6
View File
@@ -60,12 +60,39 @@ registerValue('Problem', [
['tag', '[String]'],
['hidden', 'Boolean'],
]);
registerResolver('Query', 'problem(id: Int, pid: String)', 'Problem', async (arg, ctx) => {
const pdoc = await problem.get(ctx.domainId, arg.pid || arg.id);
if (!pdoc) return null;
if (pdoc.hidden && !ctx.user.own(pdoc)) ctx.checkPerm(PERM.PERM_VIEW_PROBLEM_HIDDEN);
return pdoc;
});
registerValue('ProblemManage', [
['delete', 'Boolean!'],
]);
registerResolver(
'Query', 'problem(id: Int, pid: String)', 'Problem',
async (arg, ctx) => {
const pdoc = await problem.get(ctx.domainId, arg.pid || arg.id);
if (!pdoc) return null;
if (pdoc.hidden && !ctx.user.own(pdoc)) ctx.checkPerm(PERM.PERM_VIEW_PROBLEM_HIDDEN);
ctx.pdoc = pdoc;
return pdoc;
},
);
registerResolver(
'Problem', 'manage', 'ProblemManage',
async (arg, ctx) => {
if (!ctx.user.own(ctx.pdoc, PERM.PERM_EDIT_PROBLEM_SELF)) ctx.checkPerm(PERM.PERM_EDIT_PROBLEM);
return {};
},
);
registerResolver(
'ProblemManage', 'delete', 'Boolean!',
async (arg, ctx) => {
const tdocs = await contest.getRelated(ctx.domainId, ctx.pdoc.docId);
if (tdocs.length) throw new BadRequestError('Problem already used by contest {0}', tdocs[0]._id);
return problem.del(ctx.pdoc.domainId, ctx.pdoc.docId);
},
);
registerResolver(
'ProblemManage', 'edit(title: String, content: String, tag: [String], hidden: Boolean)', 'Problem!',
(arg, ctx) => problem.edit(ctx.domainId, ctx.pdoc.docId, arg),
);
export class ProblemHandler extends Handler {
async cleanup() {