From ec2b1ec3f0035466585d9cc2a7842e519e14e31a Mon Sep 17 00:00:00 2001 From: syuilo Date: Fri, 20 Jul 2018 02:40:37 +0900 Subject: #1334 --- src/server/api/endpoints/drive/files/create.ts | 10 ++++- src/server/api/endpoints/drive/files/update.ts | 59 +++++++++++++++++++------- 2 files changed, 52 insertions(+), 17 deletions(-) (limited to 'src/server/api/endpoints/drive') diff --git a/src/server/api/endpoints/drive/files/create.ts b/src/server/api/endpoints/drive/files/create.ts index ca12be9104..1c5506f6c4 100644 --- a/src/server/api/endpoints/drive/files/create.ts +++ b/src/server/api/endpoints/drive/files/create.ts @@ -29,6 +29,14 @@ export const meta = { desc: { ja: 'フォルダID' } + }), + + isSensitive: $.bool.optional.note({ + default: false, + desc: { + ja: 'このメディアが「閲覧注意」(NSFW)かどうか', + en: 'Whether this media is NSFW' + } }) } }; @@ -68,7 +76,7 @@ export default async (file: any, params: any, user: ILocalUser): Promise => try { // Create file - const driveFile = await create(user, file.path, name, null, ps.folderId); + const driveFile = await create(user, file.path, name, null, ps.folderId, false, false, null, null, ps.isSensitive); cleanup(); diff --git a/src/server/api/endpoints/drive/files/update.ts b/src/server/api/endpoints/drive/files/update.ts index 396bc97694..bac04bae78 100644 --- a/src/server/api/endpoints/drive/files/update.ts +++ b/src/server/api/endpoints/drive/files/update.ts @@ -3,6 +3,7 @@ import DriveFolder from '../../../../../models/drive-folder'; import DriveFile, { validateFileName, pack } from '../../../../../models/drive-file'; import { publishDriveStream } from '../../../../../stream'; import { ILocalUser } from '../../../../../models/user'; +import getParams from '../../../get-params'; export const meta = { desc: { @@ -12,18 +13,48 @@ export const meta = { requireCredential: true, - kind: 'drive-write' + kind: 'drive-write', + + params: { + fileId: $.type(ID).note({ + desc: { + ja: '対象のファイルID' + } + }), + + folderId: $.type(ID).optional.nullable.note({ + default: undefined, + desc: { + ja: 'フォルダID' + } + }), + + name: $.str.optional.pipe(validateFileName).note({ + default: undefined, + desc: { + ja: 'ファイル名', + en: 'Name of the file' + } + }), + + isSensitive: $.bool.optional.note({ + default: undefined, + desc: { + ja: 'このメディアが「閲覧注意」(NSFW)かどうか', + en: 'Whether this media is NSFW' + } + }) + } }; export default (params: any, user: ILocalUser) => new Promise(async (res, rej) => { - // Get 'fileId' parameter - const [fileId, fileIdErr] = $.type(ID).get(params.fileId); - if (fileIdErr) return rej('invalid fileId param'); + const [ps, psErr] = getParams(meta, params); + if (psErr) return rej(psErr); // Fetch file const file = await DriveFile .findOne({ - _id: fileId, + _id: ps.fileId, 'metadata.userId': user._id }); @@ -31,23 +62,18 @@ export default (params: any, user: ILocalUser) => new Promise(async (res, rej) = return rej('file-not-found'); } - // Get 'name' parameter - const [name, nameErr] = $.str.optional.pipe(validateFileName).get(params.name); - if (nameErr) return rej('invalid name param'); - if (name) file.filename = name; + if (ps.name) file.filename = ps.name; - // Get 'folderId' parameter - const [folderId, folderIdErr] = $.type(ID).optional.nullable.get(params.folderId); - if (folderIdErr) return rej('invalid folderId param'); + if (ps.isSensitive) file.metadata.isSensitive = ps.isSensitive; - if (folderId !== undefined) { - if (folderId === null) { + if (ps.folderId !== undefined) { + if (ps.folderId === null) { file.metadata.folderId = null; } else { // Fetch folder const folder = await DriveFolder .findOne({ - _id: folderId, + _id: ps.folderId, userId: user._id }); @@ -62,7 +88,8 @@ export default (params: any, user: ILocalUser) => new Promise(async (res, rej) = await DriveFile.update(file._id, { $set: { filename: file.filename, - 'metadata.folderId': file.metadata.folderId + 'metadata.folderId': file.metadata.folderId, + 'metadata.isSensitive': file.metadata.isSensitive } }); -- cgit v1.2.3-freya