diff options
Diffstat (limited to 'src/services/note/reaction/delete.ts')
| -rw-r--r-- | src/services/note/reaction/delete.ts | 48 |
1 files changed, 24 insertions, 24 deletions
diff --git a/src/services/note/reaction/delete.ts b/src/services/note/reaction/delete.ts index 695534db61..6e9611ca5a 100644 --- a/src/services/note/reaction/delete.ts +++ b/src/services/note/reaction/delete.ts @@ -1,50 +1,50 @@ -import { IUser, isLocalUser, isRemoteUser } from '../../../models/user'; -import Note, { INote } from '../../../models/note'; -import NoteReaction from '../../../models/note-reaction'; import { publishNoteStream } from '../../stream'; import renderLike from '../../../remote/activitypub/renderer/like'; import renderUndo from '../../../remote/activitypub/renderer/undo'; import { renderActivity } from '../../../remote/activitypub/renderer'; import { deliver } from '../../../queue'; import { IdentifiableError } from '../../../misc/identifiable-error'; +import { User } from '../../../models/entities/user'; +import { Note } from '../../../models/entities/note'; +import { NoteReactions, Users, Notes } from '../../../models'; -export default async (user: IUser, note: INote) => { +export default async (user: User, note: Note) => { // if already unreacted - const exist = await NoteReaction.findOne({ - noteId: note._id, - userId: user._id, - deletedAt: { $exists: false } + const exist = await NoteReactions.findOne({ + noteId: note.id, + userId: user.id, }); - if (exist === null) { + if (exist == null) { throw new IdentifiableError('60527ec9-b4cb-4a88-a6bd-32d3ad26817d', 'not reacted'); } // Delete reaction - await NoteReaction.remove({ - _id: exist._id - }); - - const dec: any = {}; - dec[`reactionCounts.${exist.reaction}`] = -1; + await NoteReactions.delete(exist.id); // Decrement reactions count - Note.update({ _id: note._id }, { - $inc: dec - }); + const sql = `jsonb_set("reactions", '{${exist.reaction}}', (COALESCE("reactions"->>'${exist.reaction}', '0')::int - 1)::text::jsonb)`; + await Notes.createQueryBuilder().update() + .set({ + reactions: () => sql, + }) + .where('id = :id', { id: note.id }) + .execute(); - publishNoteStream(note._id, 'unreacted', { + Notes.decrement({ id: note.id }, 'score', 1); + + publishNoteStream(note.id, 'unreacted', { reaction: exist.reaction, - userId: user._id + userId: user.id }); //#region 配信 // リアクターがローカルユーザーかつリアクション対象がリモートユーザーの投稿なら配送 - if (isLocalUser(user) && isRemoteUser(note._user)) { + if (Users.isLocalUser(user) && (note.userHost !== null)) { const content = renderActivity(renderUndo(renderLike(user, note, exist.reaction), user)); - deliver(user, content, note._user.inbox); + Users.findOne(note.userId).then(u => { + deliver(user, content, u!.inbox); + }); } //#endregion - - return; }; |