summaryrefslogtreecommitdiff
path: root/src/services/note/delete.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/services/note/delete.ts')
-rw-r--r--src/services/note/delete.ts94
1 files changed, 20 insertions, 74 deletions
diff --git a/src/services/note/delete.ts b/src/services/note/delete.ts
index d71c97b2ca..7f04d12cd5 100644
--- a/src/services/note/delete.ts
+++ b/src/services/note/delete.ts
@@ -1,99 +1,50 @@
-import Note, { INote } from '../../models/note';
-import { IUser, isLocalUser, isRemoteUser } from '../../models/user';
import { publishNoteStream } from '../stream';
import renderDelete from '../../remote/activitypub/renderer/delete';
import { renderActivity } from '../../remote/activitypub/renderer';
import { deliver } from '../../queue';
-import Following from '../../models/following';
import renderTombstone from '../../remote/activitypub/renderer/tombstone';
-import notesChart from '../../services/chart/notes';
-import perUserNotesChart from '../../services/chart/per-user-notes';
import config from '../../config';
-import NoteUnread from '../../models/note-unread';
-import read from './read';
-import DriveFile from '../../models/drive-file';
import { registerOrFetchInstanceDoc } from '../register-or-fetch-instance-doc';
-import Instance from '../../models/instance';
-import instanceChart from '../../services/chart/instance';
-import Favorite from '../../models/favorite';
+import { User } from '../../models/entities/user';
+import { Note } from '../../models/entities/note';
+import { Notes, Users, Followings, Instances } from '../../models';
+import { Not } from 'typeorm';
+import { notesChart, perUserNotesChart, instanceChart } from '../chart';
/**
* 投稿を削除します。
* @param user 投稿者
* @param note 投稿
*/
-export default async function(user: IUser, note: INote, quiet = false) {
+export default async function(user: User, note: Note, quiet = false) {
const deletedAt = new Date();
- await Note.update({
- _id: note._id,
- userId: user._id
- }, {
- $set: {
- deletedAt: deletedAt,
- text: null,
- tags: [],
- fileIds: [],
- renoteId: null,
- poll: null,
- geo: null,
- cw: null
- }
+ await Notes.delete({
+ id: note.id,
+ userId: user.id
});
if (note.renoteId) {
- Note.update({ _id: note.renoteId }, {
- $inc: {
- renoteCount: -1,
- score: -1
- },
- $pull: {
- _quoteIds: note._id
- }
- });
- }
-
- // この投稿が関わる未読通知を削除
- NoteUnread.find({
- noteId: note._id
- }).then(unreads => {
- for (const unread of unreads) {
- read(unread.userId, unread.noteId);
- }
- });
-
- // この投稿をお気に入りから削除
- Favorite.remove({
- noteId: note._id
- });
-
- // ファイルが添付されていた場合ドライブのファイルの「このファイルが添付された投稿一覧」プロパティからこの投稿を削除
- if (note.fileIds) {
- for (const fileId of note.fileIds) {
- DriveFile.update({ _id: fileId }, {
- $pull: {
- 'metadata.attachedNoteIds': note._id
- }
- });
- }
+ Notes.decrement({ id: note.renoteId }, 'renoteCount', 1);
+ Notes.decrement({ id: note.renoteId }, 'score', 1);
}
if (!quiet) {
- publishNoteStream(note._id, 'deleted', {
+ publishNoteStream(note.id, 'deleted', {
deletedAt: deletedAt
});
//#region ローカルの投稿なら削除アクティビティを配送
- if (isLocalUser(user)) {
- const content = renderActivity(renderDelete(renderTombstone(`${config.url}/notes/${note._id}`), user));
+ if (Users.isLocalUser(user)) {
+ const content = renderActivity(renderDelete(renderTombstone(`${config.url}/notes/${note.id}`), user));
- const followings = await Following.find({
- followeeId: user._id,
- '_follower.host': { $ne: null }
+ const followings = await Followings.find({
+ followeeId: user.id,
+ followerHost: Not(null)
});
for (const following of followings) {
- deliver(user, content, following._follower.inbox);
+ deliver(user, content, following.followerInbox);
}
}
//#endregion
@@ -102,14 +53,9 @@ export default async function(user: IUser, note: INote, quiet = false) {
notesChart.update(note, false);
perUserNotesChart.update(user, note, false);
- if (isRemoteUser(user)) {
+ if (Users.isRemoteUser(user)) {
registerOrFetchInstanceDoc(user.host).then(i => {
- Instance.update({ _id: i._id }, {
- $inc: {
- notesCount: -1
- }
- });
-
+ Instances.decrement({ id: i.id }, 'notesCount', 1);
instanceChart.updateNote(i.host, false);
});
}