summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2018-09-18 06:29:47 +0900
committersyuilo <syuilotan@yahoo.co.jp>2018-09-18 06:29:47 +0900
commit1f2ebce8ed749d7e81e999944fc8a22ff39b87b7 (patch)
tree4f008a9546f9657c7fc4758f852778e02566437a /src
parentClean up: Remove unused import (diff)
downloadsharkey-1f2ebce8ed749d7e81e999944fc8a22ff39b87b7.tar.gz
sharkey-1f2ebce8ed749d7e81e999944fc8a22ff39b87b7.tar.bz2
sharkey-1f2ebce8ed749d7e81e999944fc8a22ff39b87b7.zip
Resolve #1302
Diffstat (limited to 'src')
-rw-r--r--src/client/app/desktop/views/pages/user/user.vue2
-rw-r--r--src/client/app/mobile/views/pages/user/home.vue2
-rw-r--r--src/docs/api/entities/user.yaml8
-rw-r--r--src/models/user.ts32
-rw-r--r--src/server/api/endpoints/i/pin.ts14
5 files changed, 46 insertions, 12 deletions
diff --git a/src/client/app/desktop/views/pages/user/user.vue b/src/client/app/desktop/views/pages/user/user.vue
index 28ccd78074..89dbd41b84 100644
--- a/src/client/app/desktop/views/pages/user/user.vue
+++ b/src/client/app/desktop/views/pages/user/user.vue
@@ -6,7 +6,7 @@
<main>
<div class="main">
<x-header :user="user"/>
- <mk-note-detail v-if="user.pinnedNote" :note="user.pinnedNote" :compact="true"/>
+ <mk-note-detail v-for="n in user.pinnedNotes" :key="n.id" :note="n" :compact="true"/>
<x-timeline class="timeline" ref="tl" :user="user"/>
</div>
<div class="side">
diff --git a/src/client/app/mobile/views/pages/user/home.vue b/src/client/app/mobile/views/pages/user/home.vue
index 8b57276b17..4118afef19 100644
--- a/src/client/app/mobile/views/pages/user/home.vue
+++ b/src/client/app/mobile/views/pages/user/home.vue
@@ -1,6 +1,6 @@
<template>
<div class="root home">
- <mk-note-detail v-if="user.pinnedNote" :note="user.pinnedNote" :compact="true"/>
+ <mk-note-detail v-for="n in user.pinnedNotes" :key="n.id" :note="n" :compact="true"/>
<section class="recent-notes">
<h2>%fa:R comments%%i18n:@recent-notes%</h2>
<div>
diff --git a/src/docs/api/entities/user.yaml b/src/docs/api/entities/user.yaml
index c90b55ee88..e3755d8585 100644
--- a/src/docs/api/entities/user.yaml
+++ b/src/docs/api/entities/user.yaml
@@ -101,15 +101,15 @@ props:
ja-JP: "投稿の数"
en-US: "The number of the notes of this user"
- pinnedNote:
- type: "entity(Note)"
+ pinnedNotes:
+ type: "entity(Note)[]"
optional: true
desc:
ja-JP: "ピン留めされた投稿"
en-US: "The pinned note of this user"
- pinnedNoteId:
- type: "id(Note)"
+ pinnedNoteIds:
+ type: "id(Note)[]"
optional: true
desc:
ja-JP: "ピン留めされた投稿のID"
diff --git a/src/models/user.ts b/src/models/user.ts
index 64197c91c2..b595fa8d71 100644
--- a/src/models/user.ts
+++ b/src/models/user.ts
@@ -35,6 +35,28 @@ User.createIndex('uri', { sparse: true, unique: true });
export default User;
+// 後方互換性のため
+User.findOne({
+ pinnedNoteId: { $exists: true }
+}).then(async x => {
+ if (x == null) return;
+
+ const users = await User.find({
+ pinnedNoteId: { $exists: true }
+ });
+
+ users.forEach(u => {
+ User.update({ _id: u._id }, {
+ $set: {
+ pinnedNoteIds: [(u as any).pinnedNoteId]
+ },
+ $unset: {
+ pinnedNoteId: ''
+ }
+ });
+ });
+});
+
type IUserBase = {
_id: mongo.ObjectID;
createdAt: Date;
@@ -53,7 +75,7 @@ type IUserBase = {
wallpaperUrl?: string;
data: any;
description: string;
- pinnedNoteId: mongo.ObjectID;
+ pinnedNoteIds: mongo.ObjectID[];
/**
* 凍結されているか否か
@@ -464,11 +486,11 @@ export const pack = (
}
if (opts.detail) {
- if (_user.pinnedNoteId) {
- // Populate pinned note
- _user.pinnedNote = packNote(_user.pinnedNoteId, meId, {
+ if (_user.pinnedNoteIds) {
+ // Populate pinned notes
+ _user.pinnedNotes = Promise.all(_user.pinnedNoteIds.map((id: mongo.ObjectId) => packNote(id, meId, {
detail: true
- });
+ })));
}
if (meId && !meId.equals(_user.id)) {
diff --git a/src/server/api/endpoints/i/pin.ts b/src/server/api/endpoints/i/pin.ts
index ae03a86336..8804d5aa70 100644
--- a/src/server/api/endpoints/i/pin.ts
+++ b/src/server/api/endpoints/i/pin.ts
@@ -21,9 +21,21 @@ export default async (params: any, user: ILocalUser) => new Promise(async (res,
return rej('note not found');
}
+ const pinnedNoteIds = user.pinnedNoteIds || [];
+
+ if (pinnedNoteIds.some(id => id.equals(note._id))) {
+ return rej('already exists');
+ }
+
+ pinnedNoteIds.unshift(note._id);
+
+ if (pinnedNoteIds.length > 5) {
+ pinnedNoteIds.pop();
+ }
+
await User.update(user._id, {
$set: {
- pinnedNoteId: note._id
+ pinnedNoteIds: pinnedNoteIds
}
});