移除可以与同一用户创建多个会话的特性

This commit is contained in:
masnn committed 2020-05-15 13:10:41 +08:00
1 parent d04628148f
commit 3c5fdb9032
16 files changed
+120 -118

No files matched your search

+15 -19
View File
@@ -1,6 +1,6 @@
const {
VerifyPasswordError, UserAlreadyExistError, InvalidTokenError,
NotFoundError, MessageNotFoundError,
NotFoundError,
} = require('../error');
const bus = require('../service/bus');
const {
@@ -200,38 +200,34 @@ class HomeMessagesHandler extends Handler {
this.udoc(udict, mdoc.from);
this.udoc(udict, mdoc.to);
}
this.response.body = { messages: mdocs, udict };
const path = [
['Hydro', '/'],
['home_messages', null],
];
this.response.body = { messages: mdocs, udict, path };
this.response.template = 'home_messages.html';
}
async postSendMessage({ uid, content }) {
async postSend({ uid, content, type = 'full' }) {
const udoc = await user.getById(uid);
const mdoc = await message.add(this.user._id, udoc._id, content);
let mdoc = await message.send(this.user._id, uid, content);
if (type === 'single') {
mdoc = mdoc.reply[mdoc.reply.length - 1];
}
// TODO(twd2): improve here:
// projection
mdoc.from_udoc = this.user;
this.udoc(mdoc, 'from');
mdoc.to_udoc = udoc;
this.udoc(mdoc, 'from');
this.udoc(mdoc, 'to');
if (this.user._id !== uid) {
await bus.publish(`user_message-${uid}`, { type: 'new', data: mdoc });
}
this.back({ mdoc });
this.back(type === 'full' ? { mdoc } : { reply: mdoc });
}
async postReplyMessage({ message_id, content }) {
const [mdoc, reply] = await message.addReply(message_id, this.user._id, content);
if (!mdoc) throw new MessageNotFoundError(message_id);
if (mdoc.from !== mdoc.to) {
const other = mdoc.from === this.user._id ? mdoc.from : mdoc.to;
await bus.publish(`user_message-${other}`, { type: 'reply', data: mdoc });
}
mdoc.reply = [reply];
this.back({ reply });
}
async postDeleteMessage({ message_id }) {
await message.delete(message_id, this.user._id);
async postDeleteMessage({ messageId }) {
await message.delete(messageId, this.user._id);
this.back();
}
}
+2 -2
View File
@@ -22,10 +22,10 @@ class ProblemImportHandler extends Handler {
async post({
url, pid, hidden, remoteType,
}) {
if (typeof this[`from_${remoteType}`] !== 'function') {
if (typeof global.Hydro.lib[`import.${remoteType}`] !== 'function') {
throw new ValidationError('remoteType');
}
const [pdoc, testdata] = await this[`from_${remoteType}`](url);
const [pdoc, testdata] = await global.Hydro.lib[`import.${remoteType}`](url, this);
if (pid) pdoc.pid = pid;
if (hidden) pdoc.hidden = true;
const _id = await problem.add(pdoc);
+4 -2
View File
@@ -118,8 +118,10 @@ class ProblemSubmitHandler extends ProblemDetailHandler {
const rid = await record.add({
uid: this.uid, lang, code, pid: this.pdoc._id,
});
await record.judge(rid);
this.user.nSubmit++;
await Promise.all([
record.judge(rid),
user.inc(this.user._id, 'nSubmit'),
]);
this.response.body = { rid };
this.response.redirect = `/r/${rid}`;
}
+4 -16
View File
@@ -17,22 +17,10 @@ class RecordListHandler extends Handler {
this.response.template = 'record_main.html';
const q = {};
const rdocs = await record.getMany(q, { _id: -1 }, page, await system.get('RECORD_PER_PAGE'));
const pdict = {};
const udict = {};
const ulist = [];
const plist = [];
for (const rdoc of rdocs) {
ulist[rdoc.uid] = user.getById(rdoc.uid);
plist[rdoc.pid] = problem.get(rdoc.pid, this.user._id);
}
await Promise.all(ulist);
await Promise.all(plist);
for (const udoc of ulist) {
udict[udoc._id] = udoc;
}
for (const pdoc of plist) {
pdict[pdoc._id] = pdoc;
}
const [udict, pdict] = await Promise.all([
user.getList(rdocs.map((rdoc) => rdoc.uid)),
problem.getList(rdocs.map((rdoc) => rdoc.pid)),
]);
const path = [
['Hydro', '/'],
['record_main', null],