Improve error handling of API (#4345)

* wip

* wip

* wip

* Update attached_notes.ts

* wip

* Refactor

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* Update call.ts

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* ✌️

* Fix
This commit is contained in:
syuilo
2019-02-22 11:46:58 +09:00
committed by GitHub
parent fc52e95ad0
commit 2756f553c6
181 changed files with 2010 additions and 1322 deletions

View File

@ -25,11 +25,7 @@ export const meta = {
}
};
export default define(meta, (ps) => new Promise(async (res, rej) => {
if (ps.sinceId && ps.untilId) {
return rej('cannot set sinceId and untilId');
}
export default define(meta, async (ps) => {
const sort = {
_id: -1
};
@ -51,5 +47,5 @@ export default define(meta, (ps) => new Promise(async (res, rej) => {
sort: sort
});
res(await packMany(reports));
}));
return await packMany(reports);
});

View File

@ -46,7 +46,7 @@ const sort: any = { // < https://github.com/Microsoft/TypeScript/issues/1863
[fallback]: { _id: -1 }
};
export default define(meta, (ps, me) => new Promise(async (res, rej) => {
export default define(meta, async (ps, me) => {
const q = {
'metadata.deletedAt': { $exists: false },
} as any;
@ -61,5 +61,5 @@ export default define(meta, (ps, me) => new Promise(async (res, rej) => {
skip: ps.offset
});
res(await packMany(files, { detail: true, withUser: true, self: true }));
}));
return await packMany(files, { detail: true, withUser: true, self: true });
});

View File

@ -2,6 +2,7 @@ import $ from 'cafy';
import ID, { transform } from '../../../../../misc/cafy-id';
import define from '../../../define';
import DriveFile from '../../../../../models/drive-file';
import { ApiError } from '../../../error';
export const meta = {
requireCredential: true,
@ -12,17 +13,25 @@ export const meta = {
validator: $.type(ID),
transform: transform,
},
},
errors: {
noSuchFile: {
message: 'No such file.',
code: 'NO_SUCH_FILE',
id: 'caf3ca38-c6e5-472e-a30c-b05377dcc240'
}
}
};
export default define(meta, (ps, me) => new Promise(async (res, rej) => {
export default define(meta, async (ps, me) => {
const file = await DriveFile.findOne({
_id: ps.fileId
});
if (file == null) {
return rej('file not found');
throw new ApiError(meta.errors.noSuchFile);
}
res(file);
}));
return file;
});

View File

@ -26,7 +26,7 @@ export const meta = {
}
};
export default define(meta, (ps) => new Promise(async (res, rej) => {
export default define(meta, async (ps) => {
const emoji = await Emoji.insert({
updatedAt: new Date(),
name: ps.name,
@ -35,7 +35,7 @@ export default define(meta, (ps) => new Promise(async (res, rej) => {
url: ps.url
});
res({
return {
id: emoji._id
});
}));
};
});

View File

@ -18,16 +18,16 @@ export const meta = {
}
};
export default define(meta, (ps) => new Promise(async (res, rej) => {
export default define(meta, async (ps) => {
const emojis = await Emoji.find({
host: ps.host
});
res(emojis.map(e => ({
return emojis.map(e => ({
id: e._id,
name: e.name,
aliases: e.aliases,
host: e.host,
url: e.url
})));
}));
}));
});

View File

@ -18,14 +18,14 @@ export const meta = {
}
};
export default define(meta, (ps) => new Promise(async (res, rej) => {
export default define(meta, async (ps) => {
const emoji = await Emoji.findOne({
_id: ps.id
});
if (emoji == null) return rej('emoji not found');
if (emoji == null) throw new Error('emoji not found');
await Emoji.remove({ _id: emoji._id });
res();
}));
return;
});

View File

@ -30,12 +30,12 @@ export const meta = {
}
};
export default define(meta, (ps) => new Promise(async (res, rej) => {
export default define(meta, async (ps) => {
const emoji = await Emoji.findOne({
_id: ps.id
});
if (emoji == null) return rej('emoji not found');
if (emoji == null) throw new Error('emoji not found');
await Emoji.update({ _id: emoji._id }, {
$set: {
@ -46,5 +46,5 @@ export default define(meta, (ps) => new Promise(async (res, rej) => {
}
});
res();
}));
return;
});

View File

@ -15,7 +15,7 @@ export const meta = {
}
};
export default define(meta, (ps, me) => new Promise(async (res, rej) => {
export default define(meta, async (ps, me) => {
const followings = await Following.find({
'_follower.host': ps.host
});
@ -29,5 +29,5 @@ export default define(meta, (ps, me) => new Promise(async (res, rej) => {
deleteFollowing(pair[0], pair[1]);
}
res();
}));
return;
});

View File

@ -21,11 +21,11 @@ export const meta = {
}
};
export default define(meta, (ps, me) => new Promise(async (res, rej) => {
export default define(meta, async (ps, me) => {
const instance = await Instance.findOne({ host: ps.host });
if (instance == null) {
return rej('instance not found');
throw new Error('instance not found');
}
Instance.update({ host: ps.host }, {
@ -35,5 +35,5 @@ export default define(meta, (ps, me) => new Promise(async (res, rej) => {
}
});
res();
}));
return;
});

View File

@ -13,7 +13,7 @@ export const meta = {
params: {}
};
export default define(meta, (ps) => new Promise(async (res, rej) => {
export default define(meta, async (ps) => {
const code = rndstr({ length: 5, chars: '0-9' });
await RegistrationTicket.insert({
@ -21,7 +21,7 @@ export default define(meta, (ps) => new Promise(async (res, rej) => {
code: code
});
res({
return {
code: code
});
}));
};
});

View File

@ -24,13 +24,13 @@ export const meta = {
}
};
export default define(meta, (ps) => new Promise(async (res, rej) => {
export default define(meta, async (ps) => {
const user = await User.findOne({
_id: ps.userId
});
if (user == null) {
return rej('user not found');
throw new Error('user not found');
}
await User.update({
@ -41,5 +41,5 @@ export default define(meta, (ps) => new Promise(async (res, rej) => {
}
});
res();
}));
return;
});

View File

@ -24,13 +24,13 @@ export const meta = {
}
};
export default define(meta, (ps) => new Promise(async (res, rej) => {
export default define(meta, async (ps) => {
const user = await User.findOne({
_id: ps.userId
});
if (user == null) {
return rej('user not found');
throw new Error('user not found');
}
await User.update({
@ -41,5 +41,5 @@ export default define(meta, (ps) => new Promise(async (res, rej) => {
}
});
res();
}));
return;
});

View File

@ -8,8 +8,8 @@ export const meta = {
params: {}
};
export default define(meta, (ps) => new Promise(async (res, rej) => {
export default define(meta, async (ps) => {
destroy();
res();
}));
return;
});

View File

@ -15,18 +15,18 @@ export const meta = {
}
};
export default define(meta, (ps) => new Promise(async (res, rej) => {
export default define(meta, async (ps) => {
const report = await AbuseUserReport.findOne({
_id: ps.reportId
});
if (report == null) {
return rej('report not found');
throw new Error('report not found');
}
await AbuseUserReport.remove({
_id: report._id
});
res();
}));
return;
});

View File

@ -25,17 +25,17 @@ export const meta = {
}
};
export default define(meta, (ps) => new Promise(async (res, rej) => {
export default define(meta, async (ps) => {
const user = await User.findOne({
_id: ps.userId
});
if (user == null) {
return rej('user not found');
throw new Error('user not found');
}
if (user.isAdmin) {
return rej('cannot reset password of admin');
throw new Error('cannot reset password of admin');
}
const passwd = rndstr('a-zA-Z0-9', 8);
@ -46,12 +46,12 @@ export default define(meta, (ps) => new Promise(async (res, rej) => {
await User.findOneAndUpdate({
_id: user._id
}, {
$set: {
password: hash
}
});
res({
password: passwd
$set: {
password: hash
}
});
}));
return {
password: passwd
};
});

View File

@ -23,18 +23,18 @@ export const meta = {
}
};
export default define(meta, (ps, me) => new Promise(async (res, rej) => {
export default define(meta, async (ps, me) => {
const user = await User.findOne({
_id: ps.userId
});
if (user == null) {
return rej('user not found');
throw new Error('user not found');
}
if (me.isModerator && user.isAdmin) {
return rej('cannot show info of admin');
throw new Error('cannot show info of admin');
}
res(user);
}));
return user;
});

View File

@ -63,7 +63,7 @@ const sort: any = { // < https://github.com/Microsoft/TypeScript/issues/1863
[fallback]: { _id: -1 }
};
export default define(meta, (ps, me) => new Promise(async (res, rej) => {
export default define(meta, async (ps, me) => {
const q = {
$and: []
} as any;
@ -99,5 +99,5 @@ export default define(meta, (ps, me) => new Promise(async (res, rej) => {
skip: ps.offset
});
res(await Promise.all(users.map(user => pack(user, me, { detail: true }))));
}));
return await Promise.all(users.map(user => pack(user, me, { detail: true })));
});

View File

@ -24,17 +24,17 @@ export const meta = {
}
};
export default define(meta, (ps) => new Promise(async (res, rej) => {
export default define(meta, async (ps) => {
const user = await User.findOne({
_id: ps.userId
});
if (user == null) {
return rej('user not found');
throw new Error('user not found');
}
if (user.isAdmin) {
return rej('cannot silence admin');
throw new Error('cannot silence admin');
}
await User.findOneAndUpdate({
@ -45,5 +45,5 @@ export default define(meta, (ps) => new Promise(async (res, rej) => {
}
});
res();
}));
return;
});

View File

@ -24,30 +24,30 @@ export const meta = {
}
};
export default define(meta, (ps) => new Promise(async (res, rej) => {
export default define(meta, async (ps) => {
const user = await User.findOne({
_id: ps.userId
});
if (user == null) {
return rej('user not found');
throw new Error('user not found');
}
if (user.isAdmin) {
return rej('cannot suspend admin');
throw new Error('cannot suspend admin');
}
if (user.isModerator) {
return rej('cannot suspend moderator');
throw new Error('cannot suspend moderator');
}
await User.findOneAndUpdate({
_id: user._id
}, {
$set: {
isSuspended: true
}
});
$set: {
isSuspended: true
}
});
res();
}));
return;
});

View File

@ -24,13 +24,13 @@ export const meta = {
}
};
export default define(meta, (ps) => new Promise(async (res, rej) => {
export default define(meta, async (ps) => {
const user = await User.findOne({
_id: ps.userId
});
if (user == null) {
return rej('user not found');
throw new Error('user not found');
}
await User.findOneAndUpdate({
@ -41,5 +41,5 @@ export default define(meta, (ps) => new Promise(async (res, rej) => {
}
});
res();
}));
return;
});

View File

@ -24,22 +24,22 @@ export const meta = {
}
};
export default define(meta, (ps) => new Promise(async (res, rej) => {
export default define(meta, async (ps) => {
const user = await User.findOne({
_id: ps.userId
});
if (user == null) {
return rej('user not found');
throw new Error('user not found');
}
await User.findOneAndUpdate({
_id: user._id
}, {
$set: {
isSuspended: false
}
});
$set: {
isSuspended: false
}
});
res();
}));
return;
});

View File

@ -24,22 +24,22 @@ export const meta = {
}
};
export default define(meta, (ps) => new Promise(async (res, rej) => {
export default define(meta, async (ps) => {
const user = await User.findOne({
_id: ps.userId
});
if (user == null) {
return rej('user not found');
throw new Error('user not found');
}
await User.findOneAndUpdate({
_id: user._id
}, {
$set: {
isVerified: false
}
});
$set: {
isVerified: false
}
});
res();
}));
return;
});

View File

@ -323,7 +323,7 @@ export const meta = {
}
};
export default define(meta, (ps) => new Promise(async (res, rej) => {
export default define(meta, async (ps) => {
const set = {} as any;
if (ps.broadcasts) {
@ -506,5 +506,5 @@ export default define(meta, (ps) => new Promise(async (res, rej) => {
$set: set
}, { upsert: true });
res();
}));
return;
});

View File

@ -26,9 +26,10 @@ export const meta = {
}
};
export default define(meta, (ps) => new Promise((res, rej) => {
updatePersonById(ps.userId).then(() => res(), e => rej(e));
}));
export default define(meta, async (ps) => {
await updatePersonById(ps.userId);
return;
});
async function updatePersonById(userId: mongo.ObjectID) {
const user = await getRemoteUser(userId);

View File

@ -24,22 +24,22 @@ export const meta = {
}
};
export default define(meta, (ps) => new Promise(async (res, rej) => {
export default define(meta, async (ps) => {
const user = await User.findOne({
_id: ps.userId
});
if (user == null) {
return rej('user not found');
throw new Error('user not found');
}
await User.findOneAndUpdate({
_id: user._id
}, {
$set: {
isVerified: true
}
});
$set: {
isVerified: true
}
});
res();
}));
return;
});