diff --git a/src/models/favorite.ts b/src/models/favorite.ts index b2d2fc93e8..2c07959be7 100644 --- a/src/models/favorite.ts +++ b/src/models/favorite.ts @@ -41,6 +41,13 @@ export async function deleteFavorite(favorite: string | mongo.ObjectID | IFavori }); } +export const packMany = async ( + favorites: any[], + me: any +) => { + return (await Promise.all(favorites.map(f => pack(f, me)))).filter(x => x != null); +}; + /** * Pack a favorite for API response */ @@ -70,5 +77,11 @@ export const pack = ( // Populate note _favorite.note = await packNote(_favorite.noteId, me); + // (データベースの不具合などで)投稿が見つからなかったら + if (_favorite.note == null) { + console.warn(`favorite: note not found on database: ${_favorite.noteId}`); + return resolve(null); + } + resolve(_favorite); }); diff --git a/src/server/api/endpoints/i/favorites.ts b/src/server/api/endpoints/i/favorites.ts index 32c1a55fb0..e7cf8a71a7 100644 --- a/src/server/api/endpoints/i/favorites.ts +++ b/src/server/api/endpoints/i/favorites.ts @@ -1,5 +1,5 @@ import $ from 'cafy'; import ID from '../../../../misc/cafy-id'; -import Favorite, { pack } from '../../../../models/favorite'; +import Favorite, { packMany } from '../../../../models/favorite'; import { ILocalUser } from '../../../../models/user'; export const meta = { @@ -55,5 +55,5 @@ export default (params: any, user: ILocalUser) => new Promise(async (res, rej) = .find(query, { limit, sort }); // Serialize - res(await Promise.all(favorites.map(favorite => pack(favorite, user)))); + res(await packMany(favorites, user)); });