summaryrefslogtreecommitdiff
path: root/src/server/api/endpoints/i/pin.ts
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2018-09-24 16:26:12 +0900
committersyuilo <syuilotan@yahoo.co.jp>2018-09-24 16:26:12 +0900
commit59d67d314069c19dcc5c2c7d82f260a9f8c661cd (patch)
tree06d7298ed62c6ae141c4a380e41792a38951a14b /src/server/api/endpoints/i/pin.ts
parent:art: (diff)
downloadsharkey-59d67d314069c19dcc5c2c7d82f260a9f8c661cd.tar.gz
sharkey-59d67d314069c19dcc5c2c7d82f260a9f8c661cd.tar.bz2
sharkey-59d67d314069c19dcc5c2c7d82f260a9f8c661cd.zip
ピン留めを解除することができるようにしたり
Diffstat (limited to 'src/server/api/endpoints/i/pin.ts')
-rw-r--r--src/server/api/endpoints/i/pin.ts49
1 files changed, 29 insertions, 20 deletions
diff --git a/src/server/api/endpoints/i/pin.ts b/src/server/api/endpoints/i/pin.ts
index d075976b74..f9ae032b11 100644
--- a/src/server/api/endpoints/i/pin.ts
+++ b/src/server/api/endpoints/i/pin.ts
@@ -1,21 +1,35 @@
-import * as mongo from 'mongodb';
import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
import User, { ILocalUser } from '../../../../models/user';
import Note from '../../../../models/note';
import { pack } from '../../../../models/user';
import { deliverPinnedChange } from '../../../../services/i/pin';
+import getParams from '../../get-params';
+
+export const meta = {
+ desc: {
+ 'ja-JP': '指定した投稿をピン留めします。'
+ },
+
+ requireCredential: true,
+
+ kind: 'account-write',
+
+ params: {
+ noteId: $.type(ID).note({
+ desc: {
+ 'ja-JP': '対象の投稿のID'
+ }
+ })
+ }
+};
-/**
- * Pin note
- */
export default async (params: any, user: ILocalUser) => new Promise(async (res, rej) => {
- // Get 'noteId' parameter
- const [noteId, noteIdErr] = $.type(ID).get(params.noteId);
- if (noteIdErr) return rej('invalid noteId param');
+ const [ps, psErr] = getParams(meta, params);
+ if (psErr) return rej(psErr);
// Fetch pinee
const note = await Note.findOne({
- _id: noteId,
+ _id: ps.noteId,
userId: user._id
});
@@ -23,21 +37,17 @@ export default async (params: any, user: ILocalUser) => new Promise(async (res,
return rej('note not found');
}
- let addedId: mongo.ObjectID;
- let removedId: mongo.ObjectID;
-
const pinnedNoteIds = user.pinnedNoteIds || [];
+ if (pinnedNoteIds.length > 5) {
+ return rej('cannot pin more notes');
+ }
+
if (pinnedNoteIds.some(id => id.equals(note._id))) {
return rej('already exists');
}
pinnedNoteIds.unshift(note._id);
- addedId = note._id;
-
- if (pinnedNoteIds.length > 5) {
- removedId = pinnedNoteIds.pop();
- }
await User.update(user._id, {
$set: {
@@ -45,14 +55,13 @@ export default async (params: any, user: ILocalUser) => new Promise(async (res,
}
});
- // Serialize
const iObj = await pack(user, user, {
detail: true
});
- // Send Add/Remove to followers
- deliverPinnedChange(user._id, removedId, addedId);
-
// Send response
res(iObj);
+
+ // Send Add to followers
+ deliverPinnedChange(user._id, note._id, true);
});