wip
This commit is contained in:
parent
30e0259062
commit
a7339c7b7b
|
@ -8,7 +8,7 @@ import * as fs from 'node:fs';
|
||||||
import { Inject, Injectable } from '@nestjs/common';
|
import { Inject, Injectable } from '@nestjs/common';
|
||||||
import sharp from 'sharp';
|
import sharp from 'sharp';
|
||||||
import { sharpBmp } from '@misskey-dev/sharp-read-bmp';
|
import { sharpBmp } from '@misskey-dev/sharp-read-bmp';
|
||||||
import { IsNull } from 'typeorm';
|
import { In, IsNull } from 'typeorm';
|
||||||
import { DeleteObjectCommandInput, PutObjectCommandInput, NoSuchKey } from '@aws-sdk/client-s3';
|
import { DeleteObjectCommandInput, PutObjectCommandInput, NoSuchKey } from '@aws-sdk/client-s3';
|
||||||
import { DI } from '@/di-symbols.js';
|
import { DI } from '@/di-symbols.js';
|
||||||
import type { DriveFilesRepository, UsersRepository, DriveFoldersRepository, UserProfilesRepository, MiMeta } from '@/models/_.js';
|
import type { DriveFilesRepository, UsersRepository, DriveFoldersRepository, UserProfilesRepository, MiMeta } from '@/models/_.js';
|
||||||
|
@ -713,6 +713,21 @@ export class DriveService {
|
||||||
return fileObj;
|
return fileObj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@bindThis
|
||||||
|
public async moveFiles(fileIds: MiDriveFile['id'][], folderId: MiDriveFolder['id'] | null, userId: MiUser['id']) {
|
||||||
|
const folder = folderId ? await this.driveFoldersRepository.findOneByOrFail({
|
||||||
|
id: folderId,
|
||||||
|
userId: userId,
|
||||||
|
}) : null;
|
||||||
|
|
||||||
|
await this.driveFilesRepository.update({
|
||||||
|
id: In(fileIds),
|
||||||
|
userId: userId,
|
||||||
|
}, {
|
||||||
|
folderId: folder ? folder.id : null,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
@bindThis
|
@bindThis
|
||||||
public async deleteFile(file: MiDriveFile, isExpired = false, deleter?: MiUser) {
|
public async deleteFile(file: MiDriveFile, isExpired = false, deleter?: MiUser) {
|
||||||
if (file.storedInternal) {
|
if (file.storedInternal) {
|
||||||
|
|
|
@ -169,6 +169,7 @@ export * as 'drive/files/find' from './endpoints/drive/files/find.js';
|
||||||
export * as 'drive/files/find-by-hash' from './endpoints/drive/files/find-by-hash.js';
|
export * as 'drive/files/find-by-hash' from './endpoints/drive/files/find-by-hash.js';
|
||||||
export * as 'drive/files/show' from './endpoints/drive/files/show.js';
|
export * as 'drive/files/show' from './endpoints/drive/files/show.js';
|
||||||
export * as 'drive/files/update' from './endpoints/drive/files/update.js';
|
export * as 'drive/files/update' from './endpoints/drive/files/update.js';
|
||||||
|
export * as 'drive/files/move-bulk' from './endpoints/drive/files/move-bulk.js';
|
||||||
export * as 'drive/files/upload-from-url' from './endpoints/drive/files/upload-from-url.js';
|
export * as 'drive/files/upload-from-url' from './endpoints/drive/files/upload-from-url.js';
|
||||||
export * as 'drive/folders' from './endpoints/drive/folders.js';
|
export * as 'drive/folders' from './endpoints/drive/folders.js';
|
||||||
export * as 'drive/folders/create' from './endpoints/drive/folders/create.js';
|
export * as 'drive/folders/create' from './endpoints/drive/folders/create.js';
|
||||||
|
|
|
@ -0,0 +1,43 @@
|
||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: syuilo and misskey-project
|
||||||
|
* SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { Inject, Injectable } from '@nestjs/common';
|
||||||
|
import { Endpoint } from '@/server/api/endpoint-base.js';
|
||||||
|
import { DI } from '@/di-symbols.js';
|
||||||
|
import { DriveService } from '@/core/DriveService.js';
|
||||||
|
import { ApiError } from '../../../error.js';
|
||||||
|
|
||||||
|
export const meta = {
|
||||||
|
tags: ['drive'],
|
||||||
|
|
||||||
|
requireCredential: true,
|
||||||
|
|
||||||
|
kind: 'write:drive',
|
||||||
|
|
||||||
|
errors: {
|
||||||
|
},
|
||||||
|
|
||||||
|
res: {},
|
||||||
|
} as const;
|
||||||
|
|
||||||
|
export const paramDef = {
|
||||||
|
type: 'object',
|
||||||
|
properties: {
|
||||||
|
fileIds: { type: 'array', uniqueItems: true, minItems: 1, maxItems: 100, items: { type: 'string', format: 'misskey:id' } },
|
||||||
|
folderId: { type: 'string', format: 'misskey:id', nullable: true },
|
||||||
|
},
|
||||||
|
required: ['fileIds'],
|
||||||
|
} as const;
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-disable-line import/no-default-export
|
||||||
|
constructor(
|
||||||
|
private driveService: DriveService,
|
||||||
|
) {
|
||||||
|
super(meta, paramDef, async (ps, me) => {
|
||||||
|
await this.driveService.moveFiles(ps.fileIds, ps.folderId ?? null, me.id);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue