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:
parent
fc52e95ad0
commit
2756f553c6
181 changed files with 2010 additions and 1322 deletions
|
|
@ -3,6 +3,7 @@ import ID, { transform } from '../../../../../misc/cafy-id';
|
|||
import DriveFolder, { isValidFolderName, pack } from '../../../../../models/drive-folder';
|
||||
import { publishDriveStream } from '../../../../../services/stream';
|
||||
import define from '../../../define';
|
||||
import { ApiError } from '../../../error';
|
||||
|
||||
export const meta = {
|
||||
stability: 'stable',
|
||||
|
|
@ -34,10 +35,18 @@ export const meta = {
|
|||
'en-US': 'Parent folder ID'
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
errors: {
|
||||
noSuchFolder: {
|
||||
message: 'No such folder.',
|
||||
code: 'NO_SUCH_FOLDER',
|
||||
id: '53326628-a00d-40a6-a3cd-8975105c0f95'
|
||||
},
|
||||
}
|
||||
};
|
||||
|
||||
export default define(meta, (ps, user) => new Promise(async (res, rej) => {
|
||||
export default define(meta, async (ps, user) => {
|
||||
// If the parent folder is specified
|
||||
let parent = null;
|
||||
if (ps.parentId) {
|
||||
|
|
@ -49,7 +58,7 @@ export default define(meta, (ps, user) => new Promise(async (res, rej) => {
|
|||
});
|
||||
|
||||
if (parent === null) {
|
||||
return rej('parent-not-found');
|
||||
throw new ApiError(meta.errors.noSuchFolder);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -61,12 +70,10 @@ export default define(meta, (ps, user) => new Promise(async (res, rej) => {
|
|||
userId: user._id
|
||||
});
|
||||
|
||||
// Serialize
|
||||
const folderObj = await pack(folder);
|
||||
|
||||
// Response
|
||||
res(folderObj);
|
||||
|
||||
// Publish folderCreated event
|
||||
publishDriveStream(user._id, 'folderCreated', folderObj);
|
||||
}));
|
||||
|
||||
return folderObj;
|
||||
});
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import DriveFolder from '../../../../../models/drive-folder';
|
|||
import define from '../../../define';
|
||||
import { publishDriveStream } from '../../../../../services/stream';
|
||||
import DriveFile from '../../../../../models/drive-file';
|
||||
import { ApiError } from '../../../error';
|
||||
|
||||
export const meta = {
|
||||
stability: 'stable',
|
||||
|
|
@ -26,10 +27,24 @@ export const meta = {
|
|||
'en-US': 'Target folder ID'
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
errors: {
|
||||
noSuchFolder: {
|
||||
message: 'No such folder.',
|
||||
code: 'NO_SUCH_FOLDER',
|
||||
id: '1069098f-c281-440f-b085-f9932edbe091'
|
||||
},
|
||||
|
||||
hasChildFilesOrFolders: {
|
||||
message: 'This folder has child files or folders.',
|
||||
code: 'HAS_CHILD_FILES_OR_FOLDERS',
|
||||
id: 'b0fc8a17-963c-405d-bfbc-859a487295e1'
|
||||
},
|
||||
}
|
||||
};
|
||||
|
||||
export default define(meta, (ps, user) => new Promise(async (res, rej) => {
|
||||
export default define(meta, async (ps, user) => {
|
||||
// Get folder
|
||||
const folder = await DriveFolder
|
||||
.findOne({
|
||||
|
|
@ -38,7 +53,7 @@ export default define(meta, (ps, user) => new Promise(async (res, rej) => {
|
|||
});
|
||||
|
||||
if (folder === null) {
|
||||
return rej('folder-not-found');
|
||||
throw new ApiError(meta.errors.noSuchFolder);
|
||||
}
|
||||
|
||||
const [childFoldersCount, childFilesCount] = await Promise.all([
|
||||
|
|
@ -47,7 +62,7 @@ export default define(meta, (ps, user) => new Promise(async (res, rej) => {
|
|||
]);
|
||||
|
||||
if (childFoldersCount !== 0 || childFilesCount !== 0) {
|
||||
return rej('has-child-contents');
|
||||
throw new ApiError(meta.errors.hasChildFilesOrFolders);
|
||||
}
|
||||
|
||||
await DriveFolder.remove({ _id: folder._id });
|
||||
|
|
@ -55,5 +70,5 @@ export default define(meta, (ps, user) => new Promise(async (res, rej) => {
|
|||
// Publish folderCreated event
|
||||
publishDriveStream(user._id, 'folderDeleted', folder._id);
|
||||
|
||||
res();
|
||||
}));
|
||||
return;
|
||||
});
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ export const meta = {
|
|||
}
|
||||
};
|
||||
|
||||
export default define(meta, (ps, user) => new Promise(async (res, rej) => {
|
||||
export default define(meta, async (ps, user) => {
|
||||
const folders = await DriveFolder
|
||||
.find({
|
||||
name: ps.name,
|
||||
|
|
@ -32,5 +32,5 @@ export default define(meta, (ps, user) => new Promise(async (res, rej) => {
|
|||
parentId: ps.parentId
|
||||
});
|
||||
|
||||
res(await Promise.all(folders.map(folder => pack(folder))));
|
||||
}));
|
||||
return await Promise.all(folders.map(folder => pack(folder)));
|
||||
});
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ import $ from 'cafy';
|
|||
import ID, { transform } from '../../../../../misc/cafy-id';
|
||||
import DriveFolder, { pack } from '../../../../../models/drive-folder';
|
||||
import define from '../../../define';
|
||||
import { ApiError } from '../../../error';
|
||||
|
||||
export const meta = {
|
||||
stability: 'stable',
|
||||
|
|
@ -24,10 +25,18 @@ export const meta = {
|
|||
'en-US': 'Target folder ID'
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
errors: {
|
||||
noSuchFolder: {
|
||||
message: 'No such folder.',
|
||||
code: 'NO_SUCH_FOLDER',
|
||||
id: 'd74ab9eb-bb09-4bba-bf24-fb58f761e1e9'
|
||||
},
|
||||
}
|
||||
};
|
||||
|
||||
export default define(meta, (ps, user) => new Promise(async (res, rej) => {
|
||||
export default define(meta, async (ps, user) => {
|
||||
// Get folder
|
||||
const folder = await DriveFolder
|
||||
.findOne({
|
||||
|
|
@ -36,11 +45,10 @@ export default define(meta, (ps, user) => new Promise(async (res, rej) => {
|
|||
});
|
||||
|
||||
if (folder === null) {
|
||||
return rej('folder-not-found');
|
||||
throw new ApiError(meta.errors.noSuchFolder);
|
||||
}
|
||||
|
||||
// Serialize
|
||||
res(await pack(folder, {
|
||||
return await pack(folder, {
|
||||
detail: true
|
||||
}));
|
||||
}));
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ import ID, { transform } from '../../../../../misc/cafy-id';
|
|||
import DriveFolder, { isValidFolderName, pack } from '../../../../../models/drive-folder';
|
||||
import { publishDriveStream } from '../../../../../services/stream';
|
||||
import define from '../../../define';
|
||||
import { ApiError } from '../../../error';
|
||||
|
||||
export const meta = {
|
||||
stability: 'stable',
|
||||
|
|
@ -42,10 +43,30 @@ export const meta = {
|
|||
'en-US': 'Parent folder ID'
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
errors: {
|
||||
noSuchFolder: {
|
||||
message: 'No such folder.',
|
||||
code: 'NO_SUCH_FOLDER',
|
||||
id: 'f7974dac-2c0d-4a27-926e-23583b28e98e'
|
||||
},
|
||||
|
||||
noSuchParentFolder: {
|
||||
message: 'No such parent folder.',
|
||||
code: 'NO_SUCH_PARENT_FOLDER',
|
||||
id: 'ce104e3a-faaf-49d5-b459-10ff0cbbcaa1'
|
||||
},
|
||||
|
||||
recursiveNesting: {
|
||||
message: 'It can not be structured like nesting folders recursively.',
|
||||
code: 'NO_SUCH_PARENT_FOLDER',
|
||||
id: 'ce104e3a-faaf-49d5-b459-10ff0cbbcaa1'
|
||||
},
|
||||
}
|
||||
};
|
||||
|
||||
export default define(meta, (ps, user) => new Promise(async (res, rej) => {
|
||||
export default define(meta, async (ps, user) => {
|
||||
// Fetch folder
|
||||
const folder = await DriveFolder
|
||||
.findOne({
|
||||
|
|
@ -54,7 +75,7 @@ export default define(meta, (ps, user) => new Promise(async (res, rej) => {
|
|||
});
|
||||
|
||||
if (folder === null) {
|
||||
return rej('folder-not-found');
|
||||
throw new ApiError(meta.errors.noSuchFolder);
|
||||
}
|
||||
|
||||
if (ps.name) folder.name = ps.name;
|
||||
|
|
@ -71,7 +92,7 @@ export default define(meta, (ps, user) => new Promise(async (res, rej) => {
|
|||
});
|
||||
|
||||
if (parent === null) {
|
||||
return rej('parent-folder-not-found');
|
||||
throw new ApiError(meta.errors.noSuchParentFolder);
|
||||
}
|
||||
|
||||
// Check if the circular reference will occur
|
||||
|
|
@ -95,7 +116,7 @@ export default define(meta, (ps, user) => new Promise(async (res, rej) => {
|
|||
|
||||
if (parent.parentId !== null) {
|
||||
if (await checkCircle(parent.parentId)) {
|
||||
return rej('detected-circular-definition');
|
||||
throw new ApiError(meta.errors.recursiveNesting);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -111,12 +132,10 @@ export default define(meta, (ps, user) => new Promise(async (res, rej) => {
|
|||
}
|
||||
});
|
||||
|
||||
// Serialize
|
||||
const folderObj = await pack(folder);
|
||||
|
||||
// Response
|
||||
res(folderObj);
|
||||
|
||||
// Publish folderUpdated event
|
||||
publishDriveStream(user._id, 'folderUpdated', folderObj);
|
||||
}));
|
||||
|
||||
return folderObj;
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue