1
0
mirror of https://github.com/immich-app/immich.git synced 2024-12-26 10:50:29 +02:00

refactor(server): imports and repository tokens (#1220)

* refactor: entity imports

* refactor: rename user repository token

* chore: merge imports

* refactor: rename album repository token

* refactor: rename asset repository token

* refactor: rename tag repository token
This commit is contained in:
Jason Rasmussen 2022-12-30 08:22:06 -05:00 committed by GitHub
parent f7d3c4b4ff
commit d9fa6619e7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
81 changed files with 130 additions and 151 deletions

View File

@ -1,5 +1,4 @@
import { DatabaseModule } from '@app/database'; import { DatabaseModule, UserEntity } from '@app/database';
import { UserEntity } from '@app/database/entities/user.entity';
import { Module } from '@nestjs/common'; import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm'; import { TypeOrmModule } from '@nestjs/typeorm';
import { PromptPasswordQuestions, ResetAdminPasswordCommand } from './commands/reset-admin-password.command'; import { PromptPasswordQuestions, ResetAdminPasswordCommand } from './commands/reset-admin-password.command';

View File

@ -1,4 +1,4 @@
import { UserEntity } from '@app/database/entities/user.entity'; import { UserEntity } from '@app/database';
import { InjectRepository } from '@nestjs/typeorm'; import { InjectRepository } from '@nestjs/typeorm';
import bcrypt from 'bcrypt'; import bcrypt from 'bcrypt';
import { Command, CommandRunner, InquirerService, Question, QuestionSet } from 'nest-commander'; import { Command, CommandRunner, InquirerService, Question, QuestionSet } from 'nest-commander';

View File

@ -1,6 +1,4 @@
import { AlbumEntity } from '@app/database/entities/album.entity'; import { AlbumEntity, AssetAlbumEntity, UserAlbumEntity } from '@app/database';
import { AssetAlbumEntity } from '@app/database/entities/asset-album.entity';
import { UserAlbumEntity } from '@app/database/entities/user-album.entity';
import { Injectable } from '@nestjs/common'; import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm'; import { InjectRepository } from '@nestjs/typeorm';
import { In, Repository, SelectQueryBuilder, DataSource, Brackets } from 'typeorm'; import { In, Repository, SelectQueryBuilder, DataSource, Brackets } from 'typeorm';
@ -28,7 +26,7 @@ export interface IAlbumRepository {
getSharedWithUserAlbumCount(userId: string, assetId: string): Promise<number>; getSharedWithUserAlbumCount(userId: string, assetId: string): Promise<number>;
} }
export const ALBUM_REPOSITORY = 'ALBUM_REPOSITORY'; export const IAlbumRepository = 'IAlbumRepository';
@Injectable() @Injectable()
export class AlbumRepository implements IAlbumRepository { export class AlbumRepository implements IAlbumRepository {

View File

@ -2,16 +2,14 @@ import { forwardRef, Module } from '@nestjs/common';
import { AlbumService } from './album.service'; import { AlbumService } from './album.service';
import { AlbumController } from './album.controller'; import { AlbumController } from './album.controller';
import { TypeOrmModule } from '@nestjs/typeorm'; import { TypeOrmModule } from '@nestjs/typeorm';
import { AlbumEntity } from '../../../../../libs/database/src/entities/album.entity'; import { AlbumEntity, AssetAlbumEntity, UserAlbumEntity } from '@app/database';
import { AssetAlbumEntity } from '@app/database/entities/asset-album.entity'; import { AlbumRepository, IAlbumRepository } from './album-repository';
import { UserAlbumEntity } from '@app/database/entities/user-album.entity';
import { AlbumRepository, ALBUM_REPOSITORY } from './album-repository';
import { DownloadModule } from '../../modules/download/download.module'; import { DownloadModule } from '../../modules/download/download.module';
import { AssetModule } from '../asset/asset.module'; import { AssetModule } from '../asset/asset.module';
import { UserModule } from '../user/user.module'; import { UserModule } from '../user/user.module';
const ALBUM_REPOSITORY_PROVIDER = { const ALBUM_REPOSITORY_PROVIDER = {
provide: ALBUM_REPOSITORY, provide: IAlbumRepository,
useClass: AlbumRepository, useClass: AlbumRepository,
}; };

View File

@ -1,7 +1,7 @@
import { AlbumService } from './album.service'; import { AlbumService } from './album.service';
import { AuthUserDto } from '../../decorators/auth-user.decorator'; import { AuthUserDto } from '../../decorators/auth-user.decorator';
import { BadRequestException, NotFoundException, ForbiddenException } from '@nestjs/common'; import { BadRequestException, NotFoundException, ForbiddenException } from '@nestjs/common';
import { AlbumEntity } from '@app/database/entities/album.entity'; import { AlbumEntity } from '@app/database';
import { AlbumResponseDto } from './response-dto/album-response.dto'; import { AlbumResponseDto } from './response-dto/album-response.dto';
import { IAssetRepository } from '../asset/asset-repository'; import { IAssetRepository } from '../asset/asset-repository';
import { AddAssetsResponseDto } from './response-dto/add-assets-response.dto'; import { AddAssetsResponseDto } from './response-dto/add-assets-response.dto';

View File

@ -1,15 +1,15 @@
import { BadRequestException, Inject, Injectable, NotFoundException, ForbiddenException } from '@nestjs/common'; import { BadRequestException, Inject, Injectable, NotFoundException, ForbiddenException } from '@nestjs/common';
import { AuthUserDto } from '../../decorators/auth-user.decorator'; import { AuthUserDto } from '../../decorators/auth-user.decorator';
import { CreateAlbumDto } from './dto/create-album.dto'; import { CreateAlbumDto } from './dto/create-album.dto';
import { AlbumEntity } from '@app/database/entities/album.entity'; import { AlbumEntity } from '@app/database';
import { AddUsersDto } from './dto/add-users.dto'; import { AddUsersDto } from './dto/add-users.dto';
import { RemoveAssetsDto } from './dto/remove-assets.dto'; import { RemoveAssetsDto } from './dto/remove-assets.dto';
import { UpdateAlbumDto } from './dto/update-album.dto'; import { UpdateAlbumDto } from './dto/update-album.dto';
import { GetAlbumsDto } from './dto/get-albums.dto'; import { GetAlbumsDto } from './dto/get-albums.dto';
import { AlbumResponseDto, mapAlbum, mapAlbumExcludeAssetInfo } from './response-dto/album-response.dto'; import { AlbumResponseDto, mapAlbum, mapAlbumExcludeAssetInfo } from './response-dto/album-response.dto';
import { ALBUM_REPOSITORY, IAlbumRepository } from './album-repository'; import { IAlbumRepository } from './album-repository';
import { AlbumCountResponseDto } from './response-dto/album-count-response.dto'; import { AlbumCountResponseDto } from './response-dto/album-count-response.dto';
import { ASSET_REPOSITORY, IAssetRepository } from '../asset/asset-repository'; import { IAssetRepository } from '../asset/asset-repository';
import { AddAssetsResponseDto } from './response-dto/add-assets-response.dto'; import { AddAssetsResponseDto } from './response-dto/add-assets-response.dto';
import { AddAssetsDto } from './dto/add-assets.dto'; import { AddAssetsDto } from './dto/add-assets.dto';
import { DownloadService } from '../../modules/download/download.service'; import { DownloadService } from '../../modules/download/download.service';
@ -18,8 +18,8 @@ import { DownloadDto } from '../asset/dto/download-library.dto';
@Injectable() @Injectable()
export class AlbumService { export class AlbumService {
constructor( constructor(
@Inject(ALBUM_REPOSITORY) private _albumRepository: IAlbumRepository, @Inject(IAlbumRepository) private _albumRepository: IAlbumRepository,
@Inject(ASSET_REPOSITORY) private _assetRepository: IAssetRepository, @Inject(IAssetRepository) private _assetRepository: IAssetRepository,
private downloadService: DownloadService, private downloadService: DownloadService,
) {} ) {}

View File

@ -1,4 +1,4 @@
import { AlbumEntity } from '../../../../../../libs/database/src/entities/album.entity'; import { AlbumEntity } from '@app/database';
import { UserResponseDto, mapUser } from '../../user/response-dto/user-response.dto'; import { UserResponseDto, mapUser } from '../../user/response-dto/user-response.dto';
import { AssetResponseDto, mapAsset } from '../../asset/response-dto/asset-response.dto'; import { AssetResponseDto, mapAsset } from '../../asset/response-dto/asset-response.dto';
import { ApiProperty } from '@nestjs/swagger'; import { ApiProperty } from '@nestjs/swagger';

View File

@ -1,6 +1,6 @@
import { SearchPropertiesDto } from './dto/search-properties.dto'; import { SearchPropertiesDto } from './dto/search-properties.dto';
import { CuratedLocationsResponseDto } from './response-dto/curated-locations-response.dto'; import { CuratedLocationsResponseDto } from './response-dto/curated-locations-response.dto';
import { AssetEntity, AssetType } from '@app/database/entities/asset.entity'; import { AssetEntity, AssetType } from '@app/database';
import { BadRequestException, Inject, Injectable } from '@nestjs/common'; import { BadRequestException, Inject, Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm'; import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm/repository/Repository'; import { Repository } from 'typeorm/repository/Repository';
@ -14,7 +14,7 @@ import { CheckExistingAssetsDto } from './dto/check-existing-assets.dto';
import { CheckExistingAssetsResponseDto } from './response-dto/check-existing-assets-response.dto'; import { CheckExistingAssetsResponseDto } from './response-dto/check-existing-assets-response.dto';
import { In } from 'typeorm/find-options/operator/In'; import { In } from 'typeorm/find-options/operator/In';
import { UpdateAssetDto } from './dto/update-asset.dto'; import { UpdateAssetDto } from './dto/update-asset.dto';
import { ITagRepository, TAG_REPOSITORY } from '../tag/tag.repository'; import { ITagRepository } from '../tag/tag.repository';
import { IsNull } from 'typeorm'; import { IsNull } from 'typeorm';
export interface IAssetRepository { export interface IAssetRepository {
@ -48,7 +48,7 @@ export interface IAssetRepository {
countByIdAndUser(assetId: string, userId: string): Promise<number>; countByIdAndUser(assetId: string, userId: string): Promise<number>;
} }
export const ASSET_REPOSITORY = 'ASSET_REPOSITORY'; export const IAssetRepository = 'IAssetRepository';
@Injectable() @Injectable()
export class AssetRepository implements IAssetRepository { export class AssetRepository implements IAssetRepository {
@ -56,7 +56,7 @@ export class AssetRepository implements IAssetRepository {
@InjectRepository(AssetEntity) @InjectRepository(AssetEntity)
private assetRepository: Repository<AssetEntity>, private assetRepository: Repository<AssetEntity>,
@Inject(TAG_REPOSITORY) private _tagRepository: ITagRepository, @Inject(ITagRepository) private _tagRepository: ITagRepository,
) {} ) {}
async getAssetWithNoSmartInfo(): Promise<AssetEntity[]> { async getAssetWithNoSmartInfo(): Promise<AssetEntity[]> {

View File

@ -2,12 +2,12 @@ import { forwardRef, Module } from '@nestjs/common';
import { AssetService } from './asset.service'; import { AssetService } from './asset.service';
import { AssetController } from './asset.controller'; import { AssetController } from './asset.controller';
import { TypeOrmModule } from '@nestjs/typeorm'; import { TypeOrmModule } from '@nestjs/typeorm';
import { AssetEntity } from '@app/database/entities/asset.entity'; import { AssetEntity } from '@app/database';
import { BullModule } from '@nestjs/bull'; import { BullModule } from '@nestjs/bull';
import { BackgroundTaskModule } from '../../modules/background-task/background-task.module'; import { BackgroundTaskModule } from '../../modules/background-task/background-task.module';
import { BackgroundTaskService } from '../../modules/background-task/background-task.service'; import { BackgroundTaskService } from '../../modules/background-task/background-task.service';
import { CommunicationModule } from '../communication/communication.module'; import { CommunicationModule } from '../communication/communication.module';
import { AssetRepository, ASSET_REPOSITORY } from './asset-repository'; import { AssetRepository, IAssetRepository } from './asset-repository';
import { DownloadModule } from '../../modules/download/download.module'; import { DownloadModule } from '../../modules/download/download.module';
import { TagModule } from '../tag/tag.module'; import { TagModule } from '../tag/tag.module';
import { AlbumModule } from '../album/album.module'; import { AlbumModule } from '../album/album.module';
@ -16,7 +16,7 @@ import { StorageModule } from '@app/storage';
import { immichSharedQueues } from '@app/job/constants/bull-queue-registration.constant'; import { immichSharedQueues } from '@app/job/constants/bull-queue-registration.constant';
const ASSET_REPOSITORY_PROVIDER = { const ASSET_REPOSITORY_PROVIDER = {
provide: ASSET_REPOSITORY, provide: IAssetRepository,
useClass: AssetRepository, useClass: AssetRepository,
}; };

View File

@ -2,7 +2,7 @@ import { IAssetRepository } from './asset-repository';
import { AuthUserDto } from '../../decorators/auth-user.decorator'; import { AuthUserDto } from '../../decorators/auth-user.decorator';
import { AssetService } from './asset.service'; import { AssetService } from './asset.service';
import { Repository } from 'typeorm'; import { Repository } from 'typeorm';
import { AssetEntity, AssetType } from '@app/database/entities/asset.entity'; import { AssetEntity, AssetType } from '@app/database';
import { CreateAssetDto } from './dto/create-asset.dto'; import { CreateAssetDto } from './dto/create-asset.dto';
import { AssetCountByTimeBucket } from './response-dto/asset-count-by-time-group-response.dto'; import { AssetCountByTimeBucket } from './response-dto/asset-count-by-time-group-response.dto';
import { TimeGroupEnum } from './dto/get-asset-count-by-time-bucket.dto'; import { TimeGroupEnum } from './dto/get-asset-count-by-time-bucket.dto';

View File

@ -13,7 +13,7 @@ import { InjectRepository } from '@nestjs/typeorm';
import { createHash, randomUUID } from 'node:crypto'; import { createHash, randomUUID } from 'node:crypto';
import { QueryFailedError, Repository } from 'typeorm'; import { QueryFailedError, Repository } from 'typeorm';
import { AuthUserDto } from '../../decorators/auth-user.decorator'; import { AuthUserDto } from '../../decorators/auth-user.decorator';
import { AssetEntity, AssetType } from '@app/database/entities/asset.entity'; import { AssetEntity, AssetType } from '@app/database';
import { constants, createReadStream, ReadStream, stat } from 'fs'; import { constants, createReadStream, ReadStream, stat } from 'fs';
import { ServeFileDto } from './dto/serve-file.dto'; import { ServeFileDto } from './dto/serve-file.dto';
import { Response as Res } from 'express'; import { Response as Res } from 'express';
@ -28,7 +28,7 @@ import { CreateAssetDto } from './dto/create-asset.dto';
import { DeleteAssetResponseDto, DeleteAssetStatusEnum } from './response-dto/delete-asset-response.dto'; import { DeleteAssetResponseDto, DeleteAssetStatusEnum } from './response-dto/delete-asset-response.dto';
import { GetAssetThumbnailDto, GetAssetThumbnailFormatEnum } from './dto/get-asset-thumbnail.dto'; import { GetAssetThumbnailDto, GetAssetThumbnailFormatEnum } from './dto/get-asset-thumbnail.dto';
import { CheckDuplicateAssetResponseDto } from './response-dto/check-duplicate-asset-response.dto'; import { CheckDuplicateAssetResponseDto } from './response-dto/check-duplicate-asset-response.dto';
import { ASSET_REPOSITORY, IAssetRepository } from './asset-repository'; import { IAssetRepository } from './asset-repository';
import { SearchPropertiesDto } from './dto/search-properties.dto'; import { SearchPropertiesDto } from './dto/search-properties.dto';
import { import {
AssetCountByTimeBucketResponseDto, AssetCountByTimeBucketResponseDto,
@ -54,7 +54,7 @@ import { InjectQueue } from '@nestjs/bull';
import { Queue } from 'bull'; import { Queue } from 'bull';
import { DownloadService } from '../../modules/download/download.service'; import { DownloadService } from '../../modules/download/download.service';
import { DownloadDto } from './dto/download-library.dto'; import { DownloadDto } from './dto/download-library.dto';
import { ALBUM_REPOSITORY, IAlbumRepository } from '../album/album-repository'; import { IAlbumRepository } from '../album/album-repository';
import { StorageService } from '@app/storage'; import { StorageService } from '@app/storage';
const fileInfo = promisify(stat); const fileInfo = promisify(stat);
@ -62,11 +62,9 @@ const fileInfo = promisify(stat);
@Injectable() @Injectable()
export class AssetService { export class AssetService {
constructor( constructor(
@Inject(ASSET_REPOSITORY) @Inject(IAssetRepository) private _assetRepository: IAssetRepository,
private _assetRepository: IAssetRepository,
@Inject(ALBUM_REPOSITORY) @Inject(IAlbumRepository) private _albumRepository: IAlbumRepository,
private _albumRepository: IAlbumRepository,
@InjectRepository(AssetEntity) @InjectRepository(AssetEntity)
private assetRepository: Repository<AssetEntity>, private assetRepository: Repository<AssetEntity>,

View File

@ -1,5 +1,5 @@
import { IsNotEmpty, IsOptional } from 'class-validator'; import { IsNotEmpty, IsOptional } from 'class-validator';
import { AssetType } from '@app/database/entities/asset.entity'; import { AssetType } from '@app/database';
import { ApiProperty } from '@nestjs/swagger'; import { ApiProperty } from '@nestjs/swagger';
export class CreateAssetDto { export class CreateAssetDto {

View File

@ -1,4 +1,4 @@
import { AssetEntity, AssetType } from '@app/database/entities/asset.entity'; import { AssetEntity, AssetType } from '@app/database';
import { ApiProperty } from '@nestjs/swagger'; import { ApiProperty } from '@nestjs/swagger';
import { mapTag, TagResponseDto } from '../../tag/response-dto/tag-response.dto'; import { mapTag, TagResponseDto } from '../../tag/response-dto/tag-response.dto';
import { ExifResponseDto, mapExif } from './exif-response.dto'; import { ExifResponseDto, mapExif } from './exif-response.dto';

View File

@ -1,4 +1,4 @@
import { ExifEntity } from '@app/database/entities/exif.entity'; import { ExifEntity } from '@app/database';
import { ApiProperty } from '@nestjs/swagger'; import { ApiProperty } from '@nestjs/swagger';
export class ExifResponseDto { export class ExifResponseDto {

View File

@ -1,4 +1,4 @@
import { SmartInfoEntity } from '@app/database/entities/smart-info.entity'; import { SmartInfoEntity } from '@app/database';
export class SmartInfoResponseDto { export class SmartInfoResponseDto {
id?: string; id?: string;

View File

@ -1,4 +1,4 @@
import { UserEntity } from '@app/database/entities/user.entity'; import { UserEntity } from '@app/database';
import { BadRequestException, UnauthorizedException } from '@nestjs/common'; import { BadRequestException, UnauthorizedException } from '@nestjs/common';
import * as bcrypt from 'bcrypt'; import * as bcrypt from 'bcrypt';
import { AuthType } from '../../constants/jwt.constant'; import { AuthType } from '../../constants/jwt.constant';

View File

@ -7,11 +7,11 @@ import {
UnauthorizedException, UnauthorizedException,
} from '@nestjs/common'; } from '@nestjs/common';
import * as bcrypt from 'bcrypt'; import * as bcrypt from 'bcrypt';
import { UserEntity } from '../../../../../libs/database/src/entities/user.entity'; import { UserEntity } from '@app/database';
import { AuthType } from '../../constants/jwt.constant'; import { AuthType } from '../../constants/jwt.constant';
import { AuthUserDto } from '../../decorators/auth-user.decorator'; import { AuthUserDto } from '../../decorators/auth-user.decorator';
import { ImmichJwtService } from '../../modules/immich-jwt/immich-jwt.service'; import { ImmichJwtService } from '../../modules/immich-jwt/immich-jwt.service';
import { IUserRepository, USER_REPOSITORY } from '../user/user-repository'; import { IUserRepository } from '../user/user-repository';
import { ChangePasswordDto } from './dto/change-password.dto'; import { ChangePasswordDto } from './dto/change-password.dto';
import { LoginCredentialDto } from './dto/login-credential.dto'; import { LoginCredentialDto } from './dto/login-credential.dto';
import { SignUpDto } from './dto/sign-up.dto'; import { SignUpDto } from './dto/sign-up.dto';
@ -29,7 +29,7 @@ export class AuthService {
constructor( constructor(
private oauthService: OAuthService, private oauthService: OAuthService,
private immichJwtService: ImmichJwtService, private immichJwtService: ImmichJwtService,
@Inject(USER_REPOSITORY) userRepository: IUserRepository, @Inject(IUserRepository) userRepository: IUserRepository,
) { ) {
this.userCore = new UserCore(userRepository); this.userCore = new UserCore(userRepository);
} }

View File

@ -1,4 +1,4 @@
import { UserEntity } from '@app/database/entities/user.entity'; import { UserEntity } from '@app/database';
export class AdminSignupResponseDto { export class AdminSignupResponseDto {
id!: string; id!: string;

View File

@ -1,4 +1,4 @@
import { UserEntity } from '@app/database/entities/user.entity'; import { UserEntity } from '@app/database';
import { ApiResponseProperty } from '@nestjs/swagger'; import { ApiResponseProperty } from '@nestjs/swagger';
export class LoginResponseDto { export class LoginResponseDto {

View File

@ -3,7 +3,7 @@ import { Socket, Server } from 'socket.io';
import { ImmichJwtService, JwtValidationResult } from '../../modules/immich-jwt/immich-jwt.service'; import { ImmichJwtService, JwtValidationResult } from '../../modules/immich-jwt/immich-jwt.service';
import { Logger } from '@nestjs/common'; import { Logger } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm'; import { InjectRepository } from '@nestjs/typeorm';
import { UserEntity } from '@app/database/entities/user.entity'; import { UserEntity } from '@app/database';
import { Repository } from 'typeorm'; import { Repository } from 'typeorm';
import cookieParser from 'cookie'; import cookieParser from 'cookie';
import { IMMICH_ACCESS_COOKIE } from '../../constants/jwt.constant'; import { IMMICH_ACCESS_COOKIE } from '../../constants/jwt.constant';

View File

@ -6,7 +6,7 @@ import { ImmichJwtService } from '../../modules/immich-jwt/immich-jwt.service';
import { JwtModule } from '@nestjs/jwt'; import { JwtModule } from '@nestjs/jwt';
import { jwtConfig } from '../../config/jwt.config'; import { jwtConfig } from '../../config/jwt.config';
import { TypeOrmModule } from '@nestjs/typeorm'; import { TypeOrmModule } from '@nestjs/typeorm';
import { UserEntity } from '@app/database/entities/user.entity'; import { UserEntity } from '@app/database';
@Module({ @Module({
imports: [TypeOrmModule.forFeature([UserEntity]), ImmichJwtModule, JwtModule.register(jwtConfig)], imports: [TypeOrmModule.forFeature([UserEntity]), ImmichJwtModule, JwtModule.register(jwtConfig)],

View File

@ -2,7 +2,7 @@ import { Module } from '@nestjs/common';
import { DeviceInfoService } from './device-info.service'; import { DeviceInfoService } from './device-info.service';
import { DeviceInfoController } from './device-info.controller'; import { DeviceInfoController } from './device-info.controller';
import { TypeOrmModule } from '@nestjs/typeorm'; import { TypeOrmModule } from '@nestjs/typeorm';
import { DeviceInfoEntity } from '@app/database/entities/device-info.entity'; import { DeviceInfoEntity } from '@app/database';
@Module({ @Module({
imports: [TypeOrmModule.forFeature([DeviceInfoEntity])], imports: [TypeOrmModule.forFeature([DeviceInfoEntity])],

View File

@ -1,4 +1,4 @@
import { DeviceInfoEntity, DeviceType } from '@app/database/entities/device-info.entity'; import { DeviceInfoEntity, DeviceType } from '@app/database';
import { Repository } from 'typeorm'; import { Repository } from 'typeorm';
import { DeviceInfoService } from './device-info.service'; import { DeviceInfoService } from './device-info.service';

View File

@ -1,4 +1,4 @@
import { DeviceInfoEntity } from '@app/database/entities/device-info.entity'; import { DeviceInfoEntity } from '@app/database';
import { Injectable } from '@nestjs/common'; import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm'; import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm'; import { Repository } from 'typeorm';

View File

@ -1,5 +1,5 @@
import { IsNotEmpty, IsOptional } from 'class-validator'; import { IsNotEmpty, IsOptional } from 'class-validator';
import { DeviceType } from '@app/database/entities/device-info.entity'; import { DeviceType } from '@app/database';
import { ApiProperty } from '@nestjs/swagger'; import { ApiProperty } from '@nestjs/swagger';
export class UpsertDeviceInfoDto { export class UpsertDeviceInfoDto {

View File

@ -1,4 +1,4 @@
import { DeviceInfoEntity, DeviceType } from '@app/database/entities/device-info.entity'; import { DeviceInfoEntity, DeviceType } from '@app/database';
import { ApiProperty } from '@nestjs/swagger'; import { ApiProperty } from '@nestjs/swagger';
export class DeviceInfoResponseDto { export class DeviceInfoResponseDto {

View File

@ -6,7 +6,7 @@ import { ImmichJwtModule } from '../../modules/immich-jwt/immich-jwt.module';
import { JwtModule } from '@nestjs/jwt'; import { JwtModule } from '@nestjs/jwt';
import { jwtConfig } from '../../config/jwt.config'; import { jwtConfig } from '../../config/jwt.config';
import { TypeOrmModule } from '@nestjs/typeorm'; import { TypeOrmModule } from '@nestjs/typeorm';
import { ExifEntity } from '@app/database/entities/exif.entity'; import { ExifEntity } from '@app/database';
import { TagModule } from '../tag/tag.module'; import { TagModule } from '../tag/tag.module';
import { AssetModule } from '../asset/asset.module'; import { AssetModule } from '../asset/asset.module';
import { UserModule } from '../user/user.module'; import { UserModule } from '../user/user.module';

View File

@ -14,8 +14,8 @@ import { Queue } from 'bull';
import { BadRequestException, Inject, Injectable } from '@nestjs/common'; import { BadRequestException, Inject, Injectable } from '@nestjs/common';
import { AllJobStatusResponseDto } from './response-dto/all-job-status-response.dto'; import { AllJobStatusResponseDto } from './response-dto/all-job-status-response.dto';
import { randomUUID } from 'crypto'; import { randomUUID } from 'crypto';
import { ASSET_REPOSITORY, IAssetRepository } from '../asset/asset-repository'; import { IAssetRepository } from '../asset/asset-repository';
import { AssetType } from '@app/database/entities/asset.entity'; import { AssetType } from '@app/database';
import { GetJobDto, JobId } from './dto/get-job.dto'; import { GetJobDto, JobId } from './dto/get-job.dto';
import { JobStatusResponseDto } from './response-dto/job-status-response.dto'; import { JobStatusResponseDto } from './response-dto/job-status-response.dto';
import { IMachineLearningJob } from '@app/job/interfaces/machine-learning.interface'; import { IMachineLearningJob } from '@app/job/interfaces/machine-learning.interface';
@ -39,7 +39,7 @@ export class JobService {
@InjectQueue(QueueNameEnum.STORAGE_MIGRATION) @InjectQueue(QueueNameEnum.STORAGE_MIGRATION)
private storageMigrationQueue: Queue, private storageMigrationQueue: Queue,
@Inject(ASSET_REPOSITORY) @Inject(IAssetRepository)
private _assetRepository: IAssetRepository, private _assetRepository: IAssetRepository,
private storageService: StorageService, private storageService: StorageService,

View File

@ -1,5 +1,4 @@
import { SystemConfig } from '@app/database/entities/system-config.entity'; import { SystemConfig, UserEntity } from '@app/database';
import { UserEntity } from '@app/database/entities/user.entity';
import { ImmichConfigService } from '@app/immich-config'; import { ImmichConfigService } from '@app/immich-config';
import { BadRequestException } from '@nestjs/common'; import { BadRequestException } from '@nestjs/common';
import { generators, Issuer } from 'openid-client'; import { generators, Issuer } from 'openid-client';

View File

@ -6,7 +6,7 @@ import { AuthUserDto } from '../../decorators/auth-user.decorator';
import { ImmichJwtService } from '../../modules/immich-jwt/immich-jwt.service'; import { ImmichJwtService } from '../../modules/immich-jwt/immich-jwt.service';
import { LoginResponseDto } from '../auth/response-dto/login-response.dto'; import { LoginResponseDto } from '../auth/response-dto/login-response.dto';
import { UserResponseDto } from '../user/response-dto/user-response.dto'; import { UserResponseDto } from '../user/response-dto/user-response.dto';
import { IUserRepository, USER_REPOSITORY } from '../user/user-repository'; import { IUserRepository } from '../user/user-repository';
import { UserCore } from '../user/user.core'; import { UserCore } from '../user/user.core';
import { OAuthCallbackDto } from './dto/oauth-auth-code.dto'; import { OAuthCallbackDto } from './dto/oauth-auth-code.dto';
import { OAuthConfigDto } from './dto/oauth-config.dto'; import { OAuthConfigDto } from './dto/oauth-config.dto';
@ -26,7 +26,7 @@ export class OAuthService {
constructor( constructor(
private immichJwtService: ImmichJwtService, private immichJwtService: ImmichJwtService,
immichConfigService: ImmichConfigService, immichConfigService: ImmichConfigService,
@Inject(USER_REPOSITORY) userRepository: IUserRepository, @Inject(IUserRepository) userRepository: IUserRepository,
@Inject(INITIAL_SYSTEM_CONFIG) private config: SystemConfig, @Inject(INITIAL_SYSTEM_CONFIG) private config: SystemConfig,
) { ) {
this.userCore = new UserCore(userRepository); this.userCore = new UserCore(userRepository);

View File

@ -1,10 +1,9 @@
import { Module } from '@nestjs/common'; import { Module } from '@nestjs/common';
import { ServerInfoService } from './server-info.service'; import { ServerInfoService } from './server-info.service';
import { ServerInfoController } from './server-info.controller'; import { ServerInfoController } from './server-info.controller';
import { AssetEntity } from '@app/database/entities/asset.entity'; import { AssetEntity, UserEntity } from '@app/database';
import { TypeOrmModule } from '@nestjs/typeorm'; import { TypeOrmModule } from '@nestjs/typeorm';
import { ImmichJwtModule } from '../../modules/immich-jwt/immich-jwt.module'; import { ImmichJwtModule } from '../../modules/immich-jwt/immich-jwt.module';
import { UserEntity } from '@app/database/entities/user.entity';
@Module({ @Module({
imports: [TypeOrmModule.forFeature([AssetEntity, UserEntity]), ImmichJwtModule], imports: [TypeOrmModule.forFeature([AssetEntity, UserEntity]), ImmichJwtModule],

View File

@ -4,7 +4,7 @@ import { ServerInfoResponseDto } from './response-dto/server-info-response.dto';
import diskusage from 'diskusage'; import diskusage from 'diskusage';
import { ServerStatsResponseDto } from './response-dto/server-stats-response.dto'; import { ServerStatsResponseDto } from './response-dto/server-stats-response.dto';
import { UsageByUserDto } from './response-dto/usage-by-user-response.dto'; import { UsageByUserDto } from './response-dto/usage-by-user-response.dto';
import { AssetEntity } from '@app/database/entities/asset.entity'; import { AssetEntity } from '@app/database';
import { Repository } from 'typeorm'; import { Repository } from 'typeorm';
import { InjectRepository } from '@nestjs/typeorm'; import { InjectRepository } from '@nestjs/typeorm';
import { asHumanReadable } from '../../utils/human-readable.util'; import { asHumanReadable } from '../../utils/human-readable.util';

View File

@ -1,4 +1,4 @@
import { SystemConfig } from '@app/database/entities/system-config.entity'; import { SystemConfig } from '@app/database';
import { ValidateNested } from 'class-validator'; import { ValidateNested } from 'class-validator';
import { SystemConfigFFmpegDto } from './system-config-ffmpeg.dto'; import { SystemConfigFFmpegDto } from './system-config-ffmpeg.dto';
import { SystemConfigOAuthDto } from './system-config-oauth.dto'; import { SystemConfigOAuthDto } from './system-config-oauth.dto';

View File

@ -1,4 +1,4 @@
import { SystemConfigEntity } from '@app/database/entities/system-config.entity'; import { SystemConfigEntity } from '@app/database';
import { immichSharedQueues } from '@app/job/constants/bull-queue-registration.constant'; import { immichSharedQueues } from '@app/job/constants/bull-queue-registration.constant';
import { BullModule } from '@nestjs/bull'; import { BullModule } from '@nestjs/bull';
import { Module } from '@nestjs/common'; import { Module } from '@nestjs/common';

View File

@ -1,4 +1,4 @@
import { TagType } from '@app/database/entities/tag.entity'; import { TagType } from '@app/database';
import { ApiProperty } from '@nestjs/swagger'; import { ApiProperty } from '@nestjs/swagger';
import { IsEnum, IsNotEmpty, IsString } from 'class-validator'; import { IsEnum, IsNotEmpty, IsString } from 'class-validator';

View File

@ -1,4 +1,4 @@
import { TagEntity, TagType } from '@app/database/entities/tag.entity'; import { TagEntity, TagType } from '@app/database';
import { ApiProperty } from '@nestjs/swagger'; import { ApiProperty } from '@nestjs/swagger';
export class TagResponseDto { export class TagResponseDto {

View File

@ -1,12 +1,12 @@
import { Module } from '@nestjs/common'; import { Module } from '@nestjs/common';
import { TagService } from './tag.service'; import { TagService } from './tag.service';
import { TagController } from './tag.controller'; import { TagController } from './tag.controller';
import { TagEntity } from '@app/database/entities/tag.entity'; import { TagEntity } from '@app/database';
import { TypeOrmModule } from '@nestjs/typeorm'; import { TypeOrmModule } from '@nestjs/typeorm';
import { TagRepository, TAG_REPOSITORY } from './tag.repository'; import { TagRepository, ITagRepository } from './tag.repository';
const TAG_REPOSITORY_PROVIDER = { const TAG_REPOSITORY_PROVIDER = {
provide: TAG_REPOSITORY, provide: ITagRepository,
useClass: TagRepository, useClass: TagRepository,
}; };
@Module({ @Module({

View File

@ -1,4 +1,4 @@
import { TagEntity, TagType } from '@app/database/entities/tag.entity'; import { TagEntity, TagType } from '@app/database';
import { Injectable } from '@nestjs/common'; import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm'; import { InjectRepository } from '@nestjs/typeorm';
import { In, Repository } from 'typeorm'; import { In, Repository } from 'typeorm';
@ -13,7 +13,7 @@ export interface ITagRepository {
remove(tag: TagEntity): Promise<TagEntity>; remove(tag: TagEntity): Promise<TagEntity>;
} }
export const TAG_REPOSITORY = 'TAG_REPOSITORY'; export const ITagRepository = 'ITagRepository';
@Injectable() @Injectable()
export class TagRepository implements ITagRepository { export class TagRepository implements ITagRepository {

View File

@ -1,5 +1,4 @@
import { TagEntity, TagType } from '@app/database/entities/tag.entity'; import { TagEntity, TagType, UserEntity } from '@app/database';
import { UserEntity } from '@app/database/entities/user.entity';
import { AuthUserDto } from '../../decorators/auth-user.decorator'; import { AuthUserDto } from '../../decorators/auth-user.decorator';
import { ITagRepository } from './tag.repository'; import { ITagRepository } from './tag.repository';
import { TagService } from './tag.service'; import { TagService } from './tag.service';

View File

@ -1,16 +1,16 @@
import { TagEntity } from '@app/database/entities/tag.entity'; import { TagEntity } from '@app/database';
import { BadRequestException, Inject, Injectable, Logger } from '@nestjs/common'; import { BadRequestException, Inject, Injectable, Logger } from '@nestjs/common';
import { AuthUserDto } from '../../decorators/auth-user.decorator'; import { AuthUserDto } from '../../decorators/auth-user.decorator';
import { CreateTagDto } from './dto/create-tag.dto'; import { CreateTagDto } from './dto/create-tag.dto';
import { UpdateTagDto } from './dto/update-tag.dto'; import { UpdateTagDto } from './dto/update-tag.dto';
import { ITagRepository, TAG_REPOSITORY } from './tag.repository'; import { ITagRepository } from './tag.repository';
import { mapTag, TagResponseDto } from "./response-dto/tag-response.dto"; import { mapTag, TagResponseDto } from './response-dto/tag-response.dto';
@Injectable() @Injectable()
export class TagService { export class TagService {
readonly logger = new Logger(TagService.name); readonly logger = new Logger(TagService.name);
constructor(@Inject(TAG_REPOSITORY) private _tagRepository: ITagRepository) {} constructor(@Inject(ITagRepository) private _tagRepository: ITagRepository) {}
async create(authUser: AuthUserDto, createTagDto: CreateTagDto) { async create(authUser: AuthUserDto, createTagDto: CreateTagDto) {
try { try {

View File

@ -1,4 +1,4 @@
import { UserEntity } from '@app/database/entities/user.entity'; import { UserEntity } from '@app/database';
export class UserResponseDto { export class UserResponseDto {
id!: string; id!: string;

View File

@ -1,4 +1,4 @@
import { UserEntity } from '@app/database/entities/user.entity'; import { UserEntity } from '@app/database';
import { InternalServerErrorException } from '@nestjs/common'; import { InternalServerErrorException } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm'; import { InjectRepository } from '@nestjs/typeorm';
import { Not, Repository } from 'typeorm'; import { Not, Repository } from 'typeorm';
@ -19,7 +19,7 @@ export interface UserListFilter {
excludeId?: string; excludeId?: string;
} }
export const USER_REPOSITORY = 'USER_REPOSITORY'; export const IUserRepository = 'IUserRepository';
export class UserRepository implements IUserRepository { export class UserRepository implements IUserRepository {
constructor( constructor(

View File

@ -1,4 +1,4 @@
import { UserEntity } from '@app/database/entities/user.entity'; import { UserEntity } from '@app/database';
import { import {
BadRequestException, BadRequestException,
ForbiddenException, ForbiddenException,

View File

@ -1,16 +1,16 @@
import { UserEntity } from '@app/database/entities/user.entity'; import { UserEntity } from '@app/database';
import { Module } from '@nestjs/common'; import { Module } from '@nestjs/common';
import { JwtModule } from '@nestjs/jwt'; import { JwtModule } from '@nestjs/jwt';
import { TypeOrmModule } from '@nestjs/typeorm'; import { TypeOrmModule } from '@nestjs/typeorm';
import { jwtConfig } from '../../config/jwt.config'; import { jwtConfig } from '../../config/jwt.config';
import { ImmichJwtModule } from '../../modules/immich-jwt/immich-jwt.module'; import { ImmichJwtModule } from '../../modules/immich-jwt/immich-jwt.module';
import { ImmichJwtService } from '../../modules/immich-jwt/immich-jwt.service'; import { ImmichJwtService } from '../../modules/immich-jwt/immich-jwt.service';
import { UserRepository, USER_REPOSITORY } from './user-repository'; import { UserRepository, IUserRepository } from './user-repository';
import { UserController } from './user.controller'; import { UserController } from './user.controller';
import { UserService } from './user.service'; import { UserService } from './user.service';
const USER_REPOSITORY_PROVIDER = { const USER_REPOSITORY_PROVIDER = {
provide: USER_REPOSITORY, provide: IUserRepository,
useClass: UserRepository, useClass: UserRepository,
}; };

View File

@ -1,4 +1,4 @@
import { UserEntity } from '@app/database/entities/user.entity'; import { UserEntity } from '@app/database';
import { BadRequestException, ForbiddenException, NotFoundException } from '@nestjs/common'; import { BadRequestException, ForbiddenException, NotFoundException } from '@nestjs/common';
import { newUserRepositoryMock } from '../../../test/test-utils'; import { newUserRepositoryMock } from '../../../test/test-utils';
import { AuthUserDto } from '../../decorators/auth-user.decorator'; import { AuthUserDto } from '../../decorators/auth-user.decorator';

View File

@ -10,16 +10,13 @@ import {
} from './response-dto/create-profile-image-response.dto'; } from './response-dto/create-profile-image-response.dto';
import { mapUserCountResponse, UserCountResponseDto } from './response-dto/user-count-response.dto'; import { mapUserCountResponse, UserCountResponseDto } from './response-dto/user-count-response.dto';
import { mapUser, UserResponseDto } from './response-dto/user-response.dto'; import { mapUser, UserResponseDto } from './response-dto/user-response.dto';
import { IUserRepository, USER_REPOSITORY } from './user-repository'; import { IUserRepository } from './user-repository';
import { UserCore } from './user.core'; import { UserCore } from './user.core';
@Injectable() @Injectable()
export class UserService { export class UserService {
private userCore: UserCore; private userCore: UserCore;
constructor( constructor(@Inject(IUserRepository) userRepository: IUserRepository) {
@Inject(USER_REPOSITORY)
userRepository: IUserRepository,
) {
this.userCore = new UserCore(userRepository); this.userCore = new UserCore(userRepository);
} }

View File

@ -1,5 +1,5 @@
import { createParamDecorator, ExecutionContext } from '@nestjs/common'; import { createParamDecorator, ExecutionContext } from '@nestjs/common';
import { UserEntity } from '@app/database/entities/user.entity'; import { UserEntity } from '@app/database';
// import { AuthUserDto } from './dto/auth-user.dto'; // import { AuthUserDto } from './dto/auth-user.dto';
export class AuthUserDto { export class AuthUserDto {

View File

@ -1,9 +1,7 @@
import { BullModule } from '@nestjs/bull'; import { BullModule } from '@nestjs/bull';
import { Module } from '@nestjs/common'; import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm'; import { TypeOrmModule } from '@nestjs/typeorm';
import { AssetEntity } from '@app/database/entities/asset.entity'; import { AssetEntity, ExifEntity, SmartInfoEntity } from '@app/database';
import { ExifEntity } from '@app/database/entities/exif.entity';
import { SmartInfoEntity } from '@app/database/entities/smart-info.entity';
import { BackgroundTaskProcessor } from './background-task.processor'; import { BackgroundTaskProcessor } from './background-task.processor';
import { BackgroundTaskService } from './background-task.service'; import { BackgroundTaskService } from './background-task.service';

View File

@ -1,8 +1,7 @@
import { Process, Processor } from '@nestjs/bull'; import { Process, Processor } from '@nestjs/bull';
import { InjectRepository } from '@nestjs/typeorm'; import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm'; import { Repository } from 'typeorm';
import { AssetEntity } from '@app/database/entities/asset.entity'; import { AssetEntity, SmartInfoEntity } from '@app/database';
import { SmartInfoEntity } from '@app/database/entities/smart-info.entity';
import { Job } from 'bull'; import { Job } from 'bull';
import { AssetResponseDto } from '../../api-v1/asset/response-dto/asset-response.dto'; import { AssetResponseDto } from '../../api-v1/asset/response-dto/asset-response.dto';
import { assetUtils } from '@app/common/utils'; import { assetUtils } from '@app/common/utils';

View File

@ -1,4 +1,4 @@
import { AssetEntity } from '@app/database/entities/asset.entity'; import { AssetEntity } from '@app/database';
import { BadRequestException, Injectable, InternalServerErrorException, Logger, StreamableFile } from '@nestjs/common'; import { BadRequestException, Injectable, InternalServerErrorException, Logger, StreamableFile } from '@nestjs/common';
import archiver from 'archiver'; import archiver from 'archiver';
import { extname } from 'path'; import { extname } from 'path';

View File

@ -4,7 +4,7 @@ import { JwtModule } from '@nestjs/jwt';
import { jwtConfig } from '../../config/jwt.config'; import { jwtConfig } from '../../config/jwt.config';
import { JwtStrategy } from './strategies/jwt.strategy'; import { JwtStrategy } from './strategies/jwt.strategy';
import { TypeOrmModule } from '@nestjs/typeorm'; import { TypeOrmModule } from '@nestjs/typeorm';
import { UserEntity } from '@app/database/entities/user.entity'; import { UserEntity } from '@app/database';
@Module({ @Module({
imports: [JwtModule.register(jwtConfig), TypeOrmModule.forFeature([UserEntity])], imports: [JwtModule.register(jwtConfig), TypeOrmModule.forFeature([UserEntity])],

View File

@ -1,4 +1,4 @@
import { UserEntity } from '@app/database/entities/user.entity'; import { UserEntity } from '@app/database';
import { Injectable, Logger } from '@nestjs/common'; import { Injectable, Logger } from '@nestjs/common';
import { JwtService } from '@nestjs/jwt'; import { JwtService } from '@nestjs/jwt';
import { Request } from 'express'; import { Request } from 'express';

View File

@ -4,7 +4,7 @@ import { InjectRepository } from '@nestjs/typeorm';
import { ExtractJwt, Strategy } from 'passport-jwt'; import { ExtractJwt, Strategy } from 'passport-jwt';
import { Repository } from 'typeorm'; import { Repository } from 'typeorm';
import { JwtPayloadDto } from '../../../api-v1/auth/dto/jwt-payload.dto'; import { JwtPayloadDto } from '../../../api-v1/auth/dto/jwt-payload.dto';
import { UserEntity } from '@app/database/entities/user.entity'; import { UserEntity } from '@app/database';
import { jwtSecret } from '../../../constants/jwt.constant'; import { jwtSecret } from '../../../constants/jwt.constant';
import { ImmichJwtService } from '../immich-jwt.service'; import { ImmichJwtService } from '../immich-jwt.service';

View File

@ -1,10 +1,8 @@
import { BullModule } from '@nestjs/bull'; import { BullModule } from '@nestjs/bull';
import { Module } from '@nestjs/common'; import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm'; import { TypeOrmModule } from '@nestjs/typeorm';
import { AssetEntity } from '@app/database/entities/asset.entity'; import { AssetEntity, ExifEntity, UserEntity } from '@app/database';
import { ScheduleTasksService } from './schedule-tasks.service'; import { ScheduleTasksService } from './schedule-tasks.service';
import { ExifEntity } from '@app/database/entities/exif.entity';
import { UserEntity } from '@app/database/entities/user.entity';
import { immichSharedQueues } from '@app/job/constants/bull-queue-registration.constant'; import { immichSharedQueues } from '@app/job/constants/bull-queue-registration.constant';
@Module({ @Module({

View File

@ -2,11 +2,10 @@ import { Injectable, Logger } from '@nestjs/common';
import { Cron, CronExpression } from '@nestjs/schedule'; import { Cron, CronExpression } from '@nestjs/schedule';
import { InjectRepository } from '@nestjs/typeorm'; import { InjectRepository } from '@nestjs/typeorm';
import { IsNull, Not, Repository } from 'typeorm'; import { IsNull, Not, Repository } from 'typeorm';
import { AssetEntity, AssetType } from '@app/database/entities/asset.entity'; import { AssetEntity, AssetType, ExifEntity, UserEntity } from '@app/database';
import { InjectQueue } from '@nestjs/bull'; import { InjectQueue } from '@nestjs/bull';
import { Queue } from 'bull'; import { Queue } from 'bull';
import { randomUUID } from 'crypto'; import { randomUUID } from 'crypto';
import { ExifEntity } from '@app/database/entities/exif.entity';
import { import {
userDeletionProcessorName, userDeletionProcessorName,
exifExtractionProcessorName, exifExtractionProcessorName,
@ -19,7 +18,6 @@ import {
videoMetadataExtractionProcessorName, videoMetadataExtractionProcessorName,
} from '@app/job'; } from '@app/job';
import { ConfigService } from '@nestjs/config'; import { ConfigService } from '@nestjs/config';
import { UserEntity } from '@app/database/entities/user.entity';
import { IUserDeletionJob } from '@app/job/interfaces/user-deletion.interface'; import { IUserDeletionJob } from '@app/job/interfaces/user-deletion.interface';
import { userUtils } from '@app/common'; import { userUtils } from '@app/common';

View File

@ -3,7 +3,7 @@ import { INestApplication } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm'; import { TypeOrmModule } from '@nestjs/typeorm';
import request from 'supertest'; import request from 'supertest';
import { clearDb, getAuthUser, authCustom } from './test-utils'; import { clearDb, getAuthUser, authCustom } from './test-utils';
import { databaseConfig } from '@app/database/config/database.config'; import { databaseConfig } from '@app/database';
import { AlbumModule } from '../src/api-v1/album/album.module'; import { AlbumModule } from '../src/api-v1/album/album.module';
import { CreateAlbumDto } from '../src/api-v1/album/dto/create-album.dto'; import { CreateAlbumDto } from '../src/api-v1/album/dto/create-album.dto';
import { ImmichJwtModule } from '../src/modules/immich-jwt/immich-jwt.module'; import { ImmichJwtModule } from '../src/modules/immich-jwt/immich-jwt.module';

View File

@ -1,9 +1,5 @@
import { immichAppConfig, immichBullAsyncConfig } from '@app/common/config'; import { immichAppConfig, immichBullAsyncConfig } from '@app/common/config';
import { DatabaseModule } from '@app/database'; import { DatabaseModule, AssetEntity, ExifEntity, SmartInfoEntity, UserEntity } from '@app/database';
import { AssetEntity } from '@app/database/entities/asset.entity';
import { ExifEntity } from '@app/database/entities/exif.entity';
import { SmartInfoEntity } from '@app/database/entities/smart-info.entity';
import { UserEntity } from '@app/database/entities/user.entity';
import { StorageModule } from '@app/storage'; import { StorageModule } from '@app/storage';
import { BullModule } from '@nestjs/bull'; import { BullModule } from '@nestjs/bull';
import { Module } from '@nestjs/common'; import { Module } from '@nestjs/common';

View File

@ -1,4 +1,4 @@
import { AssetType } from '@app/database/entities/asset.entity'; import { AssetType } from '@app/database';
import { import {
IAssetUploadedJob, IAssetUploadedJob,
IMetadataExtractionJob, IMetadataExtractionJob,

View File

@ -1,4 +1,4 @@
import { AssetEntity } from '@app/database/entities/asset.entity'; import { AssetEntity } from '@app/database';
import { QueueNameEnum } from '@app/job'; import { QueueNameEnum } from '@app/job';
import { Process, Processor } from '@nestjs/bull'; import { Process, Processor } from '@nestjs/bull';
import { Logger } from '@nestjs/common'; import { Logger } from '@nestjs/common';

View File

@ -1,5 +1,5 @@
import { AssetEntity } from '@app/database/entities/asset.entity'; import { AssetEntity } from '@app/database';
import { SmartInfoEntity } from '@app/database/entities/smart-info.entity'; import { SmartInfoEntity } from '@app/database';
import { MachineLearningJobNameEnum, QueueNameEnum } from '@app/job'; import { MachineLearningJobNameEnum, QueueNameEnum } from '@app/job';
import { IMachineLearningJob } from '@app/job/interfaces/machine-learning.interface'; import { IMachineLearningJob } from '@app/job/interfaces/machine-learning.interface';
import { Process, Processor } from '@nestjs/bull'; import { Process, Processor } from '@nestjs/bull';
@ -22,12 +22,9 @@ export class MachineLearningProcessor {
async tagImage(job: Job<IMachineLearningJob>) { async tagImage(job: Job<IMachineLearningJob>) {
const { asset } = job.data; const { asset } = job.data;
const res = await axios.post( const res = await axios.post(immich_machine_learning_url + '/image-classifier/tag-image', {
immich_machine_learning_url + '/image-classifier/tag-image',
{
thumbnailPath: asset.resizePath, thumbnailPath: asset.resizePath,
}, });
);
if (res.status == 201 && res.data.length > 0) { if (res.status == 201 && res.data.length > 0) {
const smartInfo = new SmartInfoEntity(); const smartInfo = new SmartInfoEntity();
@ -45,12 +42,9 @@ export class MachineLearningProcessor {
try { try {
const { asset }: { asset: AssetEntity } = job.data; const { asset }: { asset: AssetEntity } = job.data;
const res = await axios.post( const res = await axios.post(immich_machine_learning_url + '/object-detection/detect-object', {
immich_machine_learning_url + '/object-detection/detect-object',
{
thumbnailPath: asset.resizePath, thumbnailPath: asset.resizePath,
}, });
);
if (res.status == 201 && res.data.length > 0) { if (res.status == 201 && res.data.length > 0) {
const smartInfo = new SmartInfoEntity(); const smartInfo = new SmartInfoEntity();

View File

@ -1,6 +1,5 @@
import { ImmichLogLevel } from '@app/common/constants/log-level.constant'; import { ImmichLogLevel } from '@app/common/constants/log-level.constant';
import { AssetEntity } from '@app/database/entities/asset.entity'; import { AssetEntity, ExifEntity } from '@app/database';
import { ExifEntity } from '@app/database/entities/exif.entity';
import { import {
IExifExtractionProcessor, IExifExtractionProcessor,
IVideoLengthExtractionProcessor, IVideoLengthExtractionProcessor,

View File

@ -1,5 +1,5 @@
import { APP_UPLOAD_LOCATION } from '@app/common'; import { APP_UPLOAD_LOCATION } from '@app/common';
import { AssetEntity } from '@app/database/entities/asset.entity'; import { AssetEntity } from '@app/database';
import { ImmichConfigService } from '@app/immich-config'; import { ImmichConfigService } from '@app/immich-config';
import { QueueNameEnum, templateMigrationProcessorName, updateTemplateProcessorName } from '@app/job'; import { QueueNameEnum, templateMigrationProcessorName, updateTemplateProcessorName } from '@app/job';
import { StorageService } from '@app/storage'; import { StorageService } from '@app/storage';

View File

@ -1,5 +1,5 @@
import { APP_UPLOAD_LOCATION } from '@app/common'; import { APP_UPLOAD_LOCATION } from '@app/common';
import { AssetEntity, AssetType } from '@app/database/entities/asset.entity'; import { AssetEntity, AssetType } from '@app/database';
import { import {
WebpGeneratorProcessor, WebpGeneratorProcessor,
generateJPEGThumbnailProcessorName, generateJPEGThumbnailProcessorName,

View File

@ -1,6 +1,5 @@
import { APP_UPLOAD_LOCATION, userUtils } from '@app/common'; import { APP_UPLOAD_LOCATION, userUtils } from '@app/common';
import { AssetEntity } from '@app/database/entities/asset.entity'; import { AssetEntity, UserEntity } from '@app/database';
import { UserEntity } from '@app/database/entities/user.entity';
import { QueueNameEnum, userDeletionProcessorName } from '@app/job'; import { QueueNameEnum, userDeletionProcessorName } from '@app/job';
import { IUserDeletionJob } from '@app/job/interfaces/user-deletion.interface'; import { IUserDeletionJob } from '@app/job/interfaces/user-deletion.interface';
import { Process, Processor } from '@nestjs/bull'; import { Process, Processor } from '@nestjs/bull';

View File

@ -1,5 +1,5 @@
import { APP_UPLOAD_LOCATION } from '@app/common/constants'; import { APP_UPLOAD_LOCATION } from '@app/common/constants';
import { AssetEntity } from '@app/database/entities/asset.entity'; import { AssetEntity } from '@app/database';
import { QueueNameEnum } from '@app/job'; import { QueueNameEnum } from '@app/job';
import { mp4ConversionProcessorName } from '@app/job/constants/job-name.constant'; import { mp4ConversionProcessorName } from '@app/job/constants/job-name.constant';
import { IMp4ConversionProcessor } from '@app/job/interfaces/video-transcode.interface'; import { IMp4ConversionProcessor } from '@app/job/interfaces/video-transcode.interface';

View File

@ -1,4 +1,4 @@
import { AssetEntity } from '@app/database/entities/asset.entity'; import { AssetEntity } from '@app/database';
import { AssetResponseDto } from 'apps/immich/src/api-v1/asset/response-dto/asset-response.dto'; import { AssetResponseDto } from 'apps/immich/src/api-v1/asset/response-dto/asset-response.dto';
import fs from 'fs'; import fs from 'fs';

View File

@ -1,6 +1,6 @@
// create unit test for user utils // create unit test for user utils
import { UserEntity } from '@app/database/entities/user.entity'; import { UserEntity } from '@app/database';
import { userUtils } from './user-utils'; import { userUtils } from './user-utils';
describe('User Utilities', () => { describe('User Utilities', () => {

View File

@ -1,4 +1,4 @@
import { UserEntity } from '@app/database/entities/user.entity'; import { UserEntity } from '@app/database';
function createUserUtils() { function createUserUtils() {
const isReadyForDeletion = (user: UserEntity): boolean => { const isReadyForDeletion = (user: UserEntity): boolean => {

View File

@ -0,0 +1 @@
export * from './database.config';

View File

@ -0,0 +1,10 @@
export * from './album.entity';
export * from './asset-album.entity';
export * from './asset.entity';
export * from './device-info.entity';
export * from './exif.entity';
export * from './smart-info.entity';
export * from './system-config.entity';
export * from './tag.entity';
export * from './user-album.entity';
export * from './user.entity';

View File

@ -1 +1,3 @@
export * from './config';
export * from './database.module'; export * from './database.module';
export * from './entities';

View File

@ -1,4 +1,4 @@
import { SystemConfigEntity } from '@app/database/entities/system-config.entity'; import { SystemConfigEntity } from '@app/database';
import { Module, Provider } from '@nestjs/common'; import { Module, Provider } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm'; import { TypeOrmModule } from '@nestjs/typeorm';
import { ImmichConfigService } from './immich-config.service'; import { ImmichConfigService } from './immich-config.service';

View File

@ -1,4 +1,4 @@
import { SystemConfig, SystemConfigEntity, SystemConfigKey } from '@app/database/entities/system-config.entity'; import { SystemConfig, SystemConfigEntity, SystemConfigKey } from '@app/database';
import { BadRequestException, Injectable, Logger } from '@nestjs/common'; import { BadRequestException, Injectable, Logger } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm'; import { InjectRepository } from '@nestjs/typeorm';
import * as _ from 'lodash'; import * as _ from 'lodash';

View File

@ -1,4 +1,4 @@
import { AssetEntity } from '@app/database/entities/asset.entity'; import { AssetEntity } from '@app/database';
export interface IAssetUploadedJob { export interface IAssetUploadedJob {
/** /**

View File

@ -1,4 +1,4 @@
import { AssetEntity } from '@app/database/entities/asset.entity'; import { AssetEntity } from '@app/database';
export interface IMachineLearningJob { export interface IMachineLearningJob {
/** /**

View File

@ -1,4 +1,4 @@
import { AssetEntity } from '@app/database/entities/asset.entity'; import { AssetEntity } from '@app/database';
export interface IExifExtractionProcessor { export interface IExifExtractionProcessor {
/** /**

View File

@ -1,4 +1,4 @@
import { AssetEntity } from '@app/database/entities/asset.entity'; import { AssetEntity } from '@app/database';
export interface JpegGeneratorProcessor { export interface JpegGeneratorProcessor {
/** /**

View File

@ -1,4 +1,4 @@
import { UserEntity } from '@app/database/entities/user.entity'; import { UserEntity } from '@app/database';
export interface IUserDeletionJob { export interface IUserDeletionJob {
/** /**

View File

@ -1,4 +1,4 @@
import { AssetEntity } from '@app/database/entities/asset.entity'; import { AssetEntity } from '@app/database';
export interface IMp4ConversionProcessor { export interface IMp4ConversionProcessor {
/** /**

View File

@ -1,5 +1,4 @@
import { AssetEntity } from '@app/database/entities/asset.entity'; import { AssetEntity, SystemConfigEntity } from '@app/database';
import { SystemConfigEntity } from '@app/database/entities/system-config.entity';
import { ImmichConfigModule } from '@app/immich-config'; import { ImmichConfigModule } from '@app/immich-config';
import { Module } from '@nestjs/common'; import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm'; import { TypeOrmModule } from '@nestjs/typeorm';

View File

@ -1,6 +1,5 @@
import { APP_UPLOAD_LOCATION } from '@app/common'; import { APP_UPLOAD_LOCATION } from '@app/common';
import { AssetEntity } from '@app/database/entities/asset.entity'; import { AssetEntity, SystemConfig } from '@app/database';
import { SystemConfig } from '@app/database/entities/system-config.entity';
import { ImmichConfigService, INITIAL_SYSTEM_CONFIG } from '@app/immich-config'; import { ImmichConfigService, INITIAL_SYSTEM_CONFIG } from '@app/immich-config';
import { Inject, Injectable, Logger } from '@nestjs/common'; import { Inject, Injectable, Logger } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm'; import { InjectRepository } from '@nestjs/typeorm';