[backend] await renote & boost count increments on note create/delete

This commit is contained in:
Laura Hausmann 2023-10-07 14:52:05 +02:00
parent f800f1806c
commit 8cbcb5766a
No known key found for this signature in database
GPG key ID: D044E84C5BE01605
2 changed files with 21 additions and 24 deletions

View file

@ -330,6 +330,19 @@ export default async (
const note = await insertNote(user, data, tags, emojis, mentionedUsers); const note = await insertNote(user, data, tags, emojis, mentionedUsers);
// We need to increment these before resolving the promise
if (data.reply) {
await incRepliesCount(data.reply);
}
// この投稿を除く指定したユーザーによる指定したノートのリノートが存在しないとき
if (
data.renote &&
(await countSameRenotes(user.id, data.renote.id, note.id)) === 0
) {
await incRenoteCount(data.renote);
}
res(note); res(note);
// 統計を更新 // 統計を更新
@ -402,17 +415,6 @@ export default async (
); );
} }
if (data.reply) {
saveReply(data.reply, note);
}
// この投稿を除く指定したユーザーによる指定したノートのリノートが存在しないとき
if (
data.renote &&
(await countSameRenotes(user.id, data.renote.id, note.id)) === 0
) {
incRenoteCount(data.renote);
}
if (data.poll?.expiresAt) { if (data.poll?.expiresAt) {
const delay = data.poll.expiresAt.getTime() - Date.now(); const delay = data.poll.expiresAt.getTime() - Date.now();
@ -674,15 +676,10 @@ async function renderNoteOrRenoteActivity(data: Option, note: Note) {
return renderActivity(content); return renderActivity(content);
} }
function incRenoteCount(renote: Note) { async function incRenoteCount(renote: Note) {
Notes.createQueryBuilder() // only await renoteCount increment, as score isn't relevant for returning the correct created note response
.update() await Notes.increment({ id: renote.id }, "renoteCount", 1);
.set({ Notes.increment({ id: renote.id }, "score", 1);
renoteCount: () => '"renoteCount" + 1',
score: () => '"score" + 1',
})
.where("id = :id", { id: renote.id })
.execute();
} }
async function insertNote( async function insertNote(
@ -910,8 +907,8 @@ async function createMentionedEvents(
} }
} }
function saveReply(reply: Note, note: Note) { async function incRepliesCount(reply: Note) {
Notes.increment({ id: reply.id }, "repliesCount", 1); await Notes.increment({ id: reply.id }, "repliesCount", 1);
} }
function incNotesCountOfUser(user: { id: User["id"] }) { function incNotesCountOfUser(user: { id: User["id"] }) {

View file

@ -40,8 +40,8 @@ export default async function (
note.renoteId && note.renoteId &&
(await countSameRenotes(user.id, note.renoteId, note.id)) === 0 (await countSameRenotes(user.id, note.renoteId, note.id)) === 0
) { ) {
Notes.decrement({ id: note.renoteId }, "renoteCount", 1); await Notes.decrement({ id: note.renoteId }, "renoteCount", 1);
Notes.decrement({ id: note.renoteId }, "score", 1); await Notes.decrement({ id: note.renoteId }, "score", 1);
} }
if (note.replyId) { if (note.replyId) {