mirror of
https://github.com/immich-app/immich.git
synced 2025-06-01 20:54:22 -04:00
refactor: process repository (#15956)
This commit is contained in:
parent
03948a69e2
commit
d7d4d22fe0
@ -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<void>;
|
|
||||||
}
|
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
|
@ -9,7 +9,6 @@ import { IMachineLearningRepository } from 'src/interfaces/machine-learning.inte
|
|||||||
import { IMoveRepository } from 'src/interfaces/move.interface';
|
import { IMoveRepository } from 'src/interfaces/move.interface';
|
||||||
import { IPartnerRepository } from 'src/interfaces/partner.interface';
|
import { IPartnerRepository } from 'src/interfaces/partner.interface';
|
||||||
import { IPersonRepository } from 'src/interfaces/person.interface';
|
import { IPersonRepository } from 'src/interfaces/person.interface';
|
||||||
import { IProcessRepository } from 'src/interfaces/process.interface';
|
|
||||||
import { ISearchRepository } from 'src/interfaces/search.interface';
|
import { ISearchRepository } from 'src/interfaces/search.interface';
|
||||||
import { ISessionRepository } from 'src/interfaces/session.interface';
|
import { ISessionRepository } from 'src/interfaces/session.interface';
|
||||||
import { ISharedLinkRepository } from 'src/interfaces/shared-link.interface';
|
import { ISharedLinkRepository } from 'src/interfaces/shared-link.interface';
|
||||||
@ -72,6 +71,7 @@ export const repositories = [
|
|||||||
MetadataRepository,
|
MetadataRepository,
|
||||||
NotificationRepository,
|
NotificationRepository,
|
||||||
OAuthRepository,
|
OAuthRepository,
|
||||||
|
ProcessRepository,
|
||||||
ServerInfoRepository,
|
ServerInfoRepository,
|
||||||
SystemMetadataRepository,
|
SystemMetadataRepository,
|
||||||
TelemetryRepository,
|
TelemetryRepository,
|
||||||
@ -92,7 +92,6 @@ export const providers = [
|
|||||||
{ provide: IMoveRepository, useClass: MoveRepository },
|
{ provide: IMoveRepository, useClass: MoveRepository },
|
||||||
{ provide: IPartnerRepository, useClass: PartnerRepository },
|
{ provide: IPartnerRepository, useClass: PartnerRepository },
|
||||||
{ provide: IPersonRepository, useClass: PersonRepository },
|
{ provide: IPersonRepository, useClass: PersonRepository },
|
||||||
{ provide: IProcessRepository, useClass: ProcessRepository },
|
|
||||||
{ provide: ISearchRepository, useClass: SearchRepository },
|
{ provide: ISearchRepository, useClass: SearchRepository },
|
||||||
{ provide: ISessionRepository, useClass: SessionRepository },
|
{ provide: ISessionRepository, useClass: SessionRepository },
|
||||||
{ provide: ISharedLinkRepository, useClass: SharedLinkRepository },
|
{ provide: ISharedLinkRepository, useClass: SharedLinkRepository },
|
||||||
|
@ -1,13 +1,11 @@
|
|||||||
import { Injectable } from '@nestjs/common';
|
import { Injectable } from '@nestjs/common';
|
||||||
import { ChildProcessWithoutNullStreams, spawn, SpawnOptionsWithoutStdio } from 'node:child_process';
|
import { ChildProcessWithoutNullStreams, spawn, SpawnOptionsWithoutStdio } from 'node:child_process';
|
||||||
import { IProcessRepository } from 'src/interfaces/process.interface';
|
|
||||||
import { LoggingRepository } from 'src/repositories/logging.repository';
|
import { LoggingRepository } from 'src/repositories/logging.repository';
|
||||||
import { StorageRepository } from 'src/repositories/storage.repository';
|
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class ProcessRepository implements IProcessRepository {
|
export class ProcessRepository {
|
||||||
constructor(private logger: LoggingRepository) {
|
constructor(private logger: LoggingRepository) {
|
||||||
this.logger.setContext(StorageRepository.name);
|
this.logger.setContext(ProcessRepository.name);
|
||||||
}
|
}
|
||||||
|
|
||||||
spawn(command: string, args: readonly string[], options?: SpawnOptionsWithoutStdio): ChildProcessWithoutNullStreams {
|
spawn(command: string, args: readonly string[], options?: SpawnOptionsWithoutStdio): ChildProcessWithoutNullStreams {
|
||||||
|
@ -4,10 +4,9 @@ import { StorageCore } from 'src/cores/storage.core';
|
|||||||
import { ImmichWorker, StorageFolder } from 'src/enum';
|
import { ImmichWorker, StorageFolder } from 'src/enum';
|
||||||
import { IDatabaseRepository } from 'src/interfaces/database.interface';
|
import { IDatabaseRepository } from 'src/interfaces/database.interface';
|
||||||
import { JobStatus } from 'src/interfaces/job.interface';
|
import { JobStatus } from 'src/interfaces/job.interface';
|
||||||
import { IProcessRepository } from 'src/interfaces/process.interface';
|
|
||||||
import { IStorageRepository } from 'src/interfaces/storage.interface';
|
import { IStorageRepository } from 'src/interfaces/storage.interface';
|
||||||
import { BackupService } from 'src/services/backup.service';
|
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 { systemConfigStub } from 'test/fixtures/system-config.stub';
|
||||||
import { mockSpawn, newTestService } from 'test/utils';
|
import { mockSpawn, newTestService } from 'test/utils';
|
||||||
import { describe, Mocked } from 'vitest';
|
import { describe, Mocked } from 'vitest';
|
||||||
|
@ -17,7 +17,6 @@ import { IMachineLearningRepository } from 'src/interfaces/machine-learning.inte
|
|||||||
import { IMoveRepository } from 'src/interfaces/move.interface';
|
import { IMoveRepository } from 'src/interfaces/move.interface';
|
||||||
import { IPartnerRepository } from 'src/interfaces/partner.interface';
|
import { IPartnerRepository } from 'src/interfaces/partner.interface';
|
||||||
import { IPersonRepository } from 'src/interfaces/person.interface';
|
import { IPersonRepository } from 'src/interfaces/person.interface';
|
||||||
import { IProcessRepository } from 'src/interfaces/process.interface';
|
|
||||||
import { ISearchRepository } from 'src/interfaces/search.interface';
|
import { ISearchRepository } from 'src/interfaces/search.interface';
|
||||||
import { ISessionRepository } from 'src/interfaces/session.interface';
|
import { ISessionRepository } from 'src/interfaces/session.interface';
|
||||||
import { ISharedLinkRepository } from 'src/interfaces/shared-link.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 { MetadataRepository } from 'src/repositories/metadata.repository';
|
||||||
import { NotificationRepository } from 'src/repositories/notification.repository';
|
import { NotificationRepository } from 'src/repositories/notification.repository';
|
||||||
import { OAuthRepository } from 'src/repositories/oauth.repository';
|
import { OAuthRepository } from 'src/repositories/oauth.repository';
|
||||||
|
import { ProcessRepository } from 'src/repositories/process.repository';
|
||||||
import { ServerInfoRepository } from 'src/repositories/server-info.repository';
|
import { ServerInfoRepository } from 'src/repositories/server-info.repository';
|
||||||
import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository';
|
import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository';
|
||||||
import { TelemetryRepository } from 'src/repositories/telemetry.repository';
|
import { TelemetryRepository } from 'src/repositories/telemetry.repository';
|
||||||
@ -77,7 +77,7 @@ export class BaseService {
|
|||||||
protected oauthRepository: OAuthRepository,
|
protected oauthRepository: OAuthRepository,
|
||||||
@Inject(IPartnerRepository) protected partnerRepository: IPartnerRepository,
|
@Inject(IPartnerRepository) protected partnerRepository: IPartnerRepository,
|
||||||
@Inject(IPersonRepository) protected personRepository: IPersonRepository,
|
@Inject(IPersonRepository) protected personRepository: IPersonRepository,
|
||||||
@Inject(IProcessRepository) protected processRepository: IProcessRepository,
|
protected processRepository: ProcessRepository,
|
||||||
@Inject(ISearchRepository) protected searchRepository: ISearchRepository,
|
@Inject(ISearchRepository) protected searchRepository: ISearchRepository,
|
||||||
protected serverInfoRepository: ServerInfoRepository,
|
protected serverInfoRepository: ServerInfoRepository,
|
||||||
@Inject(ISessionRepository) protected sessionRepository: ISessionRepository,
|
@Inject(ISessionRepository) protected sessionRepository: ISessionRepository,
|
||||||
|
@ -14,6 +14,7 @@ import { MemoryRepository } from 'src/repositories/memory.repository';
|
|||||||
import { MetadataRepository } from 'src/repositories/metadata.repository';
|
import { MetadataRepository } from 'src/repositories/metadata.repository';
|
||||||
import { NotificationRepository } from 'src/repositories/notification.repository';
|
import { NotificationRepository } from 'src/repositories/notification.repository';
|
||||||
import { OAuthRepository } from 'src/repositories/oauth.repository';
|
import { OAuthRepository } from 'src/repositories/oauth.repository';
|
||||||
|
import { ProcessRepository } from 'src/repositories/process.repository';
|
||||||
import { ServerInfoRepository } from 'src/repositories/server-info.repository';
|
import { ServerInfoRepository } from 'src/repositories/server-info.repository';
|
||||||
import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository';
|
import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository';
|
||||||
import { MetricGroupRepository, TelemetryRepository } from 'src/repositories/telemetry.repository';
|
import { MetricGroupRepository, TelemetryRepository } from 'src/repositories/telemetry.repository';
|
||||||
@ -59,6 +60,7 @@ export type IMetadataRepository = RepositoryInterface<MetadataRepository>;
|
|||||||
export type IMetricGroupRepository = RepositoryInterface<MetricGroupRepository>;
|
export type IMetricGroupRepository = RepositoryInterface<MetricGroupRepository>;
|
||||||
export type INotificationRepository = RepositoryInterface<NotificationRepository>;
|
export type INotificationRepository = RepositoryInterface<NotificationRepository>;
|
||||||
export type IOAuthRepository = RepositoryInterface<OAuthRepository>;
|
export type IOAuthRepository = RepositoryInterface<OAuthRepository>;
|
||||||
|
export type IProcessRepository = RepositoryInterface<ProcessRepository>;
|
||||||
export type IServerInfoRepository = RepositoryInterface<ServerInfoRepository>;
|
export type IServerInfoRepository = RepositoryInterface<ServerInfoRepository>;
|
||||||
export type ISystemMetadataRepository = RepositoryInterface<SystemMetadataRepository>;
|
export type ISystemMetadataRepository = RepositoryInterface<SystemMetadataRepository>;
|
||||||
export type ITelemetryRepository = RepositoryInterface<TelemetryRepository>;
|
export type ITelemetryRepository = RepositoryInterface<TelemetryRepository>;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { IProcessRepository } from 'src/interfaces/process.interface';
|
import { IProcessRepository } from 'src/types';
|
||||||
import { Mocked, vitest } from 'vitest';
|
import { Mocked, vitest } from 'vitest';
|
||||||
|
|
||||||
export const newProcessRepositoryMock = (): Mocked<IProcessRepository> => {
|
export const newProcessRepositoryMock = (): Mocked<IProcessRepository> => {
|
||||||
|
@ -15,6 +15,7 @@ import { MemoryRepository } from 'src/repositories/memory.repository';
|
|||||||
import { MetadataRepository } from 'src/repositories/metadata.repository';
|
import { MetadataRepository } from 'src/repositories/metadata.repository';
|
||||||
import { NotificationRepository } from 'src/repositories/notification.repository';
|
import { NotificationRepository } from 'src/repositories/notification.repository';
|
||||||
import { OAuthRepository } from 'src/repositories/oauth.repository';
|
import { OAuthRepository } from 'src/repositories/oauth.repository';
|
||||||
|
import { ProcessRepository } from 'src/repositories/process.repository';
|
||||||
import { ServerInfoRepository } from 'src/repositories/server-info.repository';
|
import { ServerInfoRepository } from 'src/repositories/server-info.repository';
|
||||||
import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository';
|
import { SystemMetadataRepository } from 'src/repositories/system-metadata.repository';
|
||||||
import { TelemetryRepository } from 'src/repositories/telemetry.repository';
|
import { TelemetryRepository } from 'src/repositories/telemetry.repository';
|
||||||
@ -36,6 +37,7 @@ import {
|
|||||||
IMetadataRepository,
|
IMetadataRepository,
|
||||||
INotificationRepository,
|
INotificationRepository,
|
||||||
IOAuthRepository,
|
IOAuthRepository,
|
||||||
|
IProcessRepository,
|
||||||
IServerInfoRepository,
|
IServerInfoRepository,
|
||||||
ISystemMetadataRepository,
|
ISystemMetadataRepository,
|
||||||
ITrashRepository,
|
ITrashRepository,
|
||||||
@ -165,7 +167,7 @@ export const newTestService = <T extends BaseService>(
|
|||||||
oauthMock as IOAuthRepository as OAuthRepository,
|
oauthMock as IOAuthRepository as OAuthRepository,
|
||||||
partnerMock,
|
partnerMock,
|
||||||
personMock,
|
personMock,
|
||||||
processMock,
|
processMock as IProcessRepository as ProcessRepository,
|
||||||
searchMock,
|
searchMock,
|
||||||
serverInfoMock as IServerInfoRepository as ServerInfoRepository,
|
serverInfoMock as IServerInfoRepository as ServerInfoRepository,
|
||||||
sessionMock,
|
sessionMock,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user