Browse Source

默认不公开代码,自己选择公开

pull/6/head
richie 5 years ago
parent
commit
29adbbd353
  1. 1
      .gitignore
  2. 129
      models-built/article-comment.js
  3. 1
      models-built/article-comment.js.map
  4. 194
      models-built/article.js
  5. 1
      models-built/article.js.map
  6. 353
      models-built/common.js
  7. 1
      models-built/common.js.map
  8. 306
      models-built/contest.js
  9. 1
      models-built/contest.js.map
  10. 233
      models-built/contest_player.js
  11. 1
      models-built/contest_player.js.map
  12. 207
      models-built/contest_ranklist.js
  13. 1
      models-built/contest_ranklist.js.map
  14. 207
      models-built/file.js
  15. 1
      models-built/file.js.map
  16. 46
      models-built/formatted_code.js
  17. 1
      models-built/formatted_code.js.map
  18. 382
      models-built/judge_state.js
  19. 1
      models-built/judge_state.js.map
  20. 1079
      models-built/problem.js
  21. 1
      models-built/problem.js.map
  22. 52
      models-built/problem_tag.js
  23. 1
      models-built/problem_tag.js.map
  24. 48
      models-built/problem_tag_map.js
  25. 1
      models-built/problem_tag_map.js.map
  26. 149
      models-built/rating_calculation.js
  27. 1
      models-built/rating_calculation.js.map
  28. 105
      models-built/rating_history.js
  29. 1
      models-built/rating_history.js.map
  30. 71
      models-built/submission_statistics.js
  31. 1
      models-built/submission_statistics.js.map
  32. 428
      models-built/user.js
  33. 1
      models-built/user.js.map
  34. 48
      models-built/user_privilege.js
  35. 1
      models-built/user_privilege.js.map
  36. 10
      models/judge_state.ts
  37. 3
      modules/contest.js
  38. 51
      modules/submission.js
  39. 6
      views/submission.ejs
  40. 2
      views/submissions.ejs
  41. 284
      views/submissions_item.ejs

1
.gitignore vendored

@ -3,7 +3,6 @@ config.json
*.db *.db
.git.* .git.*
package-lock.json package-lock.json
models-built
# Logs # Logs
logs logs

129
models-built/article-comment.js

@ -0,0 +1,129 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
exports.__esModule = true;
var TypeORM = require("typeorm");
var common_1 = require("./common");
var user_1 = require("./user");
var article_1 = require("./article");
var ArticleComment = /** @class */ (function (_super) {
__extends(ArticleComment, _super);
function ArticleComment() {
return _super !== null && _super.apply(this, arguments) || this;
}
ArticleComment.prototype.loadRelationships = function () {
return __awaiter(this, void 0, void 0, function () {
var _a, _b;
return __generator(this, function (_c) {
switch (_c.label) {
case 0:
_a = this;
return [4 /*yield*/, user_1["default"].findById(this.user_id)];
case 1:
_a.user = _c.sent();
_b = this;
return [4 /*yield*/, article_1["default"].findById(this.article_id)];
case 2:
_b.article = _c.sent();
return [2 /*return*/];
}
});
});
};
ArticleComment.prototype.isAllowedEditBy = function (user) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.loadRelationships()];
case 1:
_a.sent();
return [2 /*return*/, user && (user.is_admin || this.user_id === user.id || user.id === this.article.user_id)];
}
});
});
};
__decorate([
TypeORM.PrimaryGeneratedColumn(),
__metadata("design:type", Number)
], ArticleComment.prototype, "id");
__decorate([
TypeORM.Column({ nullable: true, type: "text" }),
__metadata("design:type", String)
], ArticleComment.prototype, "content");
__decorate([
TypeORM.Index(),
TypeORM.Column({ nullable: true, type: "integer" }),
__metadata("design:type", Number)
], ArticleComment.prototype, "article_id");
__decorate([
TypeORM.Index(),
TypeORM.Column({ nullable: true, type: "integer" }),
__metadata("design:type", Number)
], ArticleComment.prototype, "user_id");
__decorate([
TypeORM.Column({ nullable: true, type: "integer" }),
__metadata("design:type", Number)
], ArticleComment.prototype, "public_time");
ArticleComment = __decorate([
TypeORM.Entity()
], ArticleComment);
return ArticleComment;
}(common_1["default"]));
exports["default"] = ArticleComment;
;
//# sourceMappingURL=article-comment.js.map

1
models-built/article-comment.js.map

@ -0,0 +1 @@
{"version":3,"file":"article-comment.js","sourceRoot":"","sources":["../models/article-comment.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iCAAmC;AACnC,mCAA6B;AAE7B,+BAA0B;AAC1B,qCAAgC;AAGhC;IAA4C,kCAAK;IAAjD;;IA8BA,CAAC;IATO,0CAAiB,GAAvB;;;;;;wBACE,KAAA,IAAI,CAAA;wBAAQ,qBAAM,iBAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAA;;wBAA7C,GAAK,IAAI,GAAG,SAAiC,CAAC;wBAC9C,KAAA,IAAI,CAAA;wBAAW,qBAAM,oBAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAA;;wBAAtD,GAAK,OAAO,GAAG,SAAuC,CAAC;;;;;KACxD;IAEK,wCAAe,GAArB,UAAsB,IAAI;;;;4BACxB,qBAAM,IAAI,CAAC,iBAAiB,EAAE,EAAA;;wBAA9B,SAA8B,CAAC;wBAC/B,sBAAO,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAC;;;;KAChG;IA3BD;QADC,OAAO,CAAC,sBAAsB,EAAE;;sCACtB;IAGX;QADC,OAAO,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;2CACjC;IAIhB;QAFC,OAAO,CAAC,KAAK,EAAE;QACf,OAAO,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;;8CACjC;IAInB;QAFC,OAAO,CAAC,KAAK,EAAE;QACf,OAAO,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;;2CACpC;IAGhB;QADC,OAAO,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;;+CAChC;IAhBD,cAAc;QADlC,OAAO,CAAC,MAAM,EAAE;OACI,cAAc,CA8BlC;IAAD,qBAAC;CAAA,AA9BD,CAA4C,mBAAK,GA8BhD;qBA9BoB,cAAc;AA8BlC,CAAC"}

194
models-built/article.js

@ -0,0 +1,194 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
exports.__esModule = true;
var TypeORM = require("typeorm");
var common_1 = require("./common");
var user_1 = require("./user");
var article_comment_1 = require("./article-comment");
var Article = /** @class */ (function (_super) {
__extends(Article, _super);
function Article() {
return _super !== null && _super.apply(this, arguments) || this;
}
Article.prototype.loadRelationships = function () {
return __awaiter(this, void 0, void 0, function () {
var _a;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
_a = this;
return [4 /*yield*/, user_1["default"].findById(this.user_id)];
case 1:
_a.user = _b.sent();
return [2 /*return*/];
}
});
});
};
Article.prototype.isAllowedEditBy = function (user) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2 /*return*/, user && (user.is_admin || this.user_id === user.id)];
});
});
};
Article.prototype.isAllowedCommentBy = function (user) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2 /*return*/, user && (this.allow_comment || user.is_admin || this.user_id === user.id)];
});
});
};
Article.prototype.resetReplyCountAndTime = function () {
return __awaiter(this, void 0, void 0, function () {
var _this = this;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, syzoj.utils.lock(['Article::resetReplyCountAndTime', this.id], function () { return __awaiter(_this, void 0, void 0, function () {
var _a, _b;
return __generator(this, function (_c) {
switch (_c.label) {
case 0:
_a = this;
return [4 /*yield*/, article_comment_1["default"].count({ article_id: this.id })];
case 1:
_a.comments_num = _c.sent();
if (!(this.comments_num === 0)) return [3 /*break*/, 2];
this.sort_time = this.public_time;
return [3 /*break*/, 4];
case 2:
_b = this;
return [4 /*yield*/, article_comment_1["default"].findOne({
where: { article_id: this.id },
order: { public_time: "DESC" }
})];
case 3:
_b.sort_time = (_c.sent()).public_time;
_c.label = 4;
case 4: return [4 /*yield*/, this.save()];
case 5:
_c.sent();
return [2 /*return*/];
}
});
}); })];
case 1:
_a.sent();
return [2 /*return*/];
}
});
});
};
Article.cache = false;
__decorate([
TypeORM.PrimaryGeneratedColumn(),
__metadata("design:type", Number)
], Article.prototype, "id");
__decorate([
TypeORM.Column({ nullable: true, type: "varchar", length: 80 }),
__metadata("design:type", String)
], Article.prototype, "title");
__decorate([
TypeORM.Column({ nullable: true, type: "mediumtext" }),
__metadata("design:type", String)
], Article.prototype, "content");
__decorate([
TypeORM.Index(),
TypeORM.Column({ nullable: true, type: "integer" }),
__metadata("design:type", Number)
], Article.prototype, "user_id");
__decorate([
TypeORM.Index(),
TypeORM.Column({ nullable: true, type: "integer" }),
__metadata("design:type", Number)
], Article.prototype, "problem_id");
__decorate([
TypeORM.Column({ nullable: true, type: "integer" }),
__metadata("design:type", Number)
], Article.prototype, "public_time");
__decorate([
TypeORM.Column({ nullable: true, type: "integer" }),
__metadata("design:type", Number)
], Article.prototype, "update_time");
__decorate([
TypeORM.Index(),
TypeORM.Column({ nullable: true, type: "integer" }),
__metadata("design:type", Number)
], Article.prototype, "sort_time");
__decorate([
TypeORM.Column({ "default": 0, type: "integer" }),
__metadata("design:type", Number)
], Article.prototype, "comments_num");
__decorate([
TypeORM.Column({ "default": true, type: "boolean" }),
__metadata("design:type", Boolean)
], Article.prototype, "allow_comment");
__decorate([
TypeORM.Index(),
TypeORM.Column({ nullable: true, type: "boolean" }),
__metadata("design:type", Boolean)
], Article.prototype, "is_notice");
Article = __decorate([
TypeORM.Entity()
], Article);
return Article;
}(common_1["default"]));
exports["default"] = Article;
;
//# sourceMappingURL=article.js.map

1
models-built/article.js.map

@ -0,0 +1 @@
{"version":3,"file":"article.js","sourceRoot":"","sources":["../models/article.ts"],"names":[],"mappings":"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"}

353
models-built/common.js

@ -0,0 +1,353 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
exports.__esModule = true;
var TypeORM = require("typeorm");
var LRUCache = require("lru-cache");
var DeepCopy = require("deepcopy");
var PaginationType;
(function (PaginationType) {
PaginationType[PaginationType["PREV"] = -1] = "PREV";
PaginationType[PaginationType["NEXT"] = 1] = "NEXT";
})(PaginationType || (PaginationType = {}));
var PaginationIDOrder;
(function (PaginationIDOrder) {
PaginationIDOrder[PaginationIDOrder["ASC"] = 1] = "ASC";
PaginationIDOrder[PaginationIDOrder["DESC"] = -1] = "DESC";
})(PaginationIDOrder || (PaginationIDOrder = {}));
var caches = new Map();
function ensureCache(modelName) {
if (!caches.has(modelName)) {
caches.set(modelName, new LRUCache({
max: syzoj.config.db.cache_size
}));
}
return caches.get(modelName);
}
function cacheGet(modelName, id) {
return ensureCache(modelName).get(parseInt(id));
}
function cacheSet(modelName, id, data) {
if (data == null) {
ensureCache(modelName).del(id);
}
else {
ensureCache(modelName).set(parseInt(id), data);
}
}
var Model = /** @class */ (function (_super) {
__extends(Model, _super);
function Model() {
return _super !== null && _super.apply(this, arguments) || this;
}
Model.findById = function (id) {
return __awaiter(this, void 0, void 0, function () {
var doQuery, resultObject, result;
var _this = this;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
doQuery = function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.findOne(parseInt(id) || 0)];
case 1: return [2 /*return*/, _a.sent()];
}
}); }); };
if (!this.cache) return [3 /*break*/, 2];
resultObject = cacheGet(this.name, id);
if (resultObject) {
return [2 /*return*/, this.create(resultObject)];
}
return [4 /*yield*/, doQuery()];
case 1:
result = _a.sent();
if (result) {
cacheSet(this.name, id, result.toPlain());
}
return [2 /*return*/, result];
case 2: return [4 /*yield*/, doQuery()];
case 3: return [2 /*return*/, _a.sent()];
}
});
});
};
Model.prototype.toPlain = function () {
var _this = this;
var object = {};
TypeORM.getConnection().getMetadata(this.constructor).ownColumns.map(function (column) { return column.propertyName; }).forEach(function (key) {
object[key] = DeepCopy(_this[key]);
});
return object;
};
Model.prototype.destroy = function () {
return __awaiter(this, void 0, void 0, function () {
var id;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
id = this.id;
return [4 /*yield*/, TypeORM.getManager().remove(this)];
case 1:
_a.sent();
return [4 /*yield*/, this.constructor.deleteFromCache(id)];
case 2:
_a.sent();
return [2 /*return*/];
}
});
});
};
Model.deleteFromCache = function (id) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
if (this.cache) {
cacheSet(this.name, id, null);
}
return [2 /*return*/];
});
});
};
Model.prototype.saveHook = function () {
return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) {
return [2 /*return*/];
}); });
};
Model.prototype.save = function () {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.saveHook()];
case 1:
_a.sent();
return [4 /*yield*/, _super.prototype.save.call(this)];
case 2:
_a.sent();
if (this.constructor.cache) {
cacheSet(this.constructor.name, this.id, this);
}
return [2 /*return*/, this];
}
});
});
};
Model.countQuery = function (query) {
return __awaiter(this, void 0, void 0, function () {
var parameters, _a;
var _b;
return __generator(this, function (_c) {
switch (_c.label) {
case 0:
parameters = null;
if (typeof query !== 'string') {
_b = query.getQueryAndParameters(), query = _b[0], parameters = _b[1];
}
_a = parseInt;
return [4 /*yield*/, TypeORM.getManager().query("SELECT COUNT(*) FROM (" + query + ") AS `__tmp_table`", parameters)];
case 1: return [2 /*return*/, _a.apply(void 0, [(_c.sent())[0]['COUNT(*)']])];
}
});
});
};
Model.countForPagination = function (where) {
return __awaiter(this, void 0, void 0, function () {
var queryBuilder;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
queryBuilder = where instanceof TypeORM.SelectQueryBuilder
? where
: this.createQueryBuilder().where(where);
return [4 /*yield*/, queryBuilder.getCount()];
case 1: return [2 /*return*/, _a.sent()];
}
});
});
};
Model.queryAll = function (queryBuilder) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, queryBuilder.getMany()];
case 1: return [2 /*return*/, _a.sent()];
}
});
});
};
Model.queryPage = function (paginater, where, order, largeData) {
if (largeData === void 0) { largeData = false; }
return __awaiter(this, void 0, void 0, function () {
var queryBuilder, rawResult;
var _this = this;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
if (!paginater.pageCnt)
return [2 /*return*/, []];
queryBuilder = where instanceof TypeORM.SelectQueryBuilder
? where
: this.createQueryBuilder().where(where);
if (order)
queryBuilder.orderBy(order);
queryBuilder.skip((paginater.currPage - 1) * paginater.perPage)
.take(paginater.perPage);
if (!largeData) return [3 /*break*/, 3];
return [4 /*yield*/, queryBuilder.select('id').getRawMany()];
case 1:
rawResult = _a.sent();
return [4 /*yield*/, Promise.all(rawResult.map(function (result) { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
return [2 /*return*/, this.findById(result.id)];
}); }); }))];
case 2: return [2 /*return*/, _a.sent()];
case 3: return [2 /*return*/, queryBuilder.getMany()];
}
});
});
};
Model.queryPageFast = function (queryBuilder, _a, idOrder, pageType) {
var currPageTop = _a.currPageTop, currPageBottom = _a.currPageBottom, perPage = _a.perPage;
return __awaiter(this, void 0, void 0, function () {
var queryBuilderBak, result, _b, queryBuilderHasPrev, queryBuilderHasNext;
var _this = this;
return __generator(this, function (_c) {
switch (_c.label) {
case 0:
queryBuilderBak = queryBuilder.clone();
result = {
meta: {
hasPrevPage: false,
hasNextPage: false,
top: 0,
bottom: 0
},
data: []
};
queryBuilder.take(perPage);
if (pageType === PaginationType.PREV) {
if (currPageTop != null) {
queryBuilder.andWhere("id " + (idOrder === PaginationIDOrder.DESC ? '>' : '<') + " :currPageTop", { currPageTop: currPageTop });
queryBuilder.orderBy('id', idOrder === PaginationIDOrder.DESC ? 'ASC' : 'DESC');
}
}
else if (pageType === PaginationType.NEXT) {
if (currPageBottom != null) {
queryBuilder.andWhere("id " + (idOrder === PaginationIDOrder.DESC ? '<' : '>') + " :currPageBottom", { currPageBottom: currPageBottom });
queryBuilder.orderBy('id', idOrder === PaginationIDOrder.DESC ? 'DESC' : 'ASC');
}
}
else
queryBuilder.orderBy('id', idOrder === PaginationIDOrder.DESC ? 'DESC' : 'ASC');
_b = result;
return [4 /*yield*/, queryBuilder.getMany()];
case 1:
_b.data = _c.sent();
result.data.sort(function (a, b) { return (a.id - b.id) * idOrder; });
if (result.data.length === 0)
return [2 /*return*/, result];
queryBuilderHasPrev = queryBuilderBak.clone(), queryBuilderHasNext = queryBuilderBak;
result.meta.top = result.data[0].id;
result.meta.bottom = result.data[result.data.length - 1].id;
// Run two queries in parallel.
return [4 /*yield*/, Promise.all(([
function () { return __awaiter(_this, void 0, void 0, function () {
var _a;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
_a = result.meta;
return [4 /*yield*/, queryBuilderHasPrev.andWhere("id " + (idOrder === PaginationIDOrder.DESC ? '>' : '<') + " :id", {
id: result.meta.top
}).take(1).getOne()];
case 1: return [2 /*return*/, _a.hasPrevPage = !!(_b.sent())];
}
});
}); },
function () { return __awaiter(_this, void 0, void 0, function () {
var _a;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
_a = result.meta;
return [4 /*yield*/, queryBuilderHasNext.andWhere("id " + (idOrder === PaginationIDOrder.DESC ? '<' : '>') + " :id", {
id: result.meta.bottom
}).take(1).getOne()];
case 1: return [2 /*return*/, _a.hasNextPage = !!(_b.sent())];
}
});
}); }
]).map(function (f) { return f(); }))];
case 2:
// Run two queries in parallel.
_c.sent();
return [2 /*return*/, result];
}
});
});
};
Model.queryRange = function (range, where, order) {
return __awaiter(this, void 0, void 0, function () {
var queryBuilder;
return __generator(this, function (_a) {
range[0] = parseInt(range[0]);
range[1] = parseInt(range[1]);
queryBuilder = where instanceof TypeORM.SelectQueryBuilder
? where
: this.createQueryBuilder().where(where);
if (order)
queryBuilder.orderBy(order);
queryBuilder.skip(range[0] - 1)
.take(range[1] - range[0] + 1);
return [2 /*return*/, queryBuilder.getMany()];
});
});
};
Model.cache = false;
return Model;
}(TypeORM.BaseEntity));
exports["default"] = Model;
//# sourceMappingURL=common.js.map

1
models-built/common.js.map

File diff suppressed because one or more lines are too long

306
models-built/contest.js

@ -0,0 +1,306 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
exports.__esModule = true;
var TypeORM = require("typeorm");
var common_1 = require("./common");
var user_1 = require("./user");
var problem_1 = require("./problem");
var contest_ranklist_1 = require("./contest_ranklist");
var contest_player_1 = require("./contest_player");
var ContestType;
(function (ContestType) {
ContestType["NOI"] = "noi";
ContestType["IOI"] = "ioi";
ContestType["ICPC"] = "acm";
})(ContestType || (ContestType = {}));
var Contest = /** @class */ (function (_super) {
__extends(Contest, _super);
function Contest() {
return _super !== null && _super.apply(this, arguments) || this;
}
Contest.prototype.loadRelationships = function () {
return __awaiter(this, void 0, void 0, function () {
var _a, _b;
return __generator(this, function (_c) {
switch (_c.label) {
case 0:
_a = this;
return [4 /*yield*/, user_1["default"].findById(this.holder_id)];
case 1:
_a.holder = _c.sent();
_b = this;
return [4 /*yield*/, contest_ranklist_1["default"].findById(this.ranklist_id)];
case 2:
_b.ranklist = _c.sent();
return [2 /*return*/];
}
});
});
};
Contest.prototype.isSupervisior = function (user) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2 /*return*/, user && (user.is_admin || this.holder_id === user.id || this.admins.split('|').includes(user.id.toString()))];
});
});
};
Contest.prototype.allowedSeeingOthers = function () {
if (this.type === 'acm')
return true;
else
return false;
};
Contest.prototype.allowedSeeingScore = function () {
if (this.type === 'ioi')
return true;
else
return false;
};
Contest.prototype.allowedSeeingResult = function () {
if (this.type === 'ioi' || this.type === 'acm')
return true;
else
return false;
};
Contest.prototype.allowedSeeingTestcase = function () {
if (this.type === 'ioi')
return true;
return false;
};
Contest.prototype.getProblems = function () {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
if (!this.problems)
return [2 /*return*/, []];
return [2 /*return*/, this.problems.split('|').map(function (x) { return parseInt(x); })];
});
});
};
Contest.prototype.setProblemsNoCheck = function (problemIDs) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
this.problems = problemIDs.join('|');
return [2 /*return*/];
});
});
};
Contest.prototype.setProblems = function (s) {
return __awaiter(this, void 0, void 0, function () {
var a;
var _this = this;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
a = [];
return [4 /*yield*/, s.split('|').forEachAsync(function (x) { return __awaiter(_this, void 0, void 0, function () {
var problem;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, problem_1["default"].findById(x)];
case 1:
problem = _a.sent();
if (!problem)
return [2 /*return*/];
a.push(x);
return [2 /*return*/];
}
});
}); })];
case 1:
_a.sent();
this.problems = a.join('|');
return [2 /*return*/];
}
});
});
};
Contest.prototype.newSubmission = function (judge_state) {
return __awaiter(this, void 0, void 0, function () {
var problems;
var _this = this;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
if (!(judge_state.submit_time >= this.start_time && judge_state.submit_time <= this.end_time)) {
return [2 /*return*/];
}
return [4 /*yield*/, this.getProblems()];
case 1:
problems = _a.sent();
if (!problems.includes(judge_state.problem_id))
throw new ErrorMessage('当前比赛中无此题目。');
return [4 /*yield*/, syzoj.utils.lock(['Contest::newSubmission', judge_state.user_id], function () { return __awaiter(_this, void 0, void 0, function () {
var player;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, contest_player_1["default"].findInContest({
contest_id: this.id,
user_id: judge_state.user_id
})];
case 1:
player = _a.sent();
if (!!player) return [3 /*break*/, 4];
return [4 /*yield*/, contest_player_1["default"].create({
contest_id: this.id,
user_id: judge_state.user_id
})];
case 2:
player = _a.sent();
return [4 /*yield*/, player.save()];
case 3:
_a.sent();
_a.label = 4;
case 4: return [4 /*yield*/, player.updateScore(judge_state)];
case 5:
_a.sent();
return [4 /*yield*/, player.save()];
case 6:
_a.sent();
return [4 /*yield*/, this.loadRelationships()];
case 7:
_a.sent();
return [4 /*yield*/, this.ranklist.updatePlayer(this, player)];
case 8:
_a.sent();
return [4 /*yield*/, this.ranklist.save()];
case 9:
_a.sent();
return [2 /*return*/];
}
});
}); })];
case 2:
_a.sent();
return [2 /*return*/];
}
});
});
};
Contest.prototype.isRunning = function (now) {
if (!now)
now = syzoj.utils.getCurrentDate();
return now >= this.start_time && now < this.end_time;
};
Contest.prototype.isEnded = function (now) {
if (!now)
now = syzoj.utils.getCurrentDate();
return now >= this.end_time;
};
Contest.cache = true;
__decorate([
TypeORM.PrimaryGeneratedColumn(),
__metadata("design:type", Number)
], Contest.prototype, "id");
__decorate([
TypeORM.Column({ nullable: true, type: "varchar", length: 80 }),
__metadata("design:type", String)
], Contest.prototype, "title");
__decorate([
TypeORM.Column({ nullable: true, type: "text" }),
__metadata("design:type", String)
], Contest.prototype, "subtitle");
__decorate([
TypeORM.Column({ nullable: true, type: "integer" }),
__metadata("design:type", Number)
], Contest.prototype, "start_time");
__decorate([
TypeORM.Column({ nullable: true, type: "integer" }),
__metadata("design:type", Number)
], Contest.prototype, "end_time");
__decorate([
TypeORM.Index(),
TypeORM.Column({ nullable: true, type: "integer" }),
__metadata("design:type", Number)
], Contest.prototype, "holder_id");
__decorate([
TypeORM.Column({ nullable: true, type: "enum", "enum": ContestType }),
__metadata("design:type", String)
], Contest.prototype, "type");
__decorate([
TypeORM.Column({ nullable: true, type: "text" }),
__metadata("design:type", String)
], Contest.prototype, "information");
__decorate([
TypeORM.Column({ nullable: true, type: "text" }),
__metadata("design:type", String)
], Contest.prototype, "problems");
__decorate([
TypeORM.Column({ nullable: true, type: "text" }),
__metadata("design:type", String)
], Contest.prototype, "admins");
__decorate([
TypeORM.Index(),
TypeORM.Column({ nullable: true, type: "integer" }),
__metadata("design:type", Number)
], Contest.prototype, "ranklist_id");
__decorate([
TypeORM.Column({ nullable: true, type: "boolean" }),
__metadata("design:type", Boolean)
], Contest.prototype, "is_public");
__decorate([
TypeORM.Column({ nullable: true, type: "boolean" }),
__metadata("design:type", Boolean)
], Contest.prototype, "hide_statistics");
Contest = __decorate([
TypeORM.Entity()
], Contest);
return Contest;
}(common_1["default"]));
exports["default"] = Contest;
//# sourceMappingURL=contest.js.map

1
models-built/contest.js.map

@ -0,0 +1 @@
{"version":3,"file":"contest.js","sourceRoot":"","sources":["../models/contest.ts"],"names":[],"mappings":"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"}

233
models-built/contest_player.js

@ -0,0 +1,233 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
exports.__esModule = true;
var TypeORM = require("typeorm");
var common_1 = require("./common");
var user_1 = require("./user");
var contest_1 = require("./contest");
var ContestPlayer = /** @class */ (function (_super) {
__extends(ContestPlayer, _super);
function ContestPlayer() {
return _super !== null && _super.apply(this, arguments) || this;
}
ContestPlayer_1 = ContestPlayer;
ContestPlayer.findInContest = function (where) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2 /*return*/, ContestPlayer_1.findOne({ where: where })];
});
});
};
ContestPlayer.prototype.loadRelationships = function () {
return __awaiter(this, void 0, void 0, function () {
var _a, _b;
return __generator(this, function (_c) {
switch (_c.label) {
case 0:
_a = this;
return [4 /*yield*/, user_1["default"].findById(this.user_id)];
case 1:
_a.user = _c.sent();
_b = this;
return [4 /*yield*/, contest_1["default"].findById(this.contest_id)];
case 2:
_b.contest = _c.sent();
return [2 /*return*/];
}
});
});
};
ContestPlayer.prototype.updateScore = function (judge_state) {
return __awaiter(this, void 0, void 0, function () {
var arr, maxScoreSubmission, _i, arr_1, x, x, x, arr, _a, arr_2, x, x;
return __generator(this, function (_b) {
switch (_b.label) {
case 0: return [4 /*yield*/, this.loadRelationships()];
case 1:
_b.sent();
if (this.contest.type === 'ioi') {
if (!judge_state.pending) {
if (!this.score_details[judge_state.problem_id]) {
this.score_details[judge_state.problem_id] = {
score: judge_state.score,
judge_id: judge_state.id,
submissions: {}
};
}
this.score_details[judge_state.problem_id].submissions[judge_state.id] = {
judge_id: judge_state.id,
score: judge_state.score,
time: judge_state.submit_time
};
arr = Object.values(this.score_details[judge_state.problem_id].submissions);
arr.sort(function (a, b) { return a.time - b.time; });
maxScoreSubmission = null;
for (_i = 0, arr_1 = arr; _i < arr_1.length; _i++) {
x = arr_1[_i];
if (!maxScoreSubmission || x.score >= maxScoreSubmission.score && maxScoreSubmission.score < 100) {
maxScoreSubmission = x;
}
}
this.score_details[judge_state.problem_id].judge_id = maxScoreSubmission.judge_id;
this.score_details[judge_state.problem_id].score = maxScoreSubmission.score;
this.score_details[judge_state.problem_id].time = maxScoreSubmission.time;
this.score = 0;
for (x in this.score_details) {
if (this.score != null)
this.score += this.score_details[x].score;
}
}
}
else if (this.contest.type === 'noi') {
if (this.score_details[judge_state.problem_id] && this.score_details[judge_state.problem_id].judge_id > judge_state.id)
return [2 /*return*/];
this.score_details[judge_state.problem_id] = {
score: judge_state.score,
judge_id: judge_state.id
};
this.score = 0;
for (x in this.score_details) {
if (this.score != null)
this.score += this.score_details[x].score;
}
}
else if (this.contest.type === 'acm') {
if (!judge_state.pending) {
if (!this.score_details[judge_state.problem_id]) {
this.score_details[judge_state.problem_id] = {
accepted: false,
unacceptedCount: 0,
acceptedTime: 0,
judge_id: 0,
submissions: {}
};
}
this.score_details[judge_state.problem_id].submissions[judge_state.id] = {
judge_id: judge_state.id,
accepted: judge_state.status === 'Accepted',
compiled: judge_state.score != null,
time: judge_state.submit_time
};
arr = Object.values(this.score_details[judge_state.problem_id].submissions);
arr.sort(function (a, b) { return a.time - b.time; });
this.score_details[judge_state.problem_id].unacceptedCount = 0;
this.score_details[judge_state.problem_id].judge_id = 0;
this.score_details[judge_state.problem_id].accepted = 0;
for (_a = 0, arr_2 = arr; _a < arr_2.length; _a++) {
x = arr_2[_a];
if (x.accepted) {
this.score_details[judge_state.problem_id].accepted = true;
this.score_details[judge_state.problem_id].acceptedTime = x.time;
this.score_details[judge_state.problem_id].judge_id = x.judge_id;
break;
}
else if (x.compiled) {
this.score_details[judge_state.problem_id].unacceptedCount++;
}
}
if (!this.score_details[judge_state.problem_id].accepted) {
this.score_details[judge_state.problem_id].judge_id = arr[arr.length - 1].judge_id;
}
this.score = 0;
for (x in this.score_details) {
if (this.score_details[x].accepted)
this.score++;
}
}
}
return [2 /*return*/];
}
});
});
};
var ContestPlayer_1;
ContestPlayer.cache = true;
__decorate([
TypeORM.PrimaryGeneratedColumn(),
__metadata("design:type", Number)
], ContestPlayer.prototype, "id");
__decorate([
TypeORM.Index(),
TypeORM.Column({ nullable: true, type: "integer" }),
__metadata("design:type", Number)
], ContestPlayer.prototype, "contest_id");
__decorate([
TypeORM.Index(),
TypeORM.Column({ nullable: true, type: "integer" }),
__metadata("design:type", Number)
], ContestPlayer.prototype, "user_id");
__decorate([
TypeORM.Column({ nullable: true, type: "integer" }),
__metadata("design:type", Number)
], ContestPlayer.prototype, "score");
__decorate([
TypeORM.Column({ "default": JSON.stringify({}), type: "json" }),
__metadata("design:type", Object)
], ContestPlayer.prototype, "score_details");
__decorate([
TypeORM.Column({ nullable: true, type: "integer" }),
__metadata("design:type", Number)
], ContestPlayer.prototype, "time_spent");
ContestPlayer = ContestPlayer_1 = __decorate([
TypeORM.Entity()
], ContestPlayer);
return ContestPlayer;
}(common_1["default"]));
exports["default"] = ContestPlayer;
//# sourceMappingURL=contest_player.js.map

1
models-built/contest_player.js.map

File diff suppressed because one or more lines are too long

207
models-built/contest_ranklist.js

@ -0,0 +1,207 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
exports.__esModule = true;
var TypeORM = require("typeorm");
var common_1 = require("./common");
var contest_player_1 = require("./contest_player");
var judge_state_1 = require("./judge_state");
var ContestRanklist = /** @class */ (function (_super) {
__extends(ContestRanklist, _super);
function ContestRanklist() {
return _super !== null && _super.apply(this, arguments) || this;
}
ContestRanklist.prototype.getPlayers = function () {
return __awaiter(this, void 0, void 0, function () {
var a, i, _a, _b;
return __generator(this, function (_c) {
switch (_c.label) {
case 0:
a = [];
i = 1;
_c.label = 1;
case 1:
if (!(i <= this.ranklist.player_num)) return [3 /*break*/, 4];
_b = (_a = a).push;
return [4 /*yield*/, contest_player_1["default"].findById(this.ranklist[i])];
case 2:
_b.apply(_a, [_c.sent()]);
_c.label = 3;
case 3:
i++;
return [3 /*break*/, 1];
case 4: return [2 /*return*/, a];
}
});
});
};
ContestRanklist.prototype.updatePlayer = function (contest, player) {
return __awaiter(this, void 0, void 0, function () {
var players, newPlayer, _i, players_1, x, _a, players_2, player_1, _b, _c, _d, i, judge_state, multiplier, _e, players_3, player_2, i, i;
return __generator(this, function (_f) {
switch (_f.label) {
case 0: return [4 /*yield*/, this.getPlayers()];
case 1:
players = _f.sent(), newPlayer = true;
for (_i = 0, players_1 = players; _i < players_1.length; _i++) {
x = players_1[_i];
if (x.user_id === player.user_id) {
newPlayer = false;
break;
}
}
if (newPlayer) {
players.push(player);
}
if (!(contest.type === 'noi' || contest.type === 'ioi')) return [3 /*break*/, 8];
_a = 0, players_2 = players;
_f.label = 2;
case 2:
if (!(_a < players_2.length)) return [3 /*break*/, 7];
player_1 = players_2[_a];
player_1.latest = 0;
player_1.score = 0;
_b = [];
for (_c in player_1.score_details)
_b.push(_c);
_d = 0;
_f.label = 3;
case 3:
if (!(_d < _b.length)) return [3 /*break*/, 6];
i = _b[_d];
return [4 /*yield*/, judge_state_1["default"].findById(player_1.score_details[i].judge_id)];
case 4:
judge_state = _f.sent();
if (!judge_state)
return [3 /*break*/, 5];
player_1.latest = Math.max(player_1.latest, judge_state.submit_time);
if (player_1.score_details[i].score != null) {
multiplier = this.ranking_params[i] || 1.0;
player_1.score_details[i].weighted_score = Math.round(player_1.score_details[i].score * multiplier);
player_1.score += player_1.score_details[i].weighted_score;
}
_f.label = 5;
case 5:
_d++;
return [3 /*break*/, 3];
case 6:
_a++;
return [3 /*break*/, 2];
case 7:
players.sort(function (a, b) {
if (a.score > b.score)
return -1;
if (b.score > a.score)
return 1;
if (a.latest < b.latest)
return -1;
if (a.latest > b.latest)
return 1;
return 0;
});
return [3 /*break*/, 9];
case 8:
for (_e = 0, players_3 = players; _e < players_3.length; _e++) {
player_2 = players_3[_e];
player_2.timeSum = 0;
for (i in player_2.score_details) {
if (player_2.score_details[i].accepted) {
player_2.timeSum += (player_2.score_details[i].acceptedTime - contest.start_time) + (player_2.score_details[i].unacceptedCount * 20 * 60);
}
}
}
players.sort(function (a, b) {
if (a.score > b.score)
return -1;
if (b.score > a.score)
return 1;
if (a.timeSum < b.timeSum)
return -1;
if (a.timeSum > b.timeSum)
return 1;
return 0;
});
_f.label = 9;
case 9:
this.ranklist = { player_num: players.length };
for (i = 0; i < players.length; i++)
this.ranklist[i + 1] = players[i].id;
return [2 /*return*/];
}
});
});
};
__decorate([
TypeORM.PrimaryGeneratedColumn(),
__metadata("design:type", Number)
], ContestRanklist.prototype, "id");
__decorate([
TypeORM.Column({ nullable: true, type: "json" }),
__metadata("design:type", Object)
], ContestRanklist.prototype, "ranking_params");
__decorate([
TypeORM.Column({ "default": JSON.stringify({ player_num: 0 }), type: "json" }),
__metadata("design:type", Object)
], ContestRanklist.prototype, "ranklist");
ContestRanklist = __decorate([
TypeORM.Entity()
], ContestRanklist);
return ContestRanklist;
}(common_1["default"]));
exports["default"] = ContestRanklist;
//# sourceMappingURL=contest_ranklist.js.map

1
models-built/contest_ranklist.js.map

@ -0,0 +1 @@
{"version":3,"file":"contest_ranklist.js","sourceRoot":"","sources":["../models/contest_ranklist.ts"],"names":[],"mappings":"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"}

207
models-built/file.js

@ -0,0 +1,207 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
exports.__esModule = true;
var TypeORM = require("typeorm");
var common_1 = require("./common");
var fs = require("fs-extra");
var File = /** @class */ (function (_super) {
__extends(File, _super);
function File() {
return _super !== null && _super.apply(this, arguments) || this;
}
File_1 = File;
File.prototype.getPath = function () {
return File_1.resolvePath(this.type, this.md5);
};
File.resolvePath = function (type, md5) {
return syzoj.utils.resolvePath(syzoj.config.upload_dir, type, md5);
};
// data: Array of { filename: string, data: buffer or string }
File.zipFiles = function (files) {
return __awaiter(this, void 0, void 0, function () {
var tmp, dir, path, fs, filenames, p7zip, zipFile;
var _this = this;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
tmp = require('tmp-promise');
return [4 /*yield*/, tmp.dir()];
case 1:
dir = _a.sent(), path = require('path'), fs = require('fs-extra');
return [4 /*yield*/, files.mapAsync(function (file) { return __awaiter(_this, void 0, void 0, function () {
var fullPath;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
fullPath = path.join(dir.path, file.filename);
return [4 /*yield*/, fs.writeFileAsync(fullPath, file.data)];
case 1:
_a.sent();
return [2 /*return*/, fullPath];
}
});
}); })];
case 2:
filenames = _a.sent();
p7zip = new (require('node-7z'));
return [4 /*yield*/, tmp.tmpName()];
case 3:
zipFile = (_a.sent()) + '.zip';
return [4 /*yield*/, p7zip.add(zipFile, filenames)];
case 4:
_a.sent();
return [4 /*yield*/, fs.removeAsync(dir.path)];
case 5:
_a.sent();
return [2 /*return*/, zipFile];
}
});
});
};
File.upload = function (path, type, noLimit) {
return __awaiter(this, void 0, void 0, function () {
var buf, key, file;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, fs.readFile(path)];
case 1:
buf = _a.sent();
if (!noLimit && buf.length > syzoj.config.limit.data_size)
throw new ErrorMessage('数据包太大。');
key = syzoj.utils.md5(buf);
return [4 /*yield*/, fs.move(path, File_1.resolvePath(type, key), { overwrite: true })];
case 2:
_a.sent();
return [4 /*yield*/, File_1.findOne({ where: { md5: key } })];
case 3:
file = _a.sent();
if (!!file) return [3 /*break*/, 6];
return [4 /*yield*/, File_1.create({
type: type,
md5: key
})];
case 4:
file = _a.sent();
return [4 /*yield*/, file.save()];
case 5:
_a.sent();
_a.label = 6;
case 6: return [2 /*return*/, file];
}
});
});
};
File.prototype.getUnzipSize = function () {
return __awaiter(this, void 0, void 0, function () {
var p7zip, e_1;
var _this = this;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
if (!(this.unzipSize === undefined)) return [3 /*break*/, 4];
_a.label = 1;
case 1:
_a.trys.push([1, 3, , 4]);
p7zip = new (require('node-7z'));
this.unzipSize = 0;
return [4 /*yield*/, p7zip.list(this.getPath()).progress(function (files) {
for (var _i = 0, files_1 = files; _i < files_1.length; _i++) {
var file = files_1[_i];
_this.unzipSize += file.size;
}
})];
case 2:
_a.sent();
return [3 /*break*/, 4];
case 3:
e_1 = _a.sent();
this.unzipSize = null;
return [3 /*break*/, 4];
case 4:
if (this.unzipSize === null)
throw new ErrorMessage('无效的 ZIP 文件。');
else
return [2 /*return*/, this.unzipSize];
return [2 /*return*/];
}
});
});
};
var File_1;
__decorate([
TypeORM.PrimaryGeneratedColumn(),
__metadata("design:type", Number)
], File.prototype, "id");
__decorate([
TypeORM.Index(),
TypeORM.Column({ nullable: true, type: "varchar", length: 80 }),
__metadata("design:type", String)
], File.prototype, "type");
__decorate([
TypeORM.Index({ unique: true }),
TypeORM.Column({ nullable: true, type: "varchar", length: 80 }),
__metadata("design:type", String)
], File.prototype, "md5");
File = File_1 = __decorate([
TypeORM.Entity()
], File);
return File;
}(common_1["default"]));
exports["default"] = File;
//# sourceMappingURL=file.js.map

1
models-built/file.js.map

@ -0,0 +1 @@
{"version":3,"file":"file.js","sourceRoot":"","sources":["../models/file.ts"],"names":[],"mappings":"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"}

46
models-built/formatted_code.js

@ -0,0 +1,46 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
exports.__esModule = true;
var TypeORM = require("typeorm");
var common_1 = require("./common");
var FormattedCode = /** @class */ (function (_super) {
__extends(FormattedCode, _super);
function FormattedCode() {
return _super !== null && _super.apply(this, arguments) || this;
}
__decorate([
TypeORM.PrimaryColumn({ type: "varchar", length: 50 }),
__metadata("design:type", String)
], FormattedCode.prototype, "key");
__decorate([
TypeORM.Column({ nullable: true, type: "mediumtext" }),
__metadata("design:type", String)
], FormattedCode.prototype, "code");
FormattedCode = __decorate([
TypeORM.Entity()
], FormattedCode);
return FormattedCode;
}(common_1["default"]));
exports["default"] = FormattedCode;
//# sourceMappingURL=formatted_code.js.map

1
models-built/formatted_code.js.map

@ -0,0 +1 @@
{"version":3,"file":"formatted_code.js","sourceRoot":"","sources":["../models/formatted_code.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA,iCAAmC;AACnC,mCAA6B;AAG7B;IAA2C,iCAAK;IAAhD;;IAMA,CAAC;IAJC;QADC,OAAO,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;;sCAC3C;IAGZ;QADC,OAAO,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;;uCAC1C;IALM,aAAa;QADjC,OAAO,CAAC,MAAM,EAAE;OACI,aAAa,CAMjC;IAAD,oBAAC;CAAA,AAND,CAA2C,mBAAK,GAM/C;qBANoB,aAAa"}

382
models-built/judge_state.js

@ -0,0 +1,382 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
exports.__esModule = true;
var TypeORM = require("typeorm");
var common_1 = require("./common");
var user_1 = require("./user");
var problem_1 = require("./problem");
var contest_1 = require("./contest");
var Judger = syzoj.lib('judger');
var Status;
(function (Status) {
Status["ACCEPTED"] = "Accepted";
Status["COMPILE_ERROR"] = "Compile Error";
Status["FILE_ERROR"] = "File Error";
Status["INVALID_INTERACTION"] = "Invalid Interaction";
Status["JUDGEMENT_FAILED"] = "Judgement Failed";
Status["MEMORY_LIMIT_EXCEEDED"] = "Memory Limit Exceeded";
Status["NO_TESTDATA"] = "No Testdata";
Status["OUTPUT_LIMIT_EXCEEDED"] = "Output Limit Exceeded";
Status["PARTIALLY_CORRECT"] = "Partially Correct";
Status["RUNTIME_ERROR"] = "Runtime Error";
Status["SYSTEM_ERROR"] = "System Error";
Status["TIME_LIMIT_EXCEEDED"] = "Time Limit Exceeded";
Status["UNKNOWN"] = "Unknown";
Status["WRONG_ANSWER"] = "Wrong Answer";
Status["WAITING"] = "Waiting";
})(Status || (Status = {}));
var JudgeState = /** @class */ (function (_super) {
__extends(JudgeState, _super);
function JudgeState() {
return _super !== null && _super.apply(this, arguments) || this;
}
JudgeState.prototype.loadRelationships = function () {
return __awaiter(this, void 0, void 0, function () {
var _a, _b;
return __generator(this, function (_c) {
switch (_c.label) {
case 0:
if (!!this.user) return [3 /*break*/, 2];
_a = this;
return [4 /*yield*/, user_1["default"].findById(this.user_id)];
case 1:
_a.user = _c.sent();
_c.label = 2;
case 2:
if (!!this.problem) return [3 /*break*/, 4];
if (!this.problem_id) return [3 /*break*/, 4];
_b = this;
return [4 /*yield*/, problem_1["default"].findById(this.problem_id)];
case 3:
_b.problem = _c.sent();
_c.label = 4;
case 4: return [2 /*return*/];
}
});
});
};
JudgeState.prototype.saveHook = function () {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
if (this.score === null)
this.score = 0;
return [2 /*return*/];
});
});
};
JudgeState.prototype.isAllowedVisitBy = function (user) {
return __awaiter(this, void 0, void 0, function () {
var _a, _b, contest, _c;
return __generator(this, function (_d) {
switch (_d.label) {
case 0: return [4 /*yield*/, this.loadRelationships()];
case 1:
_d.sent();
if (!(user && user.id === this.problem.user_id)) return [3 /*break*/, 2];
return [2 /*return*/, true];
case 2:
if (!(this.type === 0)) return [3 /*break*/, 6];
_a = this.problem.is_public;
if (_a) return [3 /*break*/, 5];
_b = user;
if (!_b) return [3 /*break*/, 4];
return [4 /*yield*/, user.hasPrivilege('manage_problem')];
case 3:
_b = (_d.sent());
_d.label = 4;
case 4:
_a = (_b);
_d.label = 5;
case 5: return [2 /*return*/, _a];
case 6:
if (!(this.type === 1)) return [3 /*break*/, 11];
return [4 /*yield*/, contest_1["default"].findById(this.type_info)];
case 7:
contest = _d.sent();
if (!contest.isRunning()) return [3 /*break*/, 10];
_c = user;
if (!_c) return [3 /*break*/, 9];
return [4 /*yield*/, contest.isSupervisior(user)];
case 8:
_c = (_d.sent());
_d.label = 9;
case 9: return [2 /*return*/, _c];
case 10: return [2 /*return*/, true];
case 11: return [2 /*return*/];
}
});
});
};
JudgeState.prototype.updateRelatedInfo = function (newSubmission) {
return __awaiter(this, void 0, void 0, function () {
var promises, contest;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
if (!(this.type === 0)) return [3 /*break*/, 3];
return [4 /*yield*/, this.loadRelationships()];
case 1:
_a.sent();
promises = [];
promises.push(this.user.refreshSubmitInfo());
promises.push(this.problem.resetSubmissionCount());
if (!newSubmission) {
promises.push(this.problem.updateStatistics(this.user_id));
}
return [4 /*yield*/, Promise.all(promises)];
case 2:
_a.sent();
return [3 /*break*/, 6];
case 3:
if (!(this.type === 1)) return [3 /*break*/, 6];
return [4 /*yield*/, contest_1["default"].findById(this.type_info)];
case 4:
contest = _a.sent();
return [4 /*yield*/, contest.newSubmission(this)];
case 5:
_a.sent();
_a.label = 6;
case 6: return [2 /*return*/];
}
});
});
};
JudgeState.prototype.rejudge = function () {
return __awaiter(this, void 0, void 0, function () {
var _this = this;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, syzoj.utils.lock(['JudgeState::rejudge', this.id], function () { return __awaiter(_this, void 0, void 0, function () {
var oldStatus, err_1;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.loadRelationships()];
case 1:
_a.sent();
oldStatus = this.status;
this.status = Status.UNKNOWN;
this.pending = false;
this.score = null;
if (this.language) {
// language is empty if it's a submit-answer problem
this.total_time = null;
this.max_memory = null;
}
this.result = {};
this.task_id = require('randomstring').generate(10);
return [4 /*yield*/, this.save()];
case 2:
_a.sent();
return [4 /*yield*/, this.updateRelatedInfo(false)];
case 3:
_a.sent();
_a.label = 4;
case 4:
_a.trys.push([4, 7, , 8]);
return [4 /*yield*/, Judger.judge(this, this.problem, 1)];
case 5:
_a.sent();
this.pending = true;
this.status = Status.WAITING;
return [4 /*yield*/, this.save()];
case 6:
_a.sent();
return [3 /*break*/, 8];
case 7:
err_1 = _a.sent();
console.log("Error while connecting to judge frontend: " + err_1.toString());
throw new ErrorMessage("无法开始评测。");
case 8: return [2 /*return*/];
}
});
}); })];
case 1:
_a.sent();
return [2 /*return*/];
}
});
});
};
JudgeState.prototype.getProblemType = function () {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.loadRelationships()];
case 1:
_a.sent();
return [2 /*return*/, this.problem.type];
}
});
});
};
JudgeState.prototype.share = function () {
return __awaiter(this, void 0, void 0, function () {
var err_2;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
this.is_public = true;
_a.label = 1;
case 1:
_a.trys.push([1, 3, , 4]);
return [4 /*yield*/, this.save()];
case 2:
_a.sent();
return [3 /*break*/, 4];
case 3:
err_2 = _a.sent();
console.log("Error while share this judge:" + err_2.toString());
throw new ErrorMessage("分享失败。");
case 4: return [2 /*return*/];
}
});
});
};
__decorate([
TypeORM.PrimaryGeneratedColumn(),
__metadata("design:type", Number)
], JudgeState.prototype, "id");
__decorate([
TypeORM.Column({ nullable: true, type: "mediumtext" }),
__metadata("design:type", String)
], JudgeState.prototype, "code");
__decorate([
TypeORM.Column({ nullable: true, type: "varchar", length: 20 }),
__metadata("design:type", String)
], JudgeState.prototype, "language");
__decorate([
TypeORM.Index(),
TypeORM.Column({ nullable: true, type: "enum", "enum": Status }),
__metadata("design:type", String)
], JudgeState.prototype, "status");
__decorate([
TypeORM.Index(),
TypeORM.Column({ nullable: true, type: "varchar", length: 50 }),
__metadata("design:type", String)
], JudgeState.prototype, "task_id");
__decorate([
TypeORM.Index(),
TypeORM.Column({ nullable: true, type: "integer", "default": 0 }),
__metadata("design:type", Number)
], JudgeState.prototype, "score");
__decorate([
TypeORM.Column({ nullable: true, type: "integer", "default": 0 }),
__metadata("design:type", Number)
], JudgeState.prototype, "total_time");
__decorate([
TypeORM.Column({ nullable: true, type: "integer", "default": 0 }),
__metadata("design:type", Number)
], JudgeState.prototype, "code_length");
__decorate([
TypeORM.Column({ nullable: true, type: "boolean", "default": 0 }),
__metadata("design:type", Boolean)
], JudgeState.prototype, "pending");
__decorate([
TypeORM.Column({ nullable: true, type: "integer", "default": 0 }),
__metadata("design:type", Number)
], JudgeState.prototype, "max_memory");
__decorate([
TypeORM.Column({ nullable: true, type: "json" }),
__metadata("design:type", Object)
], JudgeState.prototype, "compilation");
__decorate([
TypeORM.Column({ nullable: true, type: "json" }),
__metadata("design:type", Object)
], JudgeState.prototype, "result");
__decorate([
TypeORM.Index(),
TypeORM.Column({ nullable: true, type: "integer" }),
__metadata("design:type", Number)
], JudgeState.prototype, "user_id");
__decorate([
TypeORM.Index(),
TypeORM.Column({ nullable: true, type: "integer" }),
__metadata("design:type", Number)
], JudgeState.prototype, "problem_id");
__decorate([
TypeORM.Index(),
TypeORM.Column({ nullable: true, type: "integer" }),
__metadata("design:type", Number)
], JudgeState.prototype, "submit_time");
__decorate([
TypeORM.Column({ nullable: true, type: "integer" }),
__metadata("design:type", Number)
], JudgeState.prototype, "type");
__decorate([
TypeORM.Column({ nullable: true, type: "integer" }),
__metadata("design:type", Number)
], JudgeState.prototype, "type_info");
__decorate([
TypeORM.Index(),
TypeORM.Column({ nullable: true, type: "boolean" }),
__metadata("design:type", Boolean)
], JudgeState.prototype, "is_public");
JudgeState = __decorate([
TypeORM.Entity(),
TypeORM.Index(['type', 'type_info']),
TypeORM.Index(['type', 'is_public', 'language', 'status', 'problem_id']),
TypeORM.Index(['type', 'is_public', 'status', 'problem_id']),
TypeORM.Index(['type', 'is_public', 'problem_id']),
TypeORM.Index(['type', 'is_public', 'language', 'problem_id']),
TypeORM.Index(['problem_id', 'type', 'pending', 'score'])
], JudgeState);
return JudgeState;
}(common_1["default"]));
exports["default"] = JudgeState;
//# sourceMappingURL=judge_state.js.map

1
models-built/judge_state.js.map

File diff suppressed because one or more lines are too long

1079
models-built/problem.js

File diff suppressed because it is too large Load Diff

1
models-built/problem.js.map

File diff suppressed because one or more lines are too long

52
models-built/problem_tag.js

@ -0,0 +1,52 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
exports.__esModule = true;
var TypeORM = require("typeorm");
var common_1 = require("./common");
var ProblemTag = /** @class */ (function (_super) {
__extends(ProblemTag, _super);
function ProblemTag() {
return _super !== null && _super.apply(this, arguments) || this;
}
ProblemTag.cache = true;
__decorate([
TypeORM.PrimaryGeneratedColumn(),
__metadata("design:type", Number)
], ProblemTag.prototype, "id");
__decorate([
TypeORM.Index({ unique: true }),
TypeORM.Column({ nullable: true, type: "varchar", length: 255 }),
__metadata("design:type", String)
], ProblemTag.prototype, "name");
__decorate([
TypeORM.Column({ nullable: true, type: "varchar", length: 255 }),
__metadata("design:type", String)
], ProblemTag.prototype, "color");
ProblemTag = __decorate([
TypeORM.Entity()
], ProblemTag);
return ProblemTag;
}(common_1["default"]));
exports["default"] = ProblemTag;
//# sourceMappingURL=problem_tag.js.map

1
models-built/problem_tag.js.map

@ -0,0 +1 @@
{"version":3,"file":"problem_tag.js","sourceRoot":"","sources":["../models/problem_tag.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA,iCAAmC;AACnC,mCAA6B;AAG7B;IAAwC,8BAAK;IAA7C;;IAYA,CAAC;IAXQ,gBAAK,GAAG,IAAI,CAAC;IAGpB;QADC,OAAO,CAAC,sBAAsB,EAAE;;kCACtB;IAIX;QAFC,OAAO,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QAC/B,OAAO,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;;oCACpD;IAGb;QADC,OAAO,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;;qCACnD;IAXK,UAAU;QAD9B,OAAO,CAAC,MAAM,EAAE;OACI,UAAU,CAY9B;IAAD,iBAAC;CAAA,AAZD,CAAwC,mBAAK,GAY5C;qBAZoB,UAAU"}

48
models-built/problem_tag_map.js

@ -0,0 +1,48 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
exports.__esModule = true;
var TypeORM = require("typeorm");
var common_1 = require("./common");
var ProblemTagMap = /** @class */ (function (_super) {
__extends(ProblemTagMap, _super);
function ProblemTagMap() {
return _super !== null && _super.apply(this, arguments) || this;
}
__decorate([
TypeORM.Index(),
TypeORM.PrimaryColumn({ type: "integer" }),
__metadata("design:type", Number)
], ProblemTagMap.prototype, "problem_id");
__decorate([
TypeORM.Index(),
TypeORM.PrimaryColumn({ type: "integer" }),
__metadata("design:type", Number)
], ProblemTagMap.prototype, "tag_id");
ProblemTagMap = __decorate([
TypeORM.Entity()
], ProblemTagMap);
return ProblemTagMap;
}(common_1["default"]));
exports["default"] = ProblemTagMap;
//# sourceMappingURL=problem_tag_map.js.map

1
models-built/problem_tag_map.js.map

@ -0,0 +1 @@
{"version":3,"file":"problem_tag_map.js","sourceRoot":"","sources":["../models/problem_tag_map.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA,iCAAmC;AACnC,mCAA6B;AAG7B;IAA2C,iCAAK;IAAhD;;IAQA,CAAC;IALC;QAFC,OAAO,CAAC,KAAK,EAAE;QACf,OAAO,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;;6CACxB;IAInB;QAFC,OAAO,CAAC,KAAK,EAAE;QACf,OAAO,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;;yCAC5B;IAPI,aAAa;QADjC,OAAO,CAAC,MAAM,EAAE;OACI,aAAa,CAQjC;IAAD,oBAAC;CAAA,AARD,CAA2C,mBAAK,GAQ/C;qBARoB,aAAa"}

149
models-built/rating_calculation.js

@ -0,0 +1,149 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
exports.__esModule = true;
var TypeORM = require("typeorm");
var common_1 = require("./common");
var contest_1 = require("./contest");
var rating_history_1 = require("./rating_history");
var RatingCalculation = /** @class */ (function (_super) {
__extends(RatingCalculation, _super);
function RatingCalculation() {
return _super !== null && _super.apply(this, arguments) || this;
}
RatingCalculation.prototype.loadRelationships = function () {
return __awaiter(this, void 0, void 0, function () {
var _a;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
_a = this;
return [4 /*yield*/, contest_1["default"].findById(this.contest_id)];
case 1:
_a.contest = _b.sent();
return [2 /*return*/];
}
});
});
};
RatingCalculation.prototype["delete"] = function () {
return __awaiter(this, void 0, void 0, function () {
var histories, _i, histories_1, history_1, user, ratingItem;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, rating_history_1["default"].find({
where: {
rating_calculation_id: this.id
}
})];
case 1:
histories = _a.sent();
_i = 0, histories_1 = histories;
_a.label = 2;
case 2:
if (!(_i < histories_1.length)) return [3 /*break*/, 8];
history_1 = histories_1[_i];
return [4 /*yield*/, history_1.loadRelationships()];
case 3:
_a.sent();
user = history_1.user;
return [4 /*yield*/, history_1.destroy()];
case 4:
_a.sent();
return [4 /*yield*/, rating_history_1["default"].findOne({
where: {
user_id: user.id
},
order: {
rating_calculation_id: 'DESC'
}
})];
case 5:
ratingItem = (_a.sent());
user.rating = ratingItem ? ratingItem.rating_after : syzoj.config["default"].user.rating;
return [4 /*yield*/, user.save()];
case 6:
_a.sent();
_a.label = 7;
case 7:
_i++;
return [3 /*break*/, 2];
case 8: return [4 /*yield*/, this.destroy()];
case 9:
_a.sent();
return [2 /*return*/];
}
});
});
};
__decorate([
TypeORM.PrimaryGeneratedColumn(),
__metadata("design:type", Number)
], RatingCalculation.prototype, "id");
__decorate([
TypeORM.Index({}),
TypeORM.Column({ nullable: true, type: "integer" }),
__metadata("design:type", Number)
], RatingCalculation.prototype, "contest_id");
RatingCalculation = __decorate([
TypeORM.Entity()
], RatingCalculation);
return RatingCalculation;
}(common_1["default"]));
exports["default"] = RatingCalculation;
//# sourceMappingURL=rating_calculation.js.map

1
models-built/rating_calculation.js.map

@ -0,0 +1 @@
{"version":3,"file":"rating_calculation.js","sourceRoot":"","sources":["../models/rating_calculation.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iCAAmC;AACnC,mCAA6B;AAI7B,qCAAgC;AAChC,mDAA6C;AAG7C;IAA+C,qCAAK;IAApD;;IAqCA,CAAC;IA3BO,6CAAiB,GAAvB;;;;;;wBACE,KAAA,IAAI,CAAA;wBAAW,qBAAM,oBAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAA;;wBAAtD,GAAK,OAAO,GAAG,SAAuC,CAAC;;;;;KACxD;IAEK,4BAAA,QAAM,CAAA,GAAZ;;;;;4BACoB,qBAAM,2BAAa,CAAC,IAAI,CAAC;4BACzC,KAAK,EAAE;gCACL,qBAAqB,EAAE,IAAI,CAAC,EAAE;6BAC/B;yBACF,CAAC,EAAA;;wBAJI,SAAS,GAAG,SAIhB;8BAC6B,EAAT,uBAAS;;;6BAAT,CAAA,uBAAS,CAAA;wBAA1B;wBACH,qBAAM,SAAO,CAAC,iBAAiB,EAAE,EAAA;;wBAAjC,SAAiC,CAAC;wBAC5B,IAAI,GAAG,SAAO,CAAC,IAAI,CAAC;wBAC1B,qBAAM,SAAO,CAAC,OAAO,EAAE,EAAA;;wBAAvB,SAAuB,CAAC;wBACJ,qBAAM,2BAAa,CAAC,OAAO,CAAC;gCAC9C,KAAK,EAAE;oCACL,OAAO,EAAE,IAAI,CAAC,EAAE;iCACjB;gCACD,KAAK,EAAE;oCACL,qBAAqB,EAAE,MAAM;iCAC9B;6BACF,CAAC,EAAA;;wBAPI,UAAU,GAAG,CAAC,SAOlB,CAAC;wBACH,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,SAAO,CAAA,CAAC,IAAI,CAAC,MAAM,CAAC;wBACtF,qBAAM,IAAI,CAAC,IAAI,EAAE,EAAA;;wBAAjB,SAAiB,CAAC;;;wBAbE,IAAS,CAAA;;4BAe/B,qBAAM,IAAI,CAAC,OAAO,EAAE,EAAA;;wBAApB,SAAoB,CAAC;;;;;KACtB;IAlCD;QADC,OAAO,CAAC,sBAAsB,EAAE;;yCACtB;IAIX;QAFC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjB,OAAO,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;;iDACjC;IANA,iBAAiB;QADrC,OAAO,CAAC,MAAM,EAAE;OACI,iBAAiB,CAqCrC;IAAD,wBAAC;CAAA,AArCD,CAA+C,mBAAK,GAqCnD;qBArCoB,iBAAiB"}

105
models-built/rating_history.js

@ -0,0 +1,105 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
exports.__esModule = true;
var TypeORM = require("typeorm");
var common_1 = require("./common");
var user_1 = require("./user");
var RatingHistory = /** @class */ (function (_super) {
__extends(RatingHistory, _super);
function RatingHistory() {
return _super !== null && _super.apply(this, arguments) || this;
}
RatingHistory.prototype.loadRelationships = function () {
return __awaiter(this, void 0, void 0, function () {
var _a;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
_a = this;
return [4 /*yield*/, user_1["default"].findById(this.user_id)];
case 1:
_a.user = _b.sent();
return [2 /*return*/];
}
});
});
};
__decorate([
TypeORM.PrimaryColumn({ type: "integer" }),
__metadata("design:type", Number)
], RatingHistory.prototype, "rating_calculation_id");
__decorate([
TypeORM.PrimaryColumn({ type: "integer" }),
__metadata("design:type", Number)
], RatingHistory.prototype, "user_id");
__decorate([
TypeORM.Column({ nullable: true, type: "integer" }),
__metadata("design:type", Number)
], RatingHistory.prototype, "rating_after");
__decorate([
TypeORM.Column({ nullable: true, type: "integer" }),
__metadata("design:type", Number)
], RatingHistory.prototype, "rank");
RatingHistory = __decorate([
TypeORM.Entity()
], RatingHistory);
return RatingHistory;
}(common_1["default"]));
exports["default"] = RatingHistory;
//# sourceMappingURL=rating_history.js.map

1
models-built/rating_history.js.map

@ -0,0 +1 @@
{"version":3,"file":"rating_history.js","sourceRoot":"","sources":["../models/rating_history.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iCAAmC;AACnC,mCAA6B;AAI7B,+BAA0B;AAG1B;IAA2C,iCAAK;IAAhD;;IAkBA,CAAC;IAHO,yCAAiB,GAAvB;;;;;;wBACE,KAAA,IAAI,CAAA;wBAAQ,qBAAM,iBAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAA;;wBAA7C,GAAK,IAAI,GAAG,SAAiC,CAAC;;;;;KAC/C;IAfD;QADC,OAAO,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;;wDACb;IAG9B;QADC,OAAO,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;;0CAC3B;IAGhB;QADC,OAAO,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;;+CAC/B;IAGrB;QADC,OAAO,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;;uCACvC;IAXM,aAAa;QADjC,OAAO,CAAC,MAAM,EAAE;OACI,aAAa,CAkBjC;IAAD,oBAAC;CAAA,AAlBD,CAA2C,mBAAK,GAkB/C;qBAlBoB,aAAa"}

71
models-built/submission_statistics.js

@ -0,0 +1,71 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
exports.__esModule = true;
var TypeORM = require("typeorm");
var common_1 = require("./common");
var StatisticsType;
(function (StatisticsType) {
StatisticsType["FASTEST"] = "fastest";
StatisticsType["SLOWEST"] = "slowest";
StatisticsType["SHORTEST"] = "shortest";
StatisticsType["LONGEST"] = "longest";
StatisticsType["MEMORY_MIN"] = "min";
StatisticsType["MEMORY_MAX"] = "max";
StatisticsType["EARLIEST"] = "earliest";
})(StatisticsType = exports.StatisticsType || (exports.StatisticsType = {}));
var SubmissionStatistics = /** @class */ (function (_super) {
__extends(SubmissionStatistics, _super);
function SubmissionStatistics() {
return _super !== null && _super.apply(this, arguments) || this;
}
SubmissionStatistics.cache = false;
__decorate([
TypeORM.PrimaryColumn({ type: "integer" }),
__metadata("design:type", Number)
], SubmissionStatistics.prototype, "problem_id");
__decorate([
TypeORM.PrimaryColumn({ type: "integer" }),
__metadata("design:type", Number)
], SubmissionStatistics.prototype, "user_id");
__decorate([
TypeORM.PrimaryColumn({ type: "enum", "enum": StatisticsType }),
__metadata("design:type", String)
], SubmissionStatistics.prototype, "type");
__decorate([
TypeORM.Column({ type: "integer" }),
__metadata("design:type", Number)
], SubmissionStatistics.prototype, "key");
__decorate([
TypeORM.Column({ type: "integer" }),
__metadata("design:type", Number)
], SubmissionStatistics.prototype, "submission_id");
SubmissionStatistics = __decorate([
TypeORM.Entity(),
TypeORM.Index(['problem_id', 'type', 'key'])
], SubmissionStatistics);
return SubmissionStatistics;
}(common_1["default"]));
exports["default"] = SubmissionStatistics;
;
//# sourceMappingURL=submission_statistics.js.map

1
models-built/submission_statistics.js.map

@ -0,0 +1 @@
{"version":3,"file":"submission_statistics.js","sourceRoot":"","sources":["../models/submission_statistics.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA,iCAAmC;AACnC,mCAA6B;AAE7B,IAAY,cAQX;AARD,WAAY,cAAc;IACxB,qCAAmB,CAAA;IACnB,qCAAmB,CAAA;IACnB,uCAAqB,CAAA;IACrB,qCAAmB,CAAA;IACnB,oCAAkB,CAAA;IAClB,oCAAkB,CAAA;IAClB,uCAAqB,CAAA;AACvB,CAAC,EARW,cAAc,GAAd,sBAAc,KAAd,sBAAc,QAQzB;AAID;IAAkD,wCAAK;IAAvD;;IAiBA,CAAC;IAhBQ,0BAAK,GAAG,KAAK,CAAC;IAGrB;QADC,OAAO,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;;oDACxB;IAGnB;QADC,OAAO,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;;iDAC3B;IAGhB;QADC,OAAO,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAI,EAAE,cAAc,EAAE,CAAC;;8CACzC;IAGrB;QADC,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;;6CACxB;IAGZ;QADC,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;;uDACd;IAhBH,oBAAoB;QAFxC,OAAO,CAAC,MAAM,EAAE;QAChB,OAAO,CAAC,KAAK,CAAC,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;OACxB,oBAAoB,CAiBxC;IAAD,2BAAC;CAAA,AAjBD,CAAkD,mBAAK,GAiBtD;qBAjBoB,oBAAoB;AAiBxC,CAAC"}

428
models-built/user.js

@ -0,0 +1,428 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
exports.__esModule = true;
var TypeORM = require("typeorm");
var common_1 = require("./common");
var judge_state_1 = require("./judge_state");
var user_privilege_1 = require("./user_privilege");
var article_1 = require("./article");
var User = /** @class */ (function (_super) {
__extends(User, _super);
function User() {
return _super !== null && _super.apply(this, arguments) || this;
}
User_1 = User;
User.fromEmail = function (email) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2 /*return*/, User_1.findOne({
where: {
email: email
}
})];
});
});
};
User.fromName = function (name) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2 /*return*/, User_1.findOne({
where: {
username: name
}
})];
});
});
};
User.prototype.isAllowedEditBy = function (user) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
if (!user)
return [2 /*return*/, false];
return [4 /*yield*/, user.hasPrivilege('manage_user')];
case 1:
if (_a.sent())
return [2 /*return*/, true];
return [2 /*return*/, user && (user.is_admin || this.id === user.id)];
}
});
});
};
User.prototype.getQueryBuilderForACProblems = function () {
return judge_state_1["default"].createQueryBuilder()
.select("DISTINCT(problem_id)")
.where('user_id = :user_id', { user_id: this.id })
.andWhere('status = :status', { status: 'Accepted' })
.andWhere('type != 1')
.orderBy({ problem_id: 'ASC' });
};
User.prototype.refreshSubmitInfo = function () {
return __awaiter(this, void 0, void 0, function () {
var _this = this;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, syzoj.utils.lock(['User::refreshSubmitInfo', this.id], function () { return __awaiter(_this, void 0, void 0, function () {
var _a, _b;
return __generator(this, function (_c) {
switch (_c.label) {
case 0:
_a = this;
return [4 /*yield*/, judge_state_1["default"].countQuery(this.getQueryBuilderForACProblems())];
case 1:
_a.ac_num = _c.sent();
_b = this;
return [4 /*yield*/, judge_state_1["default"].count({
user_id: this.id,
type: TypeORM.Not(1) // Not a contest submission
})];
case 2:
_b.submit_num = _c.sent();
return [4 /*yield*/, this.save()];
case 3:
_c.sent();
return [2 /*return*/];
}
});
}); })];
case 1:
_a.sent();
return [2 /*return*/];
}
});
});
};
User.prototype.getACProblems = function () {
return __awaiter(this, void 0, void 0, function () {
var queryResult;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.getQueryBuilderForACProblems().getRawMany()];
case 1:
queryResult = _a.sent();
return [2 /*return*/, queryResult.map(function (record) { return record['problem_id']; })];
}
});
});
};
User.prototype.getArticles = function () {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, article_1["default"].find({
where: {
user_id: this.id
}
})];
case 1: return [2 /*return*/, _a.sent()];
}
});
});
};
User.prototype.getStatistics = function () {
return __awaiter(this, void 0, void 0, function () {
var statuses, res, _a, _b, _i, status_1, _c, _d, s, _e, _f, _g;
return __generator(this, function (_h) {
switch (_h.label) {
case 0:
statuses = {
"Accepted": ["Accepted"],
"Wrong Answer": ["Wrong Answer", "File Error", "Output Limit Exceeded"],
"Runtime Error": ["Runtime Error"],
"Time Limit Exceeded": ["Time Limit Exceeded"],
"Memory Limit Exceeded": ["Memory Limit Exceeded"],
"Compile Error": ["Compile Error"]
};
res = {};
_a = [];
for (_b in statuses)
_a.push(_b);
_i = 0;
_h.label = 1;
case 1:
if (!(_i < _a.length)) return [3 /*break*/, 6];
status_1 = _a[_i];
res[status_1] = 0;
_c = 0, _d = statuses[status_1];
_h.label = 2;
case 2:
if (!(_c < _d.length)) return [3 /*break*/, 5];
s = _d[_c];
_e = res;
_f = status_1;
_g = _e[_f];
return [4 /*yield*/, judge_state_1["default"].count({
user_id: this.id,
type: 0,
status: s
})];
case 3:
_e[_f] = _g + _h.sent();
_h.label = 4;
case 4:
_c++;
return [3 /*break*/, 2];
case 5:
_i++;
return [3 /*break*/, 1];
case 6: return [2 /*return*/, res];
}
});
});
};
User.prototype.renderInformation = function () {
return __awaiter(this, void 0, void 0, function () {
var _a;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
_a = this;
return [4 /*yield*/, syzoj.utils.markdown(this.information)];
case 1:
_a.information = _b.sent();
return [2 /*return*/];
}
});
});
};
User.prototype.getPrivileges = function () {
return __awaiter(this, void 0, void 0, function () {
var privileges;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, user_privilege_1["default"].find({
where: {
user_id: this.id
}
})];
case 1:
privileges = _a.sent();
return [2 /*return*/, privileges.map(function (x) { return x.privilege; })];
}
});
});
};
User.prototype.setPrivileges = function (newPrivileges) {
return __awaiter(this, void 0, void 0, function () {
var oldPrivileges, delPrivileges, addPrivileges, _i, delPrivileges_1, privilege, obj, _a, addPrivileges_1, privilege, obj;
return __generator(this, function (_b) {
switch (_b.label) {
case 0: return [4 /*yield*/, this.getPrivileges()];
case 1:
oldPrivileges = _b.sent();
delPrivileges = oldPrivileges.filter(function (x) { return !newPrivileges.includes(x); });
addPrivileges = newPrivileges.filter(function (x) { return !oldPrivileges.includes(x); });
_i = 0, delPrivileges_1 = delPrivileges;
_b.label = 2;
case 2:
if (!(_i < delPrivileges_1.length)) return [3 /*break*/, 6];
privilege = delPrivileges_1[_i];
return [4 /*yield*/, user_privilege_1["default"].findOne({ where: {
user_id: this.id,
privilege: privilege
} })];
case 3:
obj = _b.sent();
return [4 /*yield*/, obj.destroy()];
case 4:
_b.sent();
_b.label = 5;
case 5:
_i++;
return [3 /*break*/, 2];
case 6:
_a = 0, addPrivileges_1 = addPrivileges;
_b.label = 7;
case 7:
if (!(_a < addPrivileges_1.length)) return [3 /*break*/, 11];
privilege = addPrivileges_1[_a];
return [4 /*yield*/, user_privilege_1["default"].create({
user_id: this.id,
privilege: privilege
})];
case 8:
obj = _b.sent();
return [4 /*yield*/, obj.save()];
case 9:
_b.sent();
_b.label = 10;
case 10:
_a++;
return [3 /*break*/, 7];
case 11: return [2 /*return*/];
}
});
});
};
User.prototype.hasPrivilege = function (privilege) {
return __awaiter(this, void 0, void 0, function () {
var x;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
if (this.is_admin)
return [2 /*return*/, true];
return [4 /*yield*/, user_privilege_1["default"].findOne({ where: { user_id: this.id, privilege: privilege } })];
case 1:
x = _a.sent();
return [2 /*return*/, !!x];
}
});
});
};
User.prototype.getLastSubmitLanguage = function () {
return __awaiter(this, void 0, void 0, function () {
var a;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, judge_state_1["default"].findOne({
where: {
user_id: this.id
},
order: {
submit_time: 'DESC'
}
})];
case 1:
a = _a.sent();
if (a)
return [2 /*return*/, a.language];
return [2 /*return*/, null];
}
});
});
};
var User_1;
User.cache = true;
__decorate([
TypeORM.PrimaryGeneratedColumn(),
__metadata("design:type", Number)
], User.prototype, "id");
__decorate([
TypeORM.Index({ unique: true }),
TypeORM.Column({ nullable: true, type: "varchar", length: 80 }),
__metadata("design:type", String)
], User.prototype, "username");
__decorate([
TypeORM.Column({ nullable: true, type: "varchar", length: 120 }),
__metadata("design:type", String)
], User.prototype, "email");
__decorate([
TypeORM.Column({ nullable: true, type: "varchar", length: 120 }),
__metadata("design:type", String)
], User.prototype, "password");
__decorate([
TypeORM.Column({ nullable: true, type: "varchar", length: 80 }),
__metadata("design:type", String)
], User.prototype, "nickname");
__decorate([
TypeORM.Column({ nullable: true, type: "text" }),
__metadata("design:type", String)
], User.prototype, "nameplate");
__decorate([
TypeORM.Column({ nullable: true, type: "text" }),
__metadata("design:type", String)
], User.prototype, "information");
__decorate([
TypeORM.Index(),
TypeORM.Column({ nullable: true, type: "integer" }),
__metadata("design:type", Number)
], User.prototype, "ac_num");
__decorate([
TypeORM.Index(),
TypeORM.Column({ nullable: true, type: "integer" }),
__metadata("design:type", Number)
], User.prototype, "submit_num");
__decorate([
TypeORM.Column({ nullable: true, type: "boolean" }),
__metadata("design:type", Boolean)
], User.prototype, "is_admin");
__decorate([
TypeORM.Index(),
TypeORM.Column({ nullable: true, type: "boolean" }),
__metadata("design:type", Boolean)
], User.prototype, "is_show");
__decorate([
TypeORM.Column({ nullable: true, type: "boolean", "default": true }),
__metadata("design:type", Boolean)
], User.prototype, "public_email");
__decorate([
TypeORM.Column({ nullable: true, type: "boolean", "default": true }),
__metadata("design:type", Boolean)
], User.prototype, "prefer_formatted_code");
__decorate([
TypeORM.Column({ nullable: true, type: "integer" }),
__metadata("design:type", Number)
], User.prototype, "sex");
__decorate([
TypeORM.Column({ nullable: true, type: "integer" }),
__metadata("design:type", Number)
], User.prototype, "rating");
__decorate([
TypeORM.Column({ nullable: true, type: "integer" }),
__metadata("design:type", Number)
], User.prototype, "register_time");
User = User_1 = __decorate([
TypeORM.Entity()
], User);
return User;
}(common_1["default"]));
exports["default"] = User;
//# sourceMappingURL=user.js.map

1
models-built/user.js.map

File diff suppressed because one or more lines are too long

48
models-built/user_privilege.js

@ -0,0 +1,48 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
exports.__esModule = true;
var TypeORM = require("typeorm");
var common_1 = require("./common");
var UserPrivilege = /** @class */ (function (_super) {
__extends(UserPrivilege, _super);
function UserPrivilege() {
return _super !== null && _super.apply(this, arguments) || this;
}
__decorate([
TypeORM.Index(),
TypeORM.PrimaryColumn({ type: "integer" }),
__metadata("design:type", Number)
], UserPrivilege.prototype, "user_id");
__decorate([
TypeORM.Index(),
TypeORM.PrimaryColumn({ type: "varchar", length: 80 }),
__metadata("design:type", String)
], UserPrivilege.prototype, "privilege");
UserPrivilege = __decorate([
TypeORM.Entity()
], UserPrivilege);
return UserPrivilege;
}(common_1["default"]));
exports["default"] = UserPrivilege;
//# sourceMappingURL=user_privilege.js.map

1
models-built/user_privilege.js.map

@ -0,0 +1 @@
{"version":3,"file":"user_privilege.js","sourceRoot":"","sources":["../models/user_privilege.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA,iCAAmC;AACnC,mCAA6B;AAG7B;IAA2C,iCAAK;IAAhD;;IAQA,CAAC;IALC;QAFC,OAAO,CAAC,KAAK,EAAE;QACf,OAAO,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;;0CAC3B;IAIhB;QAFC,OAAO,CAAC,KAAK,EAAE;QACf,OAAO,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;;4CACrC;IAPC,aAAa;QADjC,OAAO,CAAC,MAAM,EAAE;OACI,aAAa,CAQjC;IAAD,oBAAC;CAAA,AARD,CAA2C,mBAAK,GAQ/C;qBARoB,aAAa"}

10
models/judge_state.ts

@ -188,4 +188,14 @@ export default class JudgeState extends Model {
await this.loadRelationships(); await this.loadRelationships();
return this.problem.type; return this.problem.type;
} }
async share() {
this.is_public = true;
try {
await this.save();
} catch (err) {
console.log("Error while share this judge:" + err.toString());
throw new ErrorMessage("分享失败。");
}
}
} }

3
modules/contest.js

@ -291,7 +291,8 @@ function getDisplayConfig(contest) {
showDetailResult: contest.allowedSeeingTestcase(), showDetailResult: contest.allowedSeeingTestcase(),
showTestdata: false, showTestdata: false,
inContest: true, inContest: true,
showRejudge: false showRejudge: false,
showShare: false
}; };
} }

51
modules/submission.js

@ -16,7 +16,8 @@ const displayConfig = {
showTestdata: true, showTestdata: true,
showDetailResult: true, showDetailResult: true,
inContest: false, inContest: false,
showRejudge: false showRejudge: false,
showShare: false
}; };
// s is JudgeState // s is JudgeState
@ -188,20 +189,33 @@ app.get('/submission/:id', async (req, res) => {
judge.code = await syzoj.utils.highlight(judge.code, syzoj.languages[judge.language].highlight); judge.code = await syzoj.utils.highlight(judge.code, syzoj.languages[judge.language].highlight);
} }
displayConfig.showRejudge = await judge.problem.isAllowedEditBy(res.locals.user); let isAdmin = curUser === null ? false : curUser.is_admin;
let isAuthor = curUser === null ? false : curUser.id === judge.user_id;
let currentConfig = Object.assign({}, displayConfig);
currentConfig.showRejudge = await judge.problem.isAllowedEditBy(res.locals.user);
if (isAdmin || isAuthor) {
currentConfig.showShare = true;
}
if (isAdmin || isAuthor || judge.is_public) {
judge.code = (judge.problem.type !== 'submit-answer') ? judge.code.toString("utf8") : '';
} else {
judge.code = "作者没有开放此题代码,请联系作者分享。";
}
res.render('submission', { res.render('submission', {
info: getSubmissionInfo(judge, displayConfig), info: getSubmissionInfo(judge, currentConfig),
roughResult: getRoughResult(judge, displayConfig, false), roughResult: getRoughResult(judge, currentConfig, false),
code: (judge.problem.type !== 'submit-answer') ? judge.code.toString("utf8") : '', code: judge.code,
formattedCode: judge.formattedCode ? judge.formattedCode.toString("utf8") : null, formattedCode: judge.formattedCode ? judge.formattedCode.toString("utf8") : null,
preferFormattedCode: res.locals.user ? res.locals.user.prefer_formatted_code : true, preferFormattedCode: res.locals.user ? res.locals.user.prefer_formatted_code : true,
detailResult: processOverallResult(judge.result, displayConfig), detailResult: processOverallResult(judge.result, currentConfig),
socketToken: (judge.pending && judge.task_id != null) ? jwt.sign({ socketToken: (judge.pending && judge.task_id != null) ? jwt.sign({
taskId: judge.task_id, taskId: judge.task_id,
type: 'detail', type: 'detail',
displayConfig: displayConfig displayConfig: displayConfig
}, syzoj.config.session_secret) : null, }, syzoj.config.session_secret) : null,
displayConfig: displayConfig, displayConfig: currentConfig,
}); });
} catch (e) { } catch (e) {
syzoj.log(e); syzoj.log(e);
@ -233,3 +247,26 @@ app.post('/submission/:id/rejudge', async (req, res) => {
}); });
} }
}); });
// 分享评测实现
app.post('/submission/:id/share', async (req, res) => {
try {
let id = parseInt(req.params.id);
let judge = await JudgeState.findById(id);
await judge.loadRelationships();
let allowedRejudge = await judge.problem.isAllowedEditBy(res.locals.user);
if (!allowedRejudge) {
throw new ErrorMessage('您没有权限进行此操作。');
}
await judge.share();
res.redirect(syzoj.utils.makeUrl(['submission', id]));
} catch (e) {
syzoj.log(e);
res.render('error', {
err: e
});
}
});

6
views/submission.ejs

@ -44,10 +44,11 @@
<th>提交者</th> <th>提交者</th>
<th>提交时间</th> <th>提交时间</th>
<th v-if="showRejudge">重新评测</th> <th v-if="showRejudge">重新评测</th>
<th v-if="showShare">分享</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr is="submission-item" v-bind:data="roughData" :config="displayConfig" :show-rejudge="showRejudge" :progress="getProgress()" :compiling="detailResult && !detailResult.compile"></tr> <tr is="submission-item" v-bind:data="roughData" :config="displayConfig" :show-rejudge="showRejudge" :show-share="showShare" :progress="getProgress()" :compiling="detailResult && !detailResult.compile"></tr>
</tbody> </tbody>
</table> </table>
@ -229,6 +230,9 @@ const vueApp = new Vue({
}, },
showRejudge() { showRejudge() {
return this.displayConfig.showRejudge && (!this.roughData.running); return this.displayConfig.showRejudge && (!this.roughData.running);
},
showShare() {
return this.displayConfig.showShare;
} }
}, },
methods: { methods: {

2
views/submissions.ejs

@ -97,7 +97,7 @@
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr v-for="item in items" :config="displayConfig" :show-rejudge="false" :data="item" is='submission-item' :rough="true"> <tr v-for="item in items" :config="displayConfig" :show-rejudge="false" :show-share="false" :data="item" is='submission-item' :rough="true">
</tr> </tr>
</tbody> </tbody>
</table> </table>

284
views/submissions_item.ejs

@ -2,141 +2,183 @@
<% include status_label %> <% include status_label %>
<script> <script>
function formatSize(x, precision) { function formatSize(x, precision) {
if (typeof x !== 'number') return '0 B'; if (typeof x !== 'number') return '0 B';
var unit = 'B', units = ['K', 'M', 'G', 'T']; var unit = 'B', units = ['K', 'M', 'G', 'T'];
for (var i in units) if (x > 1024) x /= 1024, unit = units[i]; for (var i in units) if (x > 1024) x /= 1024, unit = units[i];
var fixed = x === Math.round(x) ? x.toString() : x.toFixed(precision); var fixed = x === Math.round(x) ? x.toString() : x.toFixed(precision);
return fixed + ' ' + unit; return fixed + ' ' + unit;
} }
const submissionUrl = <%- serializejs(displayConfig.inContest ? const submissionUrl = <%- serializejs(displayConfig.inContest ?
syzoj.utils.makeUrl(['contest', 'submission', '20000528']) : syzoj.utils.makeUrl(['contest', 'submission', '20000528']) :
syzoj.utils.makeUrl(['submission', '20000528'])) %>; syzoj.utils.makeUrl(['submission', '20000528'])) %>;
const problemUrl = <%- serializejs(displayConfig.inContest ? const problemUrl = <%- serializejs(displayConfig.inContest ?
syzoj.utils.makeUrl(['contest', contest.id, 'problem', '20000528']) : syzoj.utils.makeUrl(['contest', contest.id, 'problem', '20000528']) :
syzoj.utils.makeUrl(['problem', '20000528'])) %>; syzoj.utils.makeUrl(['problem', '20000528'])) %>;
const userUrl = <%- serializejs(syzoj.utils.makeUrl(['user', '20000528'])) %>; const userUrl = <%- serializejs(syzoj.utils.makeUrl(['user', '20000528'])) %>;
Vue.component('submission-item', { Vue.component('submission-item', {
template: '#submissionItemTemplate', template: '#submissionItemTemplate',
props: ['data', 'config', 'showRejudge', 'progress', 'compiling', 'rough'], props: ['data', 'config', 'showRejudge', 'showShare', 'progress', 'compiling', 'rough'],
computed: { computed: {
statusString() { statusString() {
const data = this.data; const data = this.data;
if (data.result) { if (data.result) {
return data.result.result; return data.result.result;
} else if (data.running) { } else if (data.running) {
if (this.rough) return 'Judging'; if (this.rough) return 'Judging';
if (this.compiling) return 'Compiling'; if (this.compiling) return 'Compiling';
return 'Running'; return 'Running';
} else return 'Waiting'; } else return 'Waiting';
}, },
submissionLink() { submissionLink() {
return submissionUrl.replace('20000528', this.data.info.submissionId); return submissionUrl.replace('20000528', this.data.info.submissionId);
}, },
problemLink() { problemLink() {
return problemUrl.replace('20000528', this.data.info.problemId); return problemUrl.replace('20000528', this.data.info.problemId);
},
userLink() {
return userUrl.replace('20000528', this.data.info.userId);
},
scoreClass() {
return "score_" + (parseInt(this.data.result.score / 10) || 0).toString();
}
}, },
userLink() { methods: {
return userUrl.replace('20000528', this.data.info.userId); alpha(number) {
if (number && parseInt(number) == number && parseInt(number) > 0) return String.fromCharCode('A'.charCodeAt(0) + parseInt(number) - 1);
}
}, },
scoreClass() { mounted() {
return "score_" + (parseInt(this.data.result.score / 10) || 0).toString(); textFit(this.$refs.problemLabelTextFit, {maxFontSize: 14});
} }
}, });
methods: {
alpha(number) {
if (number && parseInt(number) == number && parseInt(number) > 0) return String.fromCharCode('A'.charCodeAt(0) + parseInt(number) - 1);
}
},
mounted() {
textFit(this.$refs.problemLabelTextFit, { maxFontSize: 14 });
}
});
</script> </script>
<script id="submissionItemTemplate" type="text/x-template"> <script id="submissionItemTemplate" type="text/x-template">
<tr> <tr>
<% if (active === 'submissions') { %> <% if (active === 'submissions') { %>
<td><a :href="submissionLink"><b>#{{ data.info.submissionId }}</b></a></td> <td><a :href="submissionLink"><b>#{{ data.info.submissionId }}</b></a></td>
<% } else { %> <% } else { %>
<td><b>#{{ data.info.submissionId }}</b></td> <td><b>#{{ data.info.submissionId }}</b></td>
<% } %> <% } %>
<td ref="problemLabel"><a ref="problemLabelTextFit" style="width: 230px; height: 22px; display: block; margin: 0 auto; line-height: 22px;" :href="problemLink"><b>#{{ config.inContest ? alpha(data.info.problemId) : data.info.problemId }}.</b> {{ data.info.problemName }}</a></td> <td ref="problemLabel"><a ref="problemLabelTextFit"
<% if (active === 'submissions') { %> style="width: 230px; height: 22px; display: block; margin: 0 auto; line-height: 22px;"
<td><a :href="submissionLink"><b><status-label :status="statusString" :progress="progress"></status-label></b></a></td> :href="problemLink"><b>#{{ config.inContest ? alpha(data.info.problemId) :
<% } else { %> data.info.problemId }}.</b> {{ data.info.problemName }}</a></td>
<td><b><status-label :status="statusString" :progress="progress"></status-label></b></td> <% if (active === 'submissions') { %>
<% } %> <td><a :href="submissionLink"><b>
<status-label :status="statusString" :progress="progress"></status-label>
</b></a></td>
<% } else { %>
<td><b>
<status-label :status="statusString" :progress="progress"></status-label>
</b></td>
<% } %>
<template v-if="data.result"> <template v-if="data.result">
<% if (active === 'submissions') { %> <% if (active === 'submissions') { %>
<td v-if="config.showScore"><a :href="submissionLink"><span class="score" :class="scoreClass">{{ Math.floor(data.result.score || 0) }}</span></a></td> <td v-if="config.showScore"><a :href="submissionLink"><span class="score" :class="scoreClass">{{ Math.floor(data.result.score || 0) }}</span></a>
<% } else { %> </td>
<td v-if="config.showScore"><span class="score" :class="scoreClass">{{ Math.floor(data.result.score || 0) }}</span></td> <% } else { %>
<% } %> <td v-if="config.showScore"><span class="score"
<td v-if="config.showUsage">{{ (data.result.time || 0).toString() + ' ms' }}</td> :class="scoreClass">{{ Math.floor(data.result.score || 0) }}</span></td>
<% } %>
<td v-if="config.showUsage">{{ (data.result.time || 0).toString() + ' ms' }}</td>
<% if (active === 'submissions') { %> <% if (active === 'submissions') { %>
<td v-if="config.showUsage">{{ formatSize(data.result.memory * 1024, 2) }}</td> <td v-if="config.showUsage">{{ formatSize(data.result.memory * 1024, 2) }}</td>
<% } else { %> <% } else { %>
<td v-if="config.showUsage">{{ (data.result.memory || 0).toString() + ' K'}}</td> <td v-if="config.showUsage">{{ (data.result.memory || 0).toString() + ' K'}}</td>
<% } %> <% } %>
</template> <template v-else> </template>
<td v-if="config.showScore"><a :href="submissionLink"><span class="score score_0">0</span></a></td> <template v-else>
<td v-if="config.showUsage">0 ms</td> <td v-if="config.showScore"><a :href="submissionLink"><span class="score score_0">0</span></a></td>
<td v-if="config.showUsage">0 B</td> <td v-if="config.showUsage">0 ms</td>
</template> <td v-if="config.showUsage">0 B</td>
</template>
<td v-if="config.showCode"> <td v-if="config.showCode">
<% if (active === 'submissions') { %> <% if (active === 'submissions') { %>
<span v-if="data.info.language"><a :href="submissionLink"><b>{{ data.info.language }}</b></a> / </span> <span v-if="data.info.language"><a :href="submissionLink"><b>{{ data.info.language }}</b></a> / </span>
<% } else { %> <% } else { %>
<span v-if="data.info.language"><b>{{ data.info.language }}</b> / </span> <span v-if="data.info.language"><b>{{ data.info.language }}</b> / </span>
<% } %> <% } %>
{{ formatSize(data.info.codeSize, 1) }} {{ formatSize(data.info.codeSize, 1) }}
</td> </td>
<td><a :href="userLink">{{ data.info.user }}</a></td> <td><a :href="userLink">{{ data.info.user }}</a></td>
<td>{{ data.info.submitTime }}</td> <td>{{ data.info.submitTime }}</td>
<td v-if="showRejudge"> <td v-if="showRejudge">
<a id="rejudge-button" :onclick="'check_rejudge(' + (statusString === 'Waiting' || statusString.startsWith('Running')).toString() + ')'" style="color: #000; " href="#"><i class="repeat icon"></i></a> <a id="rejudge-button"
<% if (active === 'submission') { %> :onclick="'check_rejudge(' + (statusString === 'Waiting' || statusString.startsWith('Running')).toString() + ')'"
<div class="ui basic modal" id="modal-rejudge"> style="color: #000; " href="#"><i class="repeat icon"></i></a>
<div class="ui icon header"> <% if (active === 'submission') { %>
<i class="retweet icon"></i> <div class="ui basic modal" id="modal-rejudge">
<p style="margin-top: 15px; ">重新评测</p> <div class="ui icon header">
</div> <i class="retweet icon"></i>
<div class="content" style="text-align: center; "> <p style="margin-top: 15px; ">重新评测</p>
<p>确认重新评测该提交记录吗?</p> </div>
<p id="warning_pending"><strong>警告:只有管理员可以重新评测一个未评测完成的记录,<br>这种情况一般发生在评测服务中断后,如果一个提交正在被评测,<br>则将其重新评测会导致系统错乱!</strong></p> <div class="content" style="text-align: center; ">
</div> <p>确认重新评测该提交记录吗?</p>
<div class="actions"> <p id="warning_pending"><strong>警告:只有管理员可以重新评测一个未评测完成的记录,<br>这种情况一般发生在评测服务中断后,如果一个提交正在被评测,<br>则将其重新评测会导致系统错乱!</strong>
<div class="ui red basic cancel inverted button"> </p>
<i class="remove icon"></i> </div>
<div class="actions">
<div class="ui red basic cancel inverted button">
<i class="remove icon"></i>
</div>
<a class="ui green ok inverted button" :href-post="submissionLink + '/rejudge'">
<i class="checkmark icon"></i>
</a>
</div>
</div> </div>
<a class="ui green ok inverted button" :href-post="submissionLink + '/rejudge'"> <% } %>
<i class="checkmark icon"></i> </td>
<td v-if="showShare">
</a> <a id="share-button"
</div> :onclick="'check_share()'"
</div> style="color: #000; " href="#"><i class="share icon"></i></a>
<% } %> <% if (active === 'submission') { %>
</td> <div class="ui basic modal" id="modal-share">
</tr> <div class="ui icon header">
<i class="share icon"></i>
<p style="margin-top: 15px; ">分享</p>
</div>
<div class="content" style="text-align: center; ">
<p>确认分享该提交记录吗?</p>
</div>
<div class="actions">
<div class="ui red basic cancel inverted button">
<i class="remove icon"></i>
</div>
<a class="ui green ok inverted button" :href-post="submissionLink + '/share'">
<i class="checkmark icon"></i>
</a>
</div>
</div>
<% } %>
</td>
</tr>
</script> </script>
<% if (active === 'submission') { %> <% if (active === 'submission') { %>
<script> <script>
function check_rejudge(pending) { function check_rejudge(pending) {
if (pending) { if (pending) {
$('#warning_pending').css('display', ''); $('#warning_pending').css('display', '');
} else { } else {
$('#warning_pending').css('display', 'none'); $('#warning_pending').css('display', 'none');
} }
$('#modal-rejudge').modal('show'); $('#modal-rejudge').modal('show');
} }
</script> function check_share() {
$('#modal-share').modal('show');
}
</script>
<% } %> <% } %>

Loading…
Cancel
Save