refactor(api/private/media): return MediaUpload object instead of url

This ensures the private POST /media API behaves in the same way as /me/media

Signed-off-by: David Mehren <git@herrmehren.de>
This commit is contained in:
David Mehren 2022-01-29 18:57:44 +01:00
parent 4f10e17d40
commit 8e31f3a393
10 changed files with 50 additions and 43 deletions

View file

@ -19,7 +19,7 @@ import { ApiBody, ApiConsumes, ApiHeader, ApiTags } from '@nestjs/swagger';
import { PermissionError } from '../../../errors/errors';
import { SessionGuard } from '../../../identity/session.guard';
import { ConsoleLoggerService } from '../../../logger/console-logger.service';
import { MediaUploadUrlDto } from '../../../media/media-upload-url.dto';
import { MediaUploadDto } from '../../../media/media-upload.dto';
import { MediaService } from '../../../media/media.service';
import { MulterFile } from '../../../media/multer-file.interface';
import { Note } from '../../../notes/note.entity';
@ -63,7 +63,7 @@ export class MediaController {
{
code: 201,
description: 'The file was uploaded successfully',
dto: MediaUploadUrlDto,
dto: MediaUploadDto,
},
400,
403,
@ -74,15 +74,15 @@ export class MediaController {
@UploadedFile() file: MulterFile,
@Headers('HedgeDoc-Note') noteId: string,
@RequestUser() user: User,
): Promise<MediaUploadUrlDto> {
): Promise<MediaUploadDto> {
// TODO: Move getting the Note object into a decorator
const note: Note = await this.noteService.getNoteByIdOrAlias(noteId);
this.logger.debug(
`Recieved filename '${file.originalname}' for note '${noteId}' from user '${user.username}'`,
'uploadMedia',
);
const url = await this.mediaService.saveFile(file.buffer, user, note);
return this.mediaService.toMediaUploadUrlDto(url);
const upload = await this.mediaService.saveFile(file.buffer, user, note);
return await this.mediaService.toMediaUploadDto(upload);
}
@Delete(':filename')

View file

@ -88,8 +88,8 @@ export class MediaController {
`Recieved filename '${file.originalname}' for note '${noteId}' from user '${user.username}'`,
'uploadMedia',
);
const url = await this.mediaService.saveFile(file.buffer, user, note);
return this.mediaService.toMediaUploadUrlDto(url);
const upload = await this.mediaService.saveFile(file.buffer, user, note);
return this.mediaService.toMediaUploadUrlDto(upload.fileUrl);
}
@Delete(':filename')

View file

@ -143,8 +143,8 @@ describe('MediaService', () => {
return [fileName, null];
},
);
const url = await service.saveFile(testImage, user, note);
expect(url).toEqual(fileId);
const upload = await service.saveFile(testImage, user, note);
expect(upload.fileUrl).toEqual(fileId);
});
describe('fails:', () => {

View file

@ -77,7 +77,11 @@ export class MediaService {
* @throws {NotInDBError} - the note or user is not in the database
* @throws {MediaBackendError} - there was an error saving the file
*/
async saveFile(fileBuffer: Buffer, user: User, note: Note): Promise<string> {
async saveFile(
fileBuffer: Buffer,
user: User,
note: Note,
): Promise<MediaUpload> {
this.logger.debug(
`Saving file for note '${note.id}' and user '${user.username}'`,
'saveFile',
@ -102,8 +106,7 @@ export class MediaService {
url,
);
mediaUpload.backendData = backendData;
await this.mediaUploadRepository.save(mediaUpload);
return url;
return await this.mediaUploadRepository.save(mediaUpload);
}
/**