summaryrefslogtreecommitdiff
path: root/src/services/note
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2018-05-28 14:39:46 +0900
committersyuilo <syuilotan@yahoo.co.jp>2018-05-28 14:39:46 +0900
commitceda2ca89661d1bd3889453997fe0868a8c31e9d (patch)
tree94a3a12fc7230abdd9f82d77188fec345dfaf9cd /src/services/note
parent:art: (diff)
downloadsharkey-ceda2ca89661d1bd3889453997fe0868a8c31e9d.tar.gz
sharkey-ceda2ca89661d1bd3889453997fe0868a8c31e9d.tar.bz2
sharkey-ceda2ca89661d1bd3889453997fe0868a8c31e9d.zip
Implement delete note
Diffstat (limited to 'src/services/note')
-rw-r--r--src/services/note/delete.ts44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/services/note/delete.ts b/src/services/note/delete.ts
new file mode 100644
index 0000000000..793f0090be
--- /dev/null
+++ b/src/services/note/delete.ts
@@ -0,0 +1,44 @@
+import Note, { INote } from '../../models/note';
+import { IUser, isLocalUser } from '../../models/user';
+import { publishNoteStream } from '../../publishers/stream';
+import renderDelete from '../../remote/activitypub/renderer/delete';
+import pack from '../../remote/activitypub/renderer';
+import { deliver } from '../../queue';
+import Following from '../../models/following';
+import renderNote from '../../remote/activitypub/renderer/note';
+
+/**
+ * 投稿を削除します。
+ * @param user 投稿者
+ * @param note 投稿
+ */
+export default async function(user: IUser, note: INote) {
+ await Note.update({
+ _id: note._id,
+ userId: user._id
+ }, {
+ $set: {
+ deletedAt: new Date(),
+ text: null,
+ mediaIds: [],
+ poll: null
+ }
+ });
+
+ publishNoteStream(note._id, 'deleted');
+
+ //#region ローカルの投稿なら削除アクティビティを配送
+ if (isLocalUser(user)) {
+ const content = pack(renderDelete(await renderNote(note)));
+
+ const followings = await Following.find({
+ followeeId: user._id,
+ '_follower.host': { $ne: null }
+ });
+
+ followings.forEach(following => {
+ deliver(user, content, following._follower.inbox);
+ });
+ }
+ //#endregion
+}