Implement featured note API

This commit is contained in:
syuilo 2018-10-25 07:04:15 +09:00
parent 407467a236
commit 380f5a972c
No known key found for this signature in database
GPG key ID: BDC4C49D06AB9D69
4 changed files with 65 additions and 8 deletions

View file

@ -22,11 +22,11 @@ Note.createIndex('userId');
Note.createIndex('mentions');
Note.createIndex('visibleUserIds');
Note.createIndex('tagsLower');
Note.createIndex('_user.host');
Note.createIndex('_files._id');
Note.createIndex('_files.contentType');
Note.createIndex({
createdAt: -1
});
Note.createIndex({ createdAt: -1 });
Note.createIndex({ score: -1 }, { sparse: true });
export default Note;
export function isValidText(text: string): boolean {
@ -85,8 +85,14 @@ export type INote = {
heading: number;
speed: number;
};
uri: string;
/**
* 稿
*/
score: number;
// 非正規化
_reply?: {
userId: mongo.ObjectID;
@ -298,6 +304,7 @@ export const pack = async (
delete _note.prev;
delete _note.next;
delete _note.tagsLower;
delete _note.score;
delete _note._user;
delete _note._reply;
delete _note._renote;

View file

@ -0,0 +1,49 @@
import $ from 'cafy';
import Note from '../../../../models/note';
import { packMany } from '../../../../models/note';
import { ILocalUser } from '../../../../models/user';
import getParams from '../../get-params';
export const meta = {
desc: {
'ja-JP': 'Featuredな投稿を取得します。',
'en-US': 'Get featured notes.'
},
requireCredential: false,
params: {
limit: $.num.optional.range(1, 30).note({
default: 10,
desc: {
'ja-JP': '最大数'
}
})
}
};
export default async (params: any, user: ILocalUser) => {
const [ps, psErr] = getParams(meta, params);
if (psErr) throw psErr;
const day = 1000 * 60 * 60 * 24;
const notes = await Note
.find({
createdAt: {
$gt: new Date(Date.now() - day)
},
deletedAt: null,
visibility: { $in: ['public', 'home'] }
}, {
limit: ps.limit,
sort: {
score: -1
},
hint: {
score: -1
}
});
return await packMany(notes, user);
};

View file

@ -314,7 +314,8 @@ async function renderActivity(data: Option, note: INote) {
function incRenoteCount(renote: INote) {
Note.update({ _id: renote._id }, {
$inc: {
renoteCount: 1
renoteCount: 1,
score: 1
}
});
}

View file

@ -36,12 +36,12 @@ export default async (user: IUser, note: INote, reaction: string) => new Promise
res();
const inc: {[key: string]: number} = {};
inc[`reactionCounts.${reaction}`] = 1;
// Increment reactions count
await Note.update({ _id: note._id }, {
$inc: inc
$inc: {
[`reactionCounts.${reaction}`]: 1,
score: 1
}
});
perUserReactionsChart.update(user, note);