summaryrefslogtreecommitdiff
path: root/src/server/api
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2018-10-24 18:37:58 +0900
committersyuilo <syuilotan@yahoo.co.jp>2018-10-24 18:37:58 +0900
commit9f981d875afef35329268e6a7dc5d35d8a854c72 (patch)
tree0aa47e8de14272e003570ceeb22fa16b5b3ba47c /src/server/api
parentImprove some API definitions (diff)
downloadsharkey-9f981d875afef35329268e6a7dc5d35d8a854c72.tar.gz
sharkey-9f981d875afef35329268e6a7dc5d35d8a854c72.tar.bz2
sharkey-9f981d875afef35329268e6a7dc5d35d8a854c72.zip
Implement drive/folders/delete
Diffstat (limited to 'src/server/api')
-rw-r--r--src/server/api/endpoints/drive/folders/delete.ts60
1 files changed, 60 insertions, 0 deletions
diff --git a/src/server/api/endpoints/drive/folders/delete.ts b/src/server/api/endpoints/drive/folders/delete.ts
new file mode 100644
index 0000000000..72ad5c81ab
--- /dev/null
+++ b/src/server/api/endpoints/drive/folders/delete.ts
@@ -0,0 +1,60 @@
+import $ from 'cafy'; import ID from '../../../../../misc/cafy-id';
+import DriveFolder, { pack } from '../../../../../models/drive-folder';
+import { ILocalUser } from '../../../../../models/user';
+import getParams from '../../../get-params';
+import { publishDriveStream } from '../../../../../stream';
+import DriveFile from '../../../../../models/drive-file';
+
+export const meta = {
+ stability: 'stable',
+
+ desc: {
+ 'ja-JP': '指定したドライブのフォルダを削除します。',
+ 'en-US': 'Delete specified folder of drive.'
+ },
+
+ requireCredential: true,
+
+ kind: 'drive-write',
+
+ params: {
+ folderId: $.type(ID).note({
+ desc: {
+ 'ja-JP': '対象のフォルダID',
+ 'en-US': 'Target folder ID'
+ }
+ })
+ }
+};
+
+export default (params: any, user: ILocalUser) => new Promise(async (res, rej) => {
+ const [ps, psErr] = getParams(meta, params);
+ if (psErr) return rej(psErr);
+
+ // Get folder
+ const folder = await DriveFolder
+ .findOne({
+ _id: ps.folderId,
+ userId: user._id
+ });
+
+ if (folder === null) {
+ return rej('folder-not-found');
+ }
+
+ const [childFoldersCount, childFilesCount] = await Promise.all([
+ DriveFolder.count({ parentId: folder._id }),
+ DriveFile.count({ folderId: folder._id })
+ ]);
+
+ if (childFoldersCount !== 0 || childFilesCount !== 0) {
+ return rej('has-child-contents');
+ }
+
+ await DriveFolder.remove({ _id: folder._id });
+
+ // Publish folderCreated event
+ publishDriveStream(user._id, 'folderDeleted', folder._id);
+
+ res();
+});