summaryrefslogtreecommitdiff
path: root/src/server/api/endpoints/notes
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/api/endpoints/notes')
-rw-r--r--src/server/api/endpoints/notes/create.ts2
-rw-r--r--src/server/api/endpoints/notes/delete.ts21
-rw-r--r--src/server/api/endpoints/notes/favorites/create.ts5
-rw-r--r--src/server/api/endpoints/notes/favorites/delete.ts21
-rw-r--r--src/server/api/endpoints/notes/featured.ts49
-rw-r--r--src/server/api/endpoints/notes/global-timeline.ts2
-rw-r--r--src/server/api/endpoints/notes/hybrid-timeline.ts2
-rw-r--r--src/server/api/endpoints/notes/local-timeline.ts2
-rw-r--r--src/server/api/endpoints/notes/mentions.ts4
-rw-r--r--src/server/api/endpoints/notes/reactions/create.ts2
-rw-r--r--src/server/api/endpoints/notes/search_by_tag.ts2
-rw-r--r--src/server/api/endpoints/notes/show.ts31
-rw-r--r--src/server/api/endpoints/notes/timeline.ts2
-rw-r--r--src/server/api/endpoints/notes/user-list-timeline.ts2
14 files changed, 127 insertions, 20 deletions
diff --git a/src/server/api/endpoints/notes/create.ts b/src/server/api/endpoints/notes/create.ts
index 96745132a3..432561da38 100644
--- a/src/server/api/endpoints/notes/create.ts
+++ b/src/server/api/endpoints/notes/create.ts
@@ -8,6 +8,8 @@ import { IApp } from '../../../../models/app';
import getParams from '../../get-params';
export const meta = {
+ stability: 'stable',
+
desc: {
'ja-JP': '投稿します。'
},
diff --git a/src/server/api/endpoints/notes/delete.ts b/src/server/api/endpoints/notes/delete.ts
index 2fe36897c0..160d5c4cf6 100644
--- a/src/server/api/endpoints/notes/delete.ts
+++ b/src/server/api/endpoints/notes/delete.ts
@@ -2,8 +2,11 @@ import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
import Note from '../../../../models/note';
import deleteNote from '../../../../services/note/delete';
import User, { ILocalUser } from '../../../../models/user';
+import getParams from '../../get-params';
export const meta = {
+ stability: 'stable',
+
desc: {
'ja-JP': '指定した投稿を削除します。',
'en-US': 'Delete a note.'
@@ -11,17 +14,25 @@ export const meta = {
requireCredential: true,
- kind: 'note-write'
+ kind: 'note-write',
+
+ params: {
+ noteId: $.type(ID).note({
+ desc: {
+ 'ja-JP': '対象の投稿のID',
+ 'en-US': 'Target note ID.'
+ }
+ })
+ }
};
export default (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 note
const note = await Note.findOne({
- _id: noteId
+ _id: ps.noteId
});
if (note === null) {
diff --git a/src/server/api/endpoints/notes/favorites/create.ts b/src/server/api/endpoints/notes/favorites/create.ts
index 9aefb701ae..76673e248a 100644
--- a/src/server/api/endpoints/notes/favorites/create.ts
+++ b/src/server/api/endpoints/notes/favorites/create.ts
@@ -5,6 +5,8 @@ import { ILocalUser } from '../../../../../models/user';
import getParams from '../../../get-params';
export const meta = {
+ stability: 'stable',
+
desc: {
'ja-JP': '指定した投稿をお気に入りに登録します。',
'en-US': 'Favorite a note.'
@@ -17,7 +19,8 @@ export const meta = {
params: {
noteId: $.type(ID).note({
desc: {
- 'ja-JP': '対象の投稿のID'
+ 'ja-JP': '対象の投稿のID',
+ 'en-US': 'Target note ID.'
}
})
}
diff --git a/src/server/api/endpoints/notes/favorites/delete.ts b/src/server/api/endpoints/notes/favorites/delete.ts
index e42b24d324..70e1ca8ccf 100644
--- a/src/server/api/endpoints/notes/favorites/delete.ts
+++ b/src/server/api/endpoints/notes/favorites/delete.ts
@@ -2,8 +2,11 @@ import $ from 'cafy'; import ID from '../../../../../misc/cafy-id';
import Favorite from '../../../../../models/favorite';
import Note from '../../../../../models/note';
import { ILocalUser } from '../../../../../models/user';
+import getParams from '../../../get-params';
export const meta = {
+ stability: 'stable',
+
desc: {
'ja-JP': '指定した投稿のお気に入りを解除します。',
'en-US': 'Unfavorite a note.'
@@ -11,17 +14,25 @@ export const meta = {
requireCredential: true,
- kind: 'favorite-write'
+ kind: 'favorite-write',
+
+ params: {
+ noteId: $.type(ID).note({
+ desc: {
+ 'ja-JP': '対象の投稿のID',
+ 'en-US': 'Target note ID.'
+ }
+ })
+ }
};
export default (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);
// Get favoritee
const note = await Note.findOne({
- _id: noteId
+ _id: ps.noteId
});
if (note === null) {
diff --git a/src/server/api/endpoints/notes/featured.ts b/src/server/api/endpoints/notes/featured.ts
new file mode 100644
index 0000000000..363170ead6
--- /dev/null
+++ b/src/server/api/endpoints/notes/featured.ts
@@ -0,0 +1,49 @@
+import $ from 'cafy';
+import Note from '../../../../models/note';
+import { packMany } from '../../../../models/note';
+import { ILocalUser } from '../../../../models/user';
+import getParams from '../../get-params';
+
+export const meta = {
+ desc: {
+ 'ja-JP': 'Featuredな投稿を取得します。',
+ 'en-US': 'Get featured notes.'
+ },
+
+ requireCredential: false,
+
+ params: {
+ limit: $.num.optional.range(1, 30).note({
+ default: 10,
+ desc: {
+ 'ja-JP': '最大数'
+ }
+ })
+ }
+};
+
+export default async (params: any, user: ILocalUser) => {
+ const [ps, psErr] = getParams(meta, params);
+ if (psErr) throw psErr;
+
+ const day = 1000 * 60 * 60 * 24;
+
+ const notes = await Note
+ .find({
+ createdAt: {
+ $gt: new Date(Date.now() - day)
+ },
+ deletedAt: null,
+ visibility: { $in: ['public', 'home'] }
+ }, {
+ limit: ps.limit,
+ sort: {
+ score: -1
+ },
+ hint: {
+ score: -1
+ }
+ });
+
+ return await packMany(notes, user);
+};
diff --git a/src/server/api/endpoints/notes/global-timeline.ts b/src/server/api/endpoints/notes/global-timeline.ts
index 8362143bb2..8a6c848943 100644
--- a/src/server/api/endpoints/notes/global-timeline.ts
+++ b/src/server/api/endpoints/notes/global-timeline.ts
@@ -58,6 +58,8 @@ export default async (params: any, user: ILocalUser) => {
};
const query = {
+ deletedAt: null,
+
// public only
visibility: 'public',
diff --git a/src/server/api/endpoints/notes/hybrid-timeline.ts b/src/server/api/endpoints/notes/hybrid-timeline.ts
index 14b4432b33..b2ea9c60ac 100644
--- a/src/server/api/endpoints/notes/hybrid-timeline.ts
+++ b/src/server/api/endpoints/notes/hybrid-timeline.ts
@@ -129,6 +129,8 @@ export default async (params: any, user: ILocalUser) => {
const query = {
$and: [{
+ deletedAt: null,
+
$or: [{
// フォローしている人の投稿
$or: followQuery
diff --git a/src/server/api/endpoints/notes/local-timeline.ts b/src/server/api/endpoints/notes/local-timeline.ts
index 8ab07d8ea7..510564129c 100644
--- a/src/server/api/endpoints/notes/local-timeline.ts
+++ b/src/server/api/endpoints/notes/local-timeline.ts
@@ -71,6 +71,8 @@ export default async (params: any, user: ILocalUser) => {
};
const query = {
+ deletedAt: null,
+
// public only
visibility: 'public',
diff --git a/src/server/api/endpoints/notes/mentions.ts b/src/server/api/endpoints/notes/mentions.ts
index 592a94263d..7de0102c6d 100644
--- a/src/server/api/endpoints/notes/mentions.ts
+++ b/src/server/api/endpoints/notes/mentions.ts
@@ -36,7 +36,7 @@ export const meta = {
export default (params: any, user: ILocalUser) => new Promise(async (res, rej) => {
const [ps, psErr] = getParams(meta, params);
- if (psErr) throw psErr;
+ if (psErr) return rej(psErr);
// Check if both of sinceId and untilId is specified
if (ps.sinceId && ps.untilId) {
@@ -45,6 +45,8 @@ export default (params: any, user: ILocalUser) => new Promise(async (res, rej) =
// Construct query
const query = {
+ deletedAt: null,
+
$or: [{
mentions: user._id
}, {
diff --git a/src/server/api/endpoints/notes/reactions/create.ts b/src/server/api/endpoints/notes/reactions/create.ts
index ec68f065d8..aa9ab07384 100644
--- a/src/server/api/endpoints/notes/reactions/create.ts
+++ b/src/server/api/endpoints/notes/reactions/create.ts
@@ -6,6 +6,8 @@ import { ILocalUser } from '../../../../../models/user';
import getParams from '../../../get-params';
export const meta = {
+ stability: 'stable',
+
desc: {
'ja-JP': '指定した投稿にリアクションします。',
'en-US': 'React to a note.'
diff --git a/src/server/api/endpoints/notes/search_by_tag.ts b/src/server/api/endpoints/notes/search_by_tag.ts
index d380f27f9c..e7fa15f768 100644
--- a/src/server/api/endpoints/notes/search_by_tag.ts
+++ b/src/server/api/endpoints/notes/search_by_tag.ts
@@ -111,7 +111,7 @@ export const meta = {
export default (params: any, me: ILocalUser) => new Promise(async (res, rej) => {
const [ps, psErr] = getParams(meta, params);
- if (psErr) throw psErr;
+ if (psErr) return rej(psErr);
if (ps.includeUserUsernames != null) {
const ids = erase(null, await Promise.all(ps.includeUserUsernames.map(async (username) => {
diff --git a/src/server/api/endpoints/notes/show.ts b/src/server/api/endpoints/notes/show.ts
index 3f94eeede5..e84a948c97 100644
--- a/src/server/api/endpoints/notes/show.ts
+++ b/src/server/api/endpoints/notes/show.ts
@@ -1,18 +1,35 @@
import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
import Note, { pack } from '../../../../models/note';
import { ILocalUser } from '../../../../models/user';
+import getParams from '../../get-params';
+
+export const meta = {
+ stability: 'stable',
+
+ desc: {
+ 'ja-JP': '指定した投稿を取得します。',
+ 'en-US': 'Get a note.'
+ },
+
+ requireCredential: false,
+
+ params: {
+ noteId: $.type(ID).note({
+ desc: {
+ 'ja-JP': '対象の投稿のID',
+ 'en-US': 'Target note ID.'
+ }
+ })
+ }
+};
-/**
- * Show a note
- */
export default (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);
// Get note
const note = await Note.findOne({
- _id: noteId
+ _id: ps.noteId
});
if (note === null) {
diff --git a/src/server/api/endpoints/notes/timeline.ts b/src/server/api/endpoints/notes/timeline.ts
index 44a504eb18..31a4978407 100644
--- a/src/server/api/endpoints/notes/timeline.ts
+++ b/src/server/api/endpoints/notes/timeline.ts
@@ -132,6 +132,8 @@ export default async (params: any, user: ILocalUser) => {
const query = {
$and: [{
+ deletedAt: null,
+
// フォローしている人の投稿
$or: followQuery,
diff --git a/src/server/api/endpoints/notes/user-list-timeline.ts b/src/server/api/endpoints/notes/user-list-timeline.ts
index 6758b4eb73..7dddc4834e 100644
--- a/src/server/api/endpoints/notes/user-list-timeline.ts
+++ b/src/server/api/endpoints/notes/user-list-timeline.ts
@@ -137,6 +137,8 @@ export default async (params: any, user: ILocalUser) => {
const query = {
$and: [{
+ deletedAt: null,
+
// リストに入っている人のタイムラインへの投稿
$or: listQuery,