fix: problem_edit

This commit is contained in:
undefined committed 2020-09-19 20:14:41 +08:00
1 parent 84ae0b7791
commit 47ceddea9e
6 files changed
+38 -27

No files matched your search

+23 -22
View File
@@ -25,10 +25,10 @@ import {
Route, Connection, Handler, ConnectionHandler, Types, param,
} from '../service/server';
const parseCategory = (value: string) => flatten(value.split('+').map((e) => e.split(','))).map((e) => e.trim());
const parsePid = (value: string) => (isSafeInteger(value) ? parseInt(value, 10) : value);
export const parseCategory = (value: string) => flatten(value.split('+').map((e) => e.split(','))).map((e) => e.trim());
export const parsePid = (value: string) => (isSafeInteger(value) ? parseInt(value, 10) : value);
class ProblemHandler extends Handler {
export class ProblemHandler extends Handler {
async __prepare() {
this.checkPerm(PERM.PERM_VIEW_PROBLEM);
}
@@ -56,7 +56,7 @@ class ProblemHandler extends Handler {
}
}
class ProblemMainHandler extends ProblemHandler {
export class ProblemMainHandler extends ProblemHandler {
@param('page', Types.PositiveInt, true)
@param('q', Types.String, true)
async get(domainId: string, page = 1, q = '') {
@@ -101,7 +101,7 @@ class ProblemMainHandler extends ProblemHandler {
}
}
class ProblemCategoryHandler extends ProblemHandler {
export class ProblemCategoryHandler extends ProblemHandler {
@param('page', Types.PositiveInt, true)
@param('category', Types.String, null, parseCategory)
async get(domainId: string, page = 1, category: string[]) {
@@ -139,7 +139,7 @@ class ProblemCategoryHandler extends ProblemHandler {
}
}
class ProblemRandomHandler extends ProblemHandler {
export class ProblemRandomHandler extends ProblemHandler {
@param('category', Types.String, true, null, parseCategory)
async get(domainId: string, category: string[] = []) {
const q: any = category.length ? { $and: [] } : {};
@@ -162,7 +162,7 @@ class ProblemRandomHandler extends ProblemHandler {
}
}
class ProblemDetailHandler extends ProblemHandler {
export class ProblemDetailHandler extends ProblemHandler {
pdoc: Pdoc;
udoc: User;
@@ -233,7 +233,7 @@ class ProblemDetailHandler extends ProblemHandler {
}
}
class ProblemSubmitHandler extends ProblemDetailHandler {
export class ProblemSubmitHandler extends ProblemDetailHandler {
@param('pid', Types.String, null, parsePid)
async get(domainId: string, pid: string | number) {
this.response.template = 'problem_submit.html';
@@ -270,7 +270,7 @@ class ProblemSubmitHandler extends ProblemDetailHandler {
}
}
class ProblemPretestHandler extends ProblemDetailHandler {
export class ProblemPretestHandler extends ProblemDetailHandler {
@param('lang', Types.String)
@param('code', Types.String)
@param('input', Types.String, true)
@@ -292,7 +292,7 @@ class ProblemPretestHandler extends ProblemDetailHandler {
}
}
class ProblemPretestConnectionHandler extends ConnectionHandler {
export class ProblemPretestConnectionHandler extends ConnectionHandler {
pid: string;
domainId: string;
@@ -331,7 +331,7 @@ class ProblemPretestConnectionHandler extends ConnectionHandler {
}
}
class ProblemStatisticsHandler extends ProblemDetailHandler {
export class ProblemStatisticsHandler extends ProblemDetailHandler {
async get(domainId: string) {
const udoc = await user.getById(domainId, this.pdoc.owner);
const path = [
@@ -344,14 +344,14 @@ class ProblemStatisticsHandler extends ProblemDetailHandler {
}
}
class ProblemManageHandler extends ProblemDetailHandler {
export class ProblemManageHandler extends ProblemDetailHandler {
async prepare() {
if (this.pdoc.owner !== this.user._id) this.checkPerm(PERM.PERM_EDIT_PROBLEM);
else this.checkPerm(PERM.PERM_EDIT_PROBLEM_SELF);
}
}
class ProblemSettingsHandler extends ProblemManageHandler {
export class ProblemSettingsHandler extends ProblemManageHandler {
@param('pid', Types.String)
async get(domainId: string, pid: string) {
this.response.template = 'problem_settings.html';
@@ -403,7 +403,7 @@ class ProblemSettingsHandler extends ProblemManageHandler {
}
}
class ProblemEditHandler extends ProblemManageHandler {
export class ProblemEditHandler extends ProblemManageHandler {
async get({ pid }) {
this.response.template = 'problem_edit.html';
this.response.body.path = [
@@ -417,14 +417,15 @@ class ProblemEditHandler extends ProblemManageHandler {
@param('title', Types.String, isTitle)
@param('content', Types.String, isContent)
async post(domainId: string, title: string, content: string) {
const pid = checkPid(this.request.body.pid);
const $update: Partial<Pdoc> = { title, content };
if (this.request.body.pid) $update.pid = checkPid(this.request.body.pid);
const pdoc = await problem.get(domainId, this.request.params.pid);
await problem.edit(domainId, pdoc.docId, { title, content, pid });
await problem.edit(domainId, pdoc.docId, $update);
this.response.redirect = this.url('problem_detail', { pid: this.request.params.pid });
}
}
class ProblemDataUploadHandler extends ProblemManageHandler {
export class ProblemDataUploadHandler extends ProblemManageHandler {
async get() {
if (this.pdoc.data instanceof ObjectID) {
const f = await file.getMeta(this.pdoc.data);
@@ -448,7 +449,7 @@ class ProblemDataUploadHandler extends ProblemManageHandler {
}
}
class ProblemDataDownloadHandler extends ProblemDetailHandler {
export class ProblemDataDownloadHandler extends ProblemDetailHandler {
async get({ pid }) {
if (!this.user.hasPriv(PRIV.PRIV_JUDGE)) {
if (this.user._id !== this.pdoc.owner) {
@@ -480,7 +481,7 @@ class ProblemDataDownloadHandler extends ProblemDetailHandler {
}
}
class ProblemSolutionHandler extends ProblemDetailHandler {
export class ProblemSolutionHandler extends ProblemDetailHandler {
@param('page', Types.PositiveInt, true)
async get(domainId: string, page = 1) {
this.response.template = 'problem_solution.html';
@@ -586,7 +587,7 @@ class ProblemSolutionHandler extends ProblemDetailHandler {
}
}
class ProblemSolutionRawHandler extends ProblemDetailHandler {
export class ProblemSolutionRawHandler extends ProblemDetailHandler {
@param('psid', Types.ObjectID)
async get(domainId: string, psid: ObjectID) {
this.checkPerm(PERM.PERM_VIEW_PROBLEM_SOLUTION);
@@ -596,7 +597,7 @@ class ProblemSolutionRawHandler extends ProblemDetailHandler {
}
}
class ProblemSolutionReplyRawHandler extends ProblemDetailHandler {
export class ProblemSolutionReplyRawHandler extends ProblemDetailHandler {
@param('psid', Types.ObjectID)
@param('psrid', Types.ObjectID)
async get(domainId: string, psid: ObjectID, psrid: ObjectID) {
@@ -608,7 +609,7 @@ class ProblemSolutionReplyRawHandler extends ProblemDetailHandler {
}
}
class ProblemCreateHandler extends Handler {
export class ProblemCreateHandler extends Handler {
async get() {
this.response.template = 'problem_edit.html';
this.checkPerm(PERM.PERM_CREATE_PROBLEM);