summaryrefslogtreecommitdiff
path: root/src/server/api/endpoints/drive/files/update.ts
diff options
context:
space:
mode:
authorAkihiko Odaki <nekomanma@pixiv.co.jp>2018-03-29 01:20:40 +0900
committerAkihiko Odaki <nekomanma@pixiv.co.jp>2018-03-29 01:54:41 +0900
commit90f8fe7e538bb7e52d2558152a0390e693f39b11 (patch)
tree0f830887053c8f352b1cd0c13ca715fd14c1f030 /src/server/api/endpoints/drive/files/update.ts
parentImplement remote account resolution (diff)
downloadmisskey-90f8fe7e538bb7e52d2558152a0390e693f39b11.tar.gz
misskey-90f8fe7e538bb7e52d2558152a0390e693f39b11.tar.bz2
misskey-90f8fe7e538bb7e52d2558152a0390e693f39b11.zip
Introduce processor
Diffstat (limited to 'src/server/api/endpoints/drive/files/update.ts')
-rw-r--r--src/server/api/endpoints/drive/files/update.ts75
1 files changed, 75 insertions, 0 deletions
diff --git a/src/server/api/endpoints/drive/files/update.ts b/src/server/api/endpoints/drive/files/update.ts
new file mode 100644
index 0000000000..83da462113
--- /dev/null
+++ b/src/server/api/endpoints/drive/files/update.ts
@@ -0,0 +1,75 @@
+/**
+ * Module dependencies
+ */
+import $ from 'cafy';
+import DriveFolder from '../../../models/drive-folder';
+import DriveFile, { validateFileName, pack } from '../../../models/drive-file';
+import { publishDriveStream } from '../../../event';
+
+/**
+ * Update a file
+ *
+ * @param {any} params
+ * @param {any} user
+ * @return {Promise<any>}
+ */
+module.exports = (params, user) => new Promise(async (res, rej) => {
+ // Get 'file_id' parameter
+ const [fileId, fileIdErr] = $(params.file_id).id().$;
+ if (fileIdErr) return rej('invalid file_id param');
+
+ // Fetch file
+ const file = await DriveFile
+ .findOne({
+ _id: fileId,
+ 'metadata.user_id': user._id
+ });
+
+ if (file === null) {
+ return rej('file-not-found');
+ }
+
+ // Get 'name' parameter
+ const [name, nameErr] = $(params.name).optional.string().pipe(validateFileName).$;
+ if (nameErr) return rej('invalid name param');
+ if (name) file.filename = name;
+
+ // Get 'folder_id' parameter
+ const [folderId, folderIdErr] = $(params.folder_id).optional.nullable.id().$;
+ if (folderIdErr) return rej('invalid folder_id param');
+
+ if (folderId !== undefined) {
+ if (folderId === null) {
+ file.metadata.folder_id = null;
+ } else {
+ // Fetch folder
+ const folder = await DriveFolder
+ .findOne({
+ _id: folderId,
+ user_id: user._id
+ });
+
+ if (folder === null) {
+ return rej('folder-not-found');
+ }
+
+ file.metadata.folder_id = folder._id;
+ }
+ }
+
+ await DriveFile.update(file._id, {
+ $set: {
+ filename: file.filename,
+ 'metadata.folder_id': file.metadata.folder_id
+ }
+ });
+
+ // Serialize
+ const fileObj = await pack(file);
+
+ // Response
+ res(fileObj);
+
+ // Publish file_updated event
+ publishDriveStream(user._id, 'file_updated', fileObj);
+});