core: discussion views (fix #69)

This commit is contained in:
undefined committed 2021-08-07 20:43:37 +08:00
1 parent 16fcd80a00
commit 2b8b9a776b
5 files changed
+29 -11

No files matched your search

+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "hydrooj",
"version": "2.32.2",
"version": "2.32.3",
"bin": "bin/hydrooj.js",
"main": "src/loader",
"module": "src/loader",
@@ -187,6 +187,12 @@ class DiscussionDetailHandler extends DiscussionHandler {
if (drdoc.reply) uids.push(...drdoc.reply.map((drrdoc) => drrdoc.owner));
}
const udict = await user.getList(domainId, uids);
if (!dsdoc.view) {
await Promise.all([
discussion.inc(domainId, did, 'views', 1),
discussion.setStatus(domainId, did, this.user._id, { view: true }),
]);
}
const path = [
['Hydro', 'homepage'],
['discussion_main', 'discussion_main'],
+13
View File
@@ -9,6 +9,7 @@ import TaskModel from './task';
import { DiscussionNodeNotFoundError, DocumentNotFoundError } from '../error';
import { DiscussionReplyDoc, DiscussionTailReplyDoc, Document } from '../interface';
import { buildProjection } from '../utils';
import { NumberKeys } from '../typeutils';
import * as bus from '../service/bus';
export interface DiscussionDoc extends Document { }
@@ -112,6 +113,12 @@ export function edit(
return document.set(domainId, document.TYPE_DISCUSSION, did, payload);
}
export function inc(
domainId: string, did: ObjectID, key: NumberKeys<DiscussionDoc>, value: number,
): Promise<DiscussionDoc | null> {
return document.inc(domainId, document.TYPE_DISCUSSION, did, key, value);
}
export function del(domainId: string, did: ObjectID): Promise<never> {
return Promise.all([
document.deleteOne(domainId, document.TYPE_DISCUSSION, did),
@@ -221,6 +228,10 @@ export function getStatus(domainId: string, did: ObjectID, uid: number) {
return document.getStatus(domainId, document.TYPE_DISCUSSION, did, uid);
}
export function setStatus(domainId: string, did: ObjectID, uid: number, $set) {
return document.setStatus(domainId, document.TYPE_DISCUSSION, did, uid, $set);
}
export function addNode(domainId: string, _id: string, category: string, args: any = {}) {
return document.add(
domainId, category, 1, document.TYPE_DISCUSSION_NODE,
@@ -327,6 +338,7 @@ global.Hydro.model.discussion = {
add,
get,
inc,
edit,
del,
count,
@@ -344,6 +356,7 @@ global.Hydro.model.discussion = {
react,
setStar,
getStatus,
setStatus,
addNode,
getNode,
getNodes,