summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2018-10-05 01:43:47 +0900
committersyuilo <syuilotan@yahoo.co.jp>2018-10-05 01:43:47 +0900
commitbaf9b658018e6b7d4bc2645eef871e9a57ef23db (patch)
treee09f3bfec0d5804e2beab3c0452e81350baa468c /src
parent9.5.0 (diff)
downloadsharkey-baf9b658018e6b7d4bc2645eef871e9a57ef23db.tar.gz
sharkey-baf9b658018e6b7d4bc2645eef871e9a57ef23db.tar.bz2
sharkey-baf9b658018e6b7d4bc2645eef871e9a57ef23db.zip
Improve error handling of packaging functions
Diffstat (limited to 'src')
-rw-r--r--src/models/drive-file.ts15
-rw-r--r--src/models/note.ts12
-rw-r--r--src/models/user.ts2
-rw-r--r--src/server/api/endpoints/drive/files.ts5
-rw-r--r--src/server/api/endpoints/drive/stream.ts4
5 files changed, 27 insertions, 11 deletions
diff --git a/src/models/drive-file.ts b/src/models/drive-file.ts
index 215b49b305..c11121126f 100644
--- a/src/models/drive-file.ts
+++ b/src/models/drive-file.ts
@@ -127,6 +127,15 @@ export async function deleteDriveFile(driveFile: string | mongo.ObjectID | IDriv
});
}
+export const packMany = async (
+ files: any[],
+ options?: {
+ detail: boolean
+ }
+) => {
+ return (await Promise.all(files.map(f => pack(f, options)))).filter(x => x != null);
+};
+
/**
* Pack a drive file for API response
*/
@@ -155,7 +164,11 @@ export const pack = (
_file = deepcopy(file);
}
- if (!_file) return reject('invalid file arg.');
+ // (データベースの欠損などで)ファイルがデータベース上に見つからなかったとき
+ if (_file == null) {
+ console.warn(`in packaging driveFile: driveFile not found on database: ${_file}`);
+ return null;
+ }
// rendered target
let _target: any = {};
diff --git a/src/models/note.ts b/src/models/note.ts
index 75518d709f..43b8753195 100644
--- a/src/models/note.ts
+++ b/src/models/note.ts
@@ -7,7 +7,7 @@ import { IUser, pack as packUser } from './user';
import { pack as packApp } from './app';
import PollVote, { deletePollVote } from './poll-vote';
import Reaction, { deleteNoteReaction } from './note-reaction';
-import { pack as packFile, IDriveFile } from './drive-file';
+import { packMany as packFileMany, IDriveFile } from './drive-file';
import NoteWatching, { deleteNoteWatching } from './note-watching';
import NoteReaction from './note-reaction';
import Favorite, { deleteFavorite } from './favorite';
@@ -309,9 +309,7 @@ export const pack = async (
}
// Populate files
- _note.files = Promise.all((_note.fileIds || []).map((fileId: mongo.ObjectID) =>
- packFile(fileId)
- ));
+ _note.files = packFileMany(_note.fileIds || []);
// 後方互換性のため
_note.mediaIds = _note.fileIds;
@@ -380,6 +378,12 @@ export const pack = async (
// resolve promises in _note object
_note = await rap(_note);
+ // (データベースの欠損などで)ユーザーがデータベース上に見つからなかったとき
+ if (_note.user == null) {
+ console.warn(`in packaging note: note user not found on database: note(${_note.id})`);
+ return null;
+ }
+
if (_note.user.isCat && _note.text) {
_note.text = _note.text.replace(/な/g, 'にゃ').replace(/ナ/g, 'ニャ').replace(/ナ/g, 'ニャ');
}
diff --git a/src/models/user.ts b/src/models/user.ts
index 3e8aefc4b1..642a993f65 100644
--- a/src/models/user.ts
+++ b/src/models/user.ts
@@ -361,7 +361,7 @@ export const pack = (
_user = deepcopy(user);
}
- // ユーザーがデータベース上に見つからなかったとき
+ // (データベースの欠損などで)ユーザーがデータベース上に見つからなかったとき
if (_user == null) {
console.warn(`user not found on database: ${user}`);
return null;
diff --git a/src/server/api/endpoints/drive/files.ts b/src/server/api/endpoints/drive/files.ts
index dc6a602e10..de0bde086b 100644
--- a/src/server/api/endpoints/drive/files.ts
+++ b/src/server/api/endpoints/drive/files.ts
@@ -1,5 +1,5 @@
import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
-import DriveFile, { pack } from '../../../../models/drive-file';
+import DriveFile, { packMany } from '../../../../models/drive-file';
import { ILocalUser } from '../../../../models/user';
export const meta = {
@@ -73,6 +73,5 @@ export default async (params: any, user: ILocalUser) => {
});
// Serialize
- const _files = await Promise.all(files.map(file => pack(file)));
- return _files;
+ return await packMany(files);
};
diff --git a/src/server/api/endpoints/drive/stream.ts b/src/server/api/endpoints/drive/stream.ts
index a9f3f7e9a5..3ac7dd0234 100644
--- a/src/server/api/endpoints/drive/stream.ts
+++ b/src/server/api/endpoints/drive/stream.ts
@@ -1,5 +1,5 @@
import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
-import DriveFile, { pack } from '../../../../models/drive-file';
+import DriveFile, { packMany } from '../../../../models/drive-file';
import { ILocalUser } from '../../../../models/user';
export const meta = {
@@ -63,5 +63,5 @@ export default (params: any, user: ILocalUser) => new Promise(async (res, rej) =
});
// Serialize
- res(await Promise.all(files.map(file => pack(file))));
+ res(await packMany(files));
});