diff --git a/server/src/interfaces/process.interface.ts b/server/src/interfaces/process.interface.ts deleted file mode 100644 index 14a8c1ff33..0000000000 --- a/server/src/interfaces/process.interface.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { ChildProcessWithoutNullStreams, SpawnOptionsWithoutStdio } from 'node:child_process'; -import { Readable } from 'node:stream'; - -export interface ImmichReadStream { - stream: Readable; - type?: string; - length?: number; -} - -export interface ImmichZipStream extends ImmichReadStream { - addFile: (inputPath: string, filename: string) => void; - finalize: () => Promise; -} - -export interface DiskUsage { - available: number; - free: number; - total: number; -} - -export const IProcessRepository = 'IProcessRepository'; - -export interface IProcessRepository { - spawn(command: string, args?: readonly string[], options?: SpawnOptionsWithoutStdio): ChildProcessWithoutNullStreams; -} diff --git a/server/src/repositories/index.ts b/server/src/repositories/index.ts index d6eddc4ccf..0c3cf2cd77 100644 --- a/server/src/repositories/index.ts +++ b/server/src/repositories/index.ts @@ -9,7 +9,6 @@ import { IMachineLearningRepository } from 'src/interfaces/machine-learning.inte import { IMoveRepository } from 'src/interfaces/move.interface'; import { IPartnerRepository } from 'src/interfaces/partner.interface'; import { IPersonRepository } from 'src/interfaces/person.interface'; -import { IProcessRepository } from 'src/interfaces/process.interface'; import { ISearchRepository } from 'src/interfaces/search.interface'; import { ISessionRepository } from 'src/interfaces/session.interface'; import { ISharedLinkRepository } from 'src/interfaces/shared-link.interface'; @@ -72,6 +71,7 @@ export const repositories = [ MetadataRepository, NotificationRepository, OAuthRepository, + ProcessRepository, ServerInfoRepository, SystemMetadataRepository, TelemetryRepository, @@ -92,7 +92,6 @@ export const providers = [ { provide: IMoveRepository, useClass: MoveRepository }, { provide: IPartnerRepository, useClass: PartnerRepository }, { provide: IPersonRepository, useClass: PersonRepository }, - { provide: IProcessRepository, useClass: ProcessRepository }, { provide: ISearchRepository, useClass: SearchRepository }, { provide: ISessionRepository, useClass: SessionRepository }, { provide: ISharedLinkRepository, useClass: SharedLinkRepository }, diff --git a/server/src/repositories/process.repository.ts b/server/src/repositories/process.repository.ts index bd533129f9..d065554b0c 100644 --- a/server/src/repositories/process.repository.ts +++ b/server/src/repositories/process.repository.ts @@ -1,13 +1,11 @@ import { Injectable } from '@nestjs/common'; import { ChildProcessWithoutNullStreams, spawn, SpawnOptionsWithoutStdio } from 'node:child_process'; -import { IProcessRepository } from 'src/interfaces/process.interface'; import { LoggingRepository } from 'src/repositories/logging.repository'; -import { StorageRepository } from 'src/repositories/storage.repository'; @Injectable() -export class ProcessRepository implements IProcessRepository { +export class ProcessRepository { constructor(private logger: LoggingRepository) { - this.logger.setContext(StorageRepository.name); + this.logger.setContext(ProcessRepository.name); } spawn(command: string, args: readonly string[], options?: SpawnOptionsWithoutStdio): ChildProcessWithoutNullStreams { diff --git a/server/src/services/backup.service.spec.ts b/server/src/services/backup.service.spec.ts index 015a51a39c..7b8454f61e 100644 --- a/server/src/services/backup.service.spec.ts +++ b/server/src/services/backup.service.spec.ts @@ -4,10 +4,9 @@ import { StorageCore } from 'src/cores/storage.core'; import { ImmichWorker, StorageFolder } from 'src/enum'; import { IDatabaseRepository } from 'src/interfaces/database.interface'; import { JobStatus } from 'src/interfaces/job.interface'; -import { IProcessRepository } from 'src/interfaces/process.interface'; import { IStorageRepository } from 'src/interfaces/storage.interface'; import { BackupService } from 'src/services/backup.service'; -import { IConfigRepository, ICronRepository, ISystemMetadataRepository } from 'src/types'; +import { IConfigRepository, ICronRepository, IProcessRepository, ISystemMetadataRepository } from 'src/types'; import { systemConfigStub } from 'test/fixtures/system-config.stub'; import { mockSpawn, newTestService } from 'test/utils'; import { describe, Mocked } from 'vitest'; diff --git a/server/src/services/base.service.ts b/server/src/services/base.service.ts index acceadd0aa..15e374a411 100644 --- a/server/src/services/base.service.ts +++ b/server/src/services/base.service.ts @@ -17,7 +17,6 @@ import { IMachineLearningRepository } from 'src/interfaces/machine-learning.inte import { IMoveRepository } from 'src/interfaces/move.interface'; import { IPartnerRepository } from 'src/interfaces/partner.interface'; import { IPersonRepository } from 'src/interfaces/person.interface'; -import { IProcessRepository } from 'src/interfaces/process.interface'; import { ISearchRepository } from 'src/interfaces/search.interface'; import { ISessionRepository } from 'src/interfaces/session.interface'; import { ISharedLinkRepository } from 'src/interfaces/shared-link.interface'; @@ -39,6 +38,7 @@ import { MemoryRepository } from 'src/repositories/memory.repository'; import { MetadataRepository } from 'src/repositories/metadata.repository'; import { NotificationRepository } from 'src/repositories/notification.repository'; import { OAuthRepository } from 'src/repositories/oauth.repository'; +import { ProcessRepository } from 'src/repositories/process.repository'; import { ServerInfoRepository } from 'src/repositories/server-info.repository'; import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository'; import { TelemetryRepository } from 'src/repositories/telemetry.repository'; @@ -77,7 +77,7 @@ export class BaseService { protected oauthRepository: OAuthRepository, @Inject(IPartnerRepository) protected partnerRepository: IPartnerRepository, @Inject(IPersonRepository) protected personRepository: IPersonRepository, - @Inject(IProcessRepository) protected processRepository: IProcessRepository, + protected processRepository: ProcessRepository, @Inject(ISearchRepository) protected searchRepository: ISearchRepository, protected serverInfoRepository: ServerInfoRepository, @Inject(ISessionRepository) protected sessionRepository: ISessionRepository, diff --git a/server/src/types.ts b/server/src/types.ts index c74dac5753..471a928a98 100644 --- a/server/src/types.ts +++ b/server/src/types.ts @@ -14,6 +14,7 @@ import { MemoryRepository } from 'src/repositories/memory.repository'; import { MetadataRepository } from 'src/repositories/metadata.repository'; import { NotificationRepository } from 'src/repositories/notification.repository'; import { OAuthRepository } from 'src/repositories/oauth.repository'; +import { ProcessRepository } from 'src/repositories/process.repository'; import { ServerInfoRepository } from 'src/repositories/server-info.repository'; import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository'; import { MetricGroupRepository, TelemetryRepository } from 'src/repositories/telemetry.repository'; @@ -59,6 +60,7 @@ export type IMetadataRepository = RepositoryInterface; export type IMetricGroupRepository = RepositoryInterface; export type INotificationRepository = RepositoryInterface; export type IOAuthRepository = RepositoryInterface; +export type IProcessRepository = RepositoryInterface; export type IServerInfoRepository = RepositoryInterface; export type ISystemMetadataRepository = RepositoryInterface; export type ITelemetryRepository = RepositoryInterface; diff --git a/server/test/repositories/process.repository.mock.ts b/server/test/repositories/process.repository.mock.ts index 9a3c5a30b6..0ef1b0fdb1 100644 --- a/server/test/repositories/process.repository.mock.ts +++ b/server/test/repositories/process.repository.mock.ts @@ -1,4 +1,4 @@ -import { IProcessRepository } from 'src/interfaces/process.interface'; +import { IProcessRepository } from 'src/types'; import { Mocked, vitest } from 'vitest'; export const newProcessRepositoryMock = (): Mocked => { diff --git a/server/test/utils.ts b/server/test/utils.ts index 02032d114b..0a3c614159 100644 --- a/server/test/utils.ts +++ b/server/test/utils.ts @@ -15,6 +15,7 @@ import { MemoryRepository } from 'src/repositories/memory.repository'; import { MetadataRepository } from 'src/repositories/metadata.repository'; import { NotificationRepository } from 'src/repositories/notification.repository'; import { OAuthRepository } from 'src/repositories/oauth.repository'; +import { ProcessRepository } from 'src/repositories/process.repository'; import { ServerInfoRepository } from 'src/repositories/server-info.repository'; import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository'; import { TelemetryRepository } from 'src/repositories/telemetry.repository'; @@ -36,6 +37,7 @@ import { IMetadataRepository, INotificationRepository, IOAuthRepository, + IProcessRepository, IServerInfoRepository, ISystemMetadataRepository, ITrashRepository, @@ -165,7 +167,7 @@ export const newTestService = ( oauthMock as IOAuthRepository as OAuthRepository, partnerMock, personMock, - processMock, + processMock as IProcessRepository as ProcessRepository, searchMock, serverInfoMock as IServerInfoRepository as ServerInfoRepository, sessionMock,