summaryrefslogtreecommitdiff
path: root/src/server/api/endpoints/drive/files.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/api/endpoints/drive/files.ts')
-rw-r--r--src/server/api/endpoints/drive/files.ts48
1 files changed, 17 insertions, 31 deletions
diff --git a/src/server/api/endpoints/drive/files.ts b/src/server/api/endpoints/drive/files.ts
index f108e820e7..4e4db6c780 100644
--- a/src/server/api/endpoints/drive/files.ts
+++ b/src/server/api/endpoints/drive/files.ts
@@ -1,7 +1,8 @@
import $ from 'cafy';
-import ID, { transform } from '../../../../misc/cafy-id';
-import DriveFile, { packMany } from '../../../../models/drive-file';
+import { ID } from '../../../../misc/cafy-id';
import define from '../../define';
+import { DriveFiles } from '../../../../models';
+import { makePaginationQuery } from '../../common/make-pagination-query';
export const meta = {
desc: {
@@ -13,7 +14,7 @@ export const meta = {
requireCredential: true,
- kind: 'drive-read',
+ kind: 'read:drive',
params: {
limit: {
@@ -23,18 +24,15 @@ export const meta = {
sinceId: {
validator: $.optional.type(ID),
- transform: transform,
},
untilId: {
validator: $.optional.type(ID),
- transform: transform,
},
folderId: {
validator: $.optional.nullable.type(ID),
default: null as any,
- transform: transform,
},
type: {
@@ -51,36 +49,24 @@ export const meta = {
};
export default define(meta, async (ps, user) => {
- const sort = {
- _id: -1
- };
+ const query = makePaginationQuery(DriveFiles.createQueryBuilder('file'), ps.sinceId, ps.untilId)
+ .andWhere('file.userId = :userId', { userId: user.id });
- const query = {
- 'metadata.userId': user._id,
- 'metadata.folderId': ps.folderId,
- 'metadata.deletedAt': { $exists: false }
- } as any;
-
- if (ps.sinceId) {
- sort._id = 1;
- query._id = {
- $gt: ps.sinceId
- };
- } else if (ps.untilId) {
- query._id = {
- $lt: ps.untilId
- };
+ if (ps.folderId) {
+ query.andWhere('file.folderId = :folderId', { folderId: ps.folderId });
+ } else {
+ query.andWhere('file.folderId IS NULL');
}
if (ps.type) {
- query.contentType = new RegExp(`^${ps.type.replace(/\*/g, '.+?')}$`);
+ if (ps.type.endsWith('/*')) {
+ query.andWhere('file.type like :type', { type: ps.type.replace('/*', '/') + '%' });
+ } else {
+ query.andWhere('file.type = :type', { type: ps.type });
+ }
}
- const files = await DriveFile
- .find(query, {
- limit: ps.limit,
- sort: sort
- });
+ const files = await query.take(ps.limit!).getMany();
- return await packMany(files, { detail: false, self: true });
+ return await DriveFiles.packMany(files, { detail: false, self: true });
});