summaryrefslogtreecommitdiff
path: root/src/services/note/reaction/delete.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/services/note/reaction/delete.ts')
-rw-r--r--src/services/note/reaction/delete.ts48
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;
};