投稿に関しては論理削除するように

処理をシンプルにするため
This commit is contained in:
syuilo 2018-04-07 07:19:30 +09:00
parent 8273a7e748
commit 494597236c
5 changed files with 10 additions and 43 deletions

View file

@ -27,6 +27,7 @@ export type IPost = {
_id: mongo.ObjectID; _id: mongo.ObjectID;
channelId: mongo.ObjectID; channelId: mongo.ObjectID;
createdAt: Date; createdAt: Date;
deletedAt: Date;
mediaIds: mongo.ObjectID[]; mediaIds: mongo.ObjectID[];
replyId: mongo.ObjectID; replyId: mongo.ObjectID;
repostId: mongo.ObjectID; repostId: mongo.ObjectID;

View file

@ -1,7 +1,6 @@
import { createQueue } from 'kue'; import { createQueue } from 'kue';
import config from '../config'; import config from '../config';
import db from './processors/db';
import http from './processors/http'; import http from './processors/http';
const queue = createQueue({ const queue = createQueue({
@ -19,10 +18,6 @@ export function createHttp(data) {
.backoff({ delay: 16384, type: 'exponential' }); .backoff({ delay: 16384, type: 'exponential' });
} }
export function createDb(data) {
return queue.create('db', data);
}
export function deliver(user, content, to) { export function deliver(user, content, to) {
return createHttp({ return createHttp({
type: 'deliver', type: 'deliver',
@ -33,8 +28,6 @@ export function deliver(user, content, to) {
} }
export default function() { export default function() {
queue.process('db', db);
/* /*
256 is the default concurrency limit of Mozilla Firefox and Google 256 is the default concurrency limit of Mozilla Firefox and Google
Chromium. Chromium.

View file

@ -1,22 +0,0 @@
import Favorite from '../../../models/favorite';
import Notification from '../../../models/notification';
import PollVote from '../../../models/poll-vote';
import PostReaction from '../../../models/post-reaction';
import PostWatching from '../../../models/post-watching';
import Post from '../../../models/post';
export default async ({ data }) => Promise.all([
Favorite.remove({ postId: data._id }),
Notification.remove({ postId: data._id }),
PollVote.remove({ postId: data._id }),
PostReaction.remove({ postId: data._id }),
PostWatching.remove({ postId: data._id }),
Post.find({ repostId: data._id }).then(reposts => Promise.all([
Notification.remove({
postId: {
$in: reposts.map(({ _id }) => _id)
}
}),
Post.remove({ repostId: data._id })
]))
]);

View file

@ -1,7 +0,0 @@
import deletePostDependents from './delete-post-dependents';
const handlers = {
deletePostDependents
};
export default (job, done) => handlers[job.data.type](job).then(() => done(), done);

View file

@ -1,7 +1,6 @@
import * as debug from 'debug'; import * as debug from 'debug';
import Post from '../../../../models/post'; import Post from '../../../../models/post';
import { createDb } from '../../../../queue';
import { IRemoteUser } from '../../../../models/user'; import { IRemoteUser } from '../../../../models/user';
const log = debug('misskey:activitypub'); const log = debug('misskey:activitypub');
@ -19,10 +18,13 @@ export default async function(actor: IRemoteUser, uri: string): Promise<void> {
throw new Error('投稿を削除しようとしているユーザーは投稿の作成者ではありません'); throw new Error('投稿を削除しようとしているユーザーは投稿の作成者ではありません');
} }
Post.remove({ _id: post._id }); Post.update({ _id: post._id }, {
$set: {
createDb({ deletedAt: new Date(),
type: 'deletePostDependents', text: null,
id: post._id textHtml: null,
}).delay(65536).save(); mediaIds: [],
poll: null
}
});
} }