listen to upload event in e2e

test resume with real image
This commit is contained in:
mertalev
2025-10-06 21:00:20 -04:00
parent 3d507015e0
commit de117ebe7a
5 changed files with 130 additions and 52 deletions

View File

@@ -12,10 +12,10 @@ import {
Req,
Res,
} from '@nestjs/common';
import { ApiHeader, ApiTags } from '@nestjs/swagger';
import { ApiHeader, ApiOkResponse, ApiTags } from '@nestjs/swagger';
import { Request, Response } from 'express';
import { GetUploadStatusDto, ResumeUploadDto, StartUploadDto, UploadHeader, UploadOkDto } from 'src/dtos/asset-upload';
import { AuthDto } from 'src/dtos/auth.dto';
import { GetUploadStatusDto, ResumeUploadDto, StartUploadDto, UploadHeader } from 'src/dtos/upload.dto';
import { ImmichHeader, Permission } from 'src/enum';
import { Auth, Authenticated } from 'src/middleware/auth.guard';
import { AssetUploadService } from 'src/services/asset-upload.service';
@@ -72,6 +72,7 @@ export class AssetUploadController {
@ApiHeader(apiInteropVersion)
@ApiHeader(apiUploadComplete)
@ApiHeader(apiContentLength)
@ApiOkResponse({ type: UploadOkDto })
startUpload(@Auth() auth: AuthDto, @Req() req: Request, @Res() res: Response): Promise<void> {
return this.service.startUpload(auth, req, res, validateSyncOrReject(StartUploadDto, req.headers));
}
@@ -87,6 +88,7 @@ export class AssetUploadController {
@ApiHeader(apiInteropVersion)
@ApiHeader(apiUploadComplete)
@ApiHeader(apiContentLength)
@ApiOkResponse({ type: UploadOkDto })
resumeUpload(@Auth() auth: AuthDto, @Req() req: Request, @Res() res: Response, @Param() { id }: UUIDParamDto) {
return this.service.resumeUpload(auth, req, res, id, validateSyncOrReject(ResumeUploadDto, req.headers));
}

View File

@@ -153,3 +153,7 @@ export class ResumeUploadDto extends BaseUploadHeadersDto {
}
export class GetUploadStatusDto extends BaseRufhHeadersDto {}
export class UploadOkDto {
id!: string;
}

View File

@@ -1,5 +1,5 @@
import { BadRequestException, InternalServerErrorException } from '@nestjs/common';
import { StructuredBoolean } from 'src/dtos/upload.dto';
import { StructuredBoolean } from 'src/dtos/asset-upload';
import { AssetMetadataKey, AssetStatus, AssetType, AssetVisibility, JobName, JobStatus } from 'src/enum';
import { AssetUploadService } from 'src/services/asset-upload.service';
import { ASSET_CHECKSUM_CONSTRAINT } from 'src/utils/database';

View File

@@ -7,8 +7,8 @@ import { Readable } from 'node:stream';
import { JOBS_ASSET_PAGINATION_SIZE } from 'src/constants';
import { StorageCore } from 'src/cores/storage.core';
import { OnJob } from 'src/decorators';
import { GetUploadStatusDto, ResumeUploadDto, StartUploadDto } from 'src/dtos/asset-upload';
import { AuthDto } from 'src/dtos/auth.dto';
import { GetUploadStatusDto, ResumeUploadDto, StartUploadDto } from 'src/dtos/upload.dto';
import {
AssetMetadataKey,
AssetStatus,
@@ -78,7 +78,7 @@ export class AssetUploadService extends BaseService {
}
this.onComplete(metadata)
.then(() => res.status(200).send())
.then(() => res.status(200).send({ id: asset.id }))
.catch((error) => {
this.logger.error(`Failed to complete upload for ${asset.id}: ${error.message}`);
res.status(500).send();
@@ -141,7 +141,7 @@ export class AssetUploadService extends BaseService {
try {
await this.onComplete(metadata);
} finally {
res.status(200).send();
res.status(200).send({ id });
}
});
await new Promise((resolve) => writeStream.on('close', resolve));