diff options
Diffstat (limited to 'src/server/api/endpoints/drive/files.ts')
| -rw-r--r-- | src/server/api/endpoints/drive/files.ts | 74 |
1 files changed, 41 insertions, 33 deletions
diff --git a/src/server/api/endpoints/drive/files.ts b/src/server/api/endpoints/drive/files.ts index de0bde086b..ae4e2249ff 100644 --- a/src/server/api/endpoints/drive/files.ts +++ b/src/server/api/endpoints/drive/files.ts @@ -1,6 +1,7 @@ -import $ from 'cafy'; import ID from '../../../../misc/cafy-id'; +import $ from 'cafy'; import ID, { transform } from '../../../../misc/cafy-id'; import DriveFile, { packMany } from '../../../../models/drive-file'; import { ILocalUser } from '../../../../models/user'; +import getParams from '../../get-params'; export const meta = { desc: { @@ -10,68 +11,75 @@ export const meta = { requireCredential: true, - kind: 'drive-read' -}; + kind: 'drive-read', -export default async (params: any, user: ILocalUser) => { - // Get 'limit' parameter - const [limit = 10, limitErr] = $.num.optional.range(1, 100).get(params.limit); - if (limitErr) throw 'invalid limit param'; + params: { + limit: { + validator: $.num.optional.range(1, 100), + default: 10 + }, - // Get 'sinceId' parameter - const [sinceId, sinceIdErr] = $.type(ID).optional.get(params.sinceId); - if (sinceIdErr) throw 'invalid sinceId param'; + sinceId: { + validator: $.type(ID).optional, + transform: transform, + }, - // Get 'untilId' parameter - const [untilId, untilIdErr] = $.type(ID).optional.get(params.untilId); - if (untilIdErr) throw 'invalid untilId param'; + untilId: { + validator: $.type(ID).optional, + transform: transform, + }, - // Check if both of sinceId and untilId is specified - if (sinceId && untilId) { - throw 'cannot set sinceId and untilId'; + folderId: { + validator: $.type(ID).optional.nullable, + default: null as any, + transform: transform, + }, + + type: { + validator: $.str.optional.match(/^[a-zA-Z\/\-\*]+$/) + } } +}; - // Get 'folderId' parameter - const [folderId = null, folderIdErr] = $.type(ID).optional.nullable.get(params.folderId); - if (folderIdErr) throw 'invalid folderId param'; +export default async (params: any, user: ILocalUser) => { + const [ps, psErr] = getParams(meta, params); + if (psErr) throw psErr; - // Get 'type' parameter - const [type, typeErr] = $.str.optional.match(/^[a-zA-Z\/\-\*]+$/).get(params.type); - if (typeErr) throw 'invalid type param'; + // Check if both of sinceId and untilId is specified + if (ps.sinceId && ps.untilId) { + throw 'cannot set sinceId and untilId'; + } - // Construct query const sort = { _id: -1 }; const query = { 'metadata.userId': user._id, - 'metadata.folderId': folderId, + 'metadata.folderId': ps.folderId, 'metadata.deletedAt': { $exists: false } } as any; - if (sinceId) { + if (ps.sinceId) { sort._id = 1; query._id = { - $gt: sinceId + $gt: ps.sinceId }; - } else if (untilId) { + } else if (ps.untilId) { query._id = { - $lt: untilId + $lt: ps.untilId }; } - if (type) { - query.contentType = new RegExp(`^${type.replace(/\*/g, '.+?')}$`); + if (ps.type) { + query.contentType = new RegExp(`^${ps.type.replace(/\*/g, '.+?')}$`); } - // Issue query const files = await DriveFile .find(query, { - limit: limit, + limit: ps.limit, sort: sort }); - // Serialize return await packMany(files); }; |