summaryrefslogtreecommitdiff
path: root/src/models
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2018-04-19 12:43:25 +0900
committersyuilo <syuilotan@yahoo.co.jp>2018-04-19 12:43:25 +0900
commit0d5bc3be6611a6877a71233ac57c0987027c0398 (patch)
tree28c6b736dc870b6de5893ee52b712c20973b7298 /src/models
parentMerge pull request #1514 from syuilo/greenkeeper/style-loader-0.21.0 (diff)
downloadmisskey-0d5bc3be6611a6877a71233ac57c0987027c0398.tar.gz
misskey-0d5bc3be6611a6877a71233ac57c0987027c0398.tar.bz2
misskey-0d5bc3be6611a6877a71233ac57c0987027c0398.zip
ストーキング実装
Closes #1511
Diffstat (limited to 'src/models')
-rw-r--r--src/models/following.ts11
-rw-r--r--src/models/note.ts5
-rw-r--r--src/models/user.ts43
3 files changed, 33 insertions, 26 deletions
diff --git a/src/models/following.ts b/src/models/following.ts
index f10e349ee9..4712379a70 100644
--- a/src/models/following.ts
+++ b/src/models/following.ts
@@ -10,6 +10,17 @@ export type IFollowing = {
createdAt: Date;
followeeId: mongo.ObjectID;
followerId: mongo.ObjectID;
+ stalk: boolean;
+
+ // 非正規化
+ _followee: {
+ host: string;
+ inbox?: string;
+ },
+ _follower: {
+ host: string;
+ inbox?: string;
+ }
};
/**
diff --git a/src/models/note.ts b/src/models/note.ts
index 3059593540..d4b16afa4c 100644
--- a/src/models/note.ts
+++ b/src/models/note.ts
@@ -58,6 +58,7 @@ export type INote = {
};
uri: string;
+ // 非正規化
_reply?: {
userId: mongo.ObjectID;
};
@@ -66,9 +67,7 @@ export type INote = {
};
_user: {
host: string;
- account: {
- inbox?: string;
- };
+ inbox?: string;
};
};
diff --git a/src/models/user.ts b/src/models/user.ts
index bcb2a73e24..ca1ca28937 100644
--- a/src/models/user.ts
+++ b/src/models/user.ts
@@ -5,7 +5,7 @@ import db from '../db/mongodb';
import Note, { pack as packNote, deleteNote } from './note';
import Following, { deleteFollowing } from './following';
import Mute, { deleteMute } from './mute';
-import getFriends from '../server/api/common/get-friends';
+import { getFriendIds } from '../server/api/common/get-friends';
import config from '../config';
import AccessToken, { deleteAccessToken } from './access-token';
import NoteWatching, { deleteNoteWatching } from './note-watching';
@@ -375,33 +375,30 @@ export const pack = (
}
if (meId && !meId.equals(_user.id)) {
- // Whether the user is following
- _user.isFollowing = (async () => {
- const follow = await Following.findOne({
+ const [following1, following2, mute] = await Promise.all([
+ Following.findOne({
followerId: meId,
followeeId: _user.id
- });
- return follow !== null;
- })();
-
- // Whether the user is followed
- _user.isFollowed = (async () => {
- const follow2 = await Following.findOne({
+ }),
+ Following.findOne({
followerId: _user.id,
followeeId: meId
- });
- return follow2 !== null;
- })();
+ }),
+ Mute.findOne({
+ muterId: meId,
+ muteeId: _user.id
+ })
+ ]);
+
+ // Whether the user is following
+ _user.isFollowing = following1 !== null;
+ _user.isStalking = following1 && following1.stalk;
+
+ // Whether the user is followed
+ _user.isFollowed = following2 !== null;
// Whether the user is muted
- _user.isMuted = (async () => {
- const mute = await Mute.findOne({
- muterId: meId,
- muteeId: _user.id,
- deletedAt: { $exists: false }
- });
- return mute !== null;
- })();
+ _user.isMuted = mute !== null;
}
if (opts.detail) {
@@ -413,7 +410,7 @@ export const pack = (
}
if (meId && !meId.equals(_user.id)) {
- const myFollowingIds = await getFriends(meId);
+ const myFollowingIds = await getFriendIds(meId);
// Get following you know count
_user.followingYouKnowCount = Following.count({