core: api: get contest

This commit is contained in:
undefined committed 2021-10-28 17:51:08 +08:00
1 parent 89424ec9cd
commit 5272a35b09
6 files changed
+33 -6

No files matched your search

+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "hydrooj", "name": "hydrooj",
"version": "3.1.14", "version": "3.1.15",
"bin": "bin/hydrooj.js", "bin": "bin/hydrooj.js",
"main": "src/loader", "main": "src/loader",
"module": "src/loader", "module": "src/loader",
+27
View File
@@ -18,6 +18,33 @@ import user from '../model/user';
import { import {
Handler, param, Route, Types, Handler, param, Route, Types,
} from '../service/server'; } from '../service/server';
import { registerResolver, registerValue } from './api';
registerValue('Contest', [
['_id', 'ObjectID!'],
['domainId', 'String!'],
['docId', 'ObjectID!'],
['owner', 'Int!'],
['beginAt', 'Date!'],
['title', 'String!'],
['content', 'String!'],
['beginAt', 'Date!'],
['endAt', 'Date!'],
['attend', 'Int!'],
['pids', '[Int]!'],
['rated', 'Boolean!'],
]);
registerResolver(
'Query', 'contest(id: ObjectID!)', 'Contest',
async (arg, ctx) => {
arg.id = new ObjectID(arg.id);
ctx.tdoc = await contest.get(ctx.domainId, new ObjectID(arg.id));
if (!ctx.tdoc) throw new ContestNotFoundError(ctx.domainId, arg.id);
return ctx.tdoc;
},
'Get a contest by ID',
);
export class ContestListHandler extends Handler { export class ContestListHandler extends Handler {
@param('rule', Types.Range(contest.RULES), true) @param('rule', Types.Range(contest.RULES), true)
+1 -1
View File
@@ -106,7 +106,7 @@ export class FSDownloadHandler extends Handler {
this.response.etag = file.etag; this.response.etag = file.etag;
this.response.body = await storage.get(target); this.response.body = await storage.get(target);
this.response.type = file['Content-Type'] || type; this.response.type = file['Content-Type'] || type;
this.response.disposition = `attachment; filename=${encodeURIComponent(filename)}`; if (!noDisposition) this.response.disposition = `attachment; filename=${encodeURIComponent(filename)}`;
} else { } else {
this.response.redirect = await storage.signDownloadLink( this.response.redirect = await storage.signDownloadLink(
target, noDisposition ? undefined : filename, false, 'user', target, noDisposition ? undefined : filename, false, 'user',
+2 -2
View File
@@ -23,8 +23,8 @@ console.log(
document.addEventListener('DOMContentLoaded', () => { document.addEventListener('DOMContentLoaded', () => {
window.UiContext = JSON.parse(window.UiContext); window.UiContext = JSON.parse(window.UiContext);
// eslint-disable-next-line // eslint-disable-next-line camelcase
try { __webpack_public_path__ = UiContext.cdn_prefix } catch (e) { } try { __webpack_public_path__ = UiContext.cdn_prefix; } catch (e) { }
// Locale & langs // Locale & langs
const { version, payload } = JSON.parse(localStorage.getItem('hydro-constant') || '{}'); const { version, payload } = JSON.parse(localStorage.getItem('hydro-constant') || '{}');
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@hydrooj/ui-default", "name": "@hydrooj/ui-default",
"version": "4.26.8", "version": "4.26.9",
"author": "undefined <i@undefined.moe>", "author": "undefined <i@undefined.moe>",
"license": "AGPL-3.0", "license": "AGPL-3.0",
"main": "hydro.js", "main": "hydro.js",
+1 -1
View File
@@ -26,7 +26,7 @@ const page = new NamedPage('api', async () => {
defaultQuery={defaultQuery} defaultQuery={defaultQuery}
fetcher={async (graphQLParams) => { fetcher={async (graphQLParams) => {
const data = await fetch( const data = await fetch(
'/api', '',
{ {
method: 'POST', method: 'POST',
headers: { headers: {