refactor(server): download file (#1512)

* refactor(server): download file

* chore: generate open-api and remove unused refs

* chore(server): tests

* chore: remove unused code
This commit is contained in:
Jason Rasmussen
2023-02-03 10:16:25 -05:00
committed by GitHub
parent e39507552f
commit 2b0b2bb1ae
29 changed files with 210 additions and 291 deletions

View File

@@ -6,11 +6,6 @@ import { ICryptoRepository } from '../crypto/crypto.repository';
import { LoginResponseDto, mapLoginResponse } from './response-dto';
import { IUserTokenRepository, UserTokenCore } from '../user-token';
export type JwtValidationResult = {
status: boolean;
userId: string | null;
};
export class AuthCore {
private userTokenCore: UserTokenCore;
constructor(

View File

@@ -1,5 +1,4 @@
export * from './auth-user.dto';
export * from './change-password.dto';
export * from './jwt-payload.dto';
export * from './login-credential.dto';
export * from './sign-up.dto';

View File

@@ -1,4 +0,0 @@
export class JwtPayloadDto {
userId!: string;
email!: string;
}

View File

@@ -8,6 +8,7 @@ export * from './domain.module';
export * from './job';
export * from './oauth';
export * from './share';
export * from './storage';
export * from './system-config';
export * from './tag';
export * from './user';

View File

@@ -0,0 +1 @@
export * from './storage.repository';

View File

@@ -0,0 +1,13 @@
import { ReadStream } from 'fs';
export interface ImmichReadStream {
stream: ReadStream;
type: string;
length: number;
}
export const IStorageRepository = 'IStorageRepository';
export interface IStorageRepository {
createReadStream(filepath: string, mimeType: string): Promise<ImmichReadStream>;
}

View File

@@ -4,6 +4,7 @@ export * from './device-info.repository.mock';
export * from './fixtures';
export * from './job.repository.mock';
export * from './shared-link.repository.mock';
export * from './storage.repository.mock';
export * from './system-config.repository.mock';
export * from './user-token.repository.mock';
export * from './user.repository.mock';

View File

@@ -0,0 +1,7 @@
import { IStorageRepository } from '../src';
export const newStorageRepositoryMock = (): jest.Mocked<IStorageRepository> => {
return {
createReadStream: jest.fn(),
};
};

View File

@@ -4,6 +4,7 @@ import {
IJobRepository,
IKeyRepository,
ISharedLinkRepository,
IStorageRepository,
ISystemConfigRepository,
IUserRepository,
QueueName,
@@ -29,6 +30,7 @@ import {
UserTokenEntity,
} from './db';
import { JobRepository } from './job';
import { FilesystemProvider } from './storage';
const providers: Provider[] = [
{ provide: ICryptoRepository, useClass: CryptoRepository },
@@ -36,6 +38,7 @@ const providers: Provider[] = [
{ provide: IKeyRepository, useClass: APIKeyRepository },
{ provide: IJobRepository, useClass: JobRepository },
{ provide: ISharedLinkRepository, useClass: SharedLinkRepository },
{ provide: IStorageRepository, useClass: FilesystemProvider },
{ provide: ISystemConfigRepository, useClass: SystemConfigRepository },
{ provide: IUserRepository, useClass: UserRepository },
{ provide: IUserTokenRepository, useClass: UserTokenRepository },

View File

@@ -0,0 +1,18 @@
import { ImmichReadStream, IStorageRepository } from '@app/domain';
import { constants, createReadStream, stat } from 'fs';
import fs from 'fs/promises';
import { promisify } from 'util';
const fileInfo = promisify(stat);
export class FilesystemProvider implements IStorageRepository {
async createReadStream(filepath: string, mimeType: string): Promise<ImmichReadStream> {
const { size } = await fileInfo(filepath);
await fs.access(filepath, constants.R_OK | constants.W_OK);
return {
stream: createReadStream(filepath),
length: size,
type: mimeType,
};
}
}

View File

@@ -0,0 +1 @@
export * from './filesystem.provider';