Browse Source

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
Jason Rasmussen 2 năm trước cách đây
mục cha
commit
d9fa6619e7
81 tập tin đã thay đổi với 130 bổ sung151 xóa
  1. 1 2
      server/apps/cli/src/app.module.ts
  2. 1 1
      server/apps/cli/src/commands/reset-admin-password.command.ts
  3. 2 4
      server/apps/immich/src/api-v1/album/album-repository.ts
  4. 3 5
      server/apps/immich/src/api-v1/album/album.module.ts
  5. 1 1
      server/apps/immich/src/api-v1/album/album.service.spec.ts
  6. 5 5
      server/apps/immich/src/api-v1/album/album.service.ts
  7. 1 1
      server/apps/immich/src/api-v1/album/response-dto/album-response.dto.ts
  8. 4 4
      server/apps/immich/src/api-v1/asset/asset-repository.ts
  9. 3 3
      server/apps/immich/src/api-v1/asset/asset.module.ts
  10. 1 1
      server/apps/immich/src/api-v1/asset/asset.service.spec.ts
  11. 5 7
      server/apps/immich/src/api-v1/asset/asset.service.ts
  12. 1 1
      server/apps/immich/src/api-v1/asset/dto/create-asset.dto.ts
  13. 1 1
      server/apps/immich/src/api-v1/asset/response-dto/asset-response.dto.ts
  14. 1 1
      server/apps/immich/src/api-v1/asset/response-dto/exif-response.dto.ts
  15. 1 1
      server/apps/immich/src/api-v1/asset/response-dto/smart-info-response.dto.ts
  16. 1 1
      server/apps/immich/src/api-v1/auth/auth.service.spec.ts
  17. 3 3
      server/apps/immich/src/api-v1/auth/auth.service.ts
  18. 1 1
      server/apps/immich/src/api-v1/auth/response-dto/admin-signup-response.dto.ts
  19. 1 1
      server/apps/immich/src/api-v1/auth/response-dto/login-response.dto.ts
  20. 1 1
      server/apps/immich/src/api-v1/communication/communication.gateway.ts
  21. 1 1
      server/apps/immich/src/api-v1/communication/communication.module.ts
  22. 1 1
      server/apps/immich/src/api-v1/device-info/device-info.module.ts
  23. 1 1
      server/apps/immich/src/api-v1/device-info/device-info.service.spec.ts
  24. 1 1
      server/apps/immich/src/api-v1/device-info/device-info.service.ts
  25. 1 1
      server/apps/immich/src/api-v1/device-info/dto/upsert-device-info.dto.ts
  26. 1 1
      server/apps/immich/src/api-v1/device-info/response-dto/device-info-response.dto.ts
  27. 1 1
      server/apps/immich/src/api-v1/job/job.module.ts
  28. 3 3
      server/apps/immich/src/api-v1/job/job.service.ts
  29. 1 2
      server/apps/immich/src/api-v1/oauth/oauth.service.spec.ts
  30. 2 2
      server/apps/immich/src/api-v1/oauth/oauth.service.ts
  31. 1 2
      server/apps/immich/src/api-v1/server-info/server-info.module.ts
  32. 1 1
      server/apps/immich/src/api-v1/server-info/server-info.service.ts
  33. 1 1
      server/apps/immich/src/api-v1/system-config/dto/system-config.dto.ts
  34. 1 1
      server/apps/immich/src/api-v1/system-config/system-config.module.ts
  35. 1 1
      server/apps/immich/src/api-v1/tag/dto/create-tag.dto.ts
  36. 1 1
      server/apps/immich/src/api-v1/tag/response-dto/tag-response.dto.ts
  37. 3 3
      server/apps/immich/src/api-v1/tag/tag.module.ts
  38. 2 2
      server/apps/immich/src/api-v1/tag/tag.repository.ts
  39. 1 2
      server/apps/immich/src/api-v1/tag/tag.service.spec.ts
  40. 5 5
      server/apps/immich/src/api-v1/tag/tag.service.ts
  41. 1 1
      server/apps/immich/src/api-v1/user/response-dto/user-response.dto.ts
  42. 2 2
      server/apps/immich/src/api-v1/user/user-repository.ts
  43. 1 1
      server/apps/immich/src/api-v1/user/user.core.ts
  44. 3 3
      server/apps/immich/src/api-v1/user/user.module.ts
  45. 1 1
      server/apps/immich/src/api-v1/user/user.service.spec.ts
  46. 2 5
      server/apps/immich/src/api-v1/user/user.service.ts
  47. 1 1
      server/apps/immich/src/decorators/auth-user.decorator.ts
  48. 1 3
      server/apps/immich/src/modules/background-task/background-task.module.ts
  49. 1 2
      server/apps/immich/src/modules/background-task/background-task.processor.ts
  50. 1 1
      server/apps/immich/src/modules/download/download.service.ts
  51. 1 1
      server/apps/immich/src/modules/immich-jwt/immich-jwt.module.ts
  52. 1 1
      server/apps/immich/src/modules/immich-jwt/immich-jwt.service.ts
  53. 1 1
      server/apps/immich/src/modules/immich-jwt/strategies/jwt.strategy.ts
  54. 1 3
      server/apps/immich/src/modules/schedule-tasks/schedule-tasks.module.ts
  55. 1 3
      server/apps/immich/src/modules/schedule-tasks/schedule-tasks.service.ts
  56. 1 1
      server/apps/immich/test/album.e2e-spec.ts
  57. 1 5
      server/apps/microservices/src/microservices.module.ts
  58. 1 1
      server/apps/microservices/src/processors/asset-uploaded.processor.ts
  59. 1 1
      server/apps/microservices/src/processors/generate-checksum.processor.ts
  60. 8 14
      server/apps/microservices/src/processors/machine-learning.processor.ts
  61. 1 2
      server/apps/microservices/src/processors/metadata-extraction.processor.ts
  62. 1 1
      server/apps/microservices/src/processors/storage-migration.processor.ts
  63. 1 1
      server/apps/microservices/src/processors/thumbnail.processor.ts
  64. 1 2
      server/apps/microservices/src/processors/user-deletion.processor.ts
  65. 1 1
      server/apps/microservices/src/processors/video-transcode.processor.ts
  66. 1 1
      server/libs/common/src/utils/asset-utils.ts
  67. 1 1
      server/libs/common/src/utils/user-utils.spec.ts
  68. 1 1
      server/libs/common/src/utils/user-utils.ts
  69. 1 0
      server/libs/database/src/config/index.ts
  70. 10 0
      server/libs/database/src/entities/index.ts
  71. 2 0
      server/libs/database/src/index.ts
  72. 1 1
      server/libs/immich-config/src/immich-config.module.ts
  73. 1 1
      server/libs/immich-config/src/immich-config.service.ts
  74. 1 1
      server/libs/job/src/interfaces/asset-uploaded.interface.ts
  75. 1 1
      server/libs/job/src/interfaces/machine-learning.interface.ts
  76. 1 1
      server/libs/job/src/interfaces/metadata-extraction.interface.ts
  77. 1 1
      server/libs/job/src/interfaces/thumbnail-generation.interface.ts
  78. 1 1
      server/libs/job/src/interfaces/user-deletion.interface.ts
  79. 1 1
      server/libs/job/src/interfaces/video-transcode.interface.ts
  80. 1 2
      server/libs/storage/src/storage.module.ts
  81. 1 2
      server/libs/storage/src/storage.service.ts

+ 1 - 2
server/apps/cli/src/app.module.ts

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

+ 1 - 1
server/apps/cli/src/commands/reset-admin-password.command.ts

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

+ 2 - 4
server/apps/immich/src/api-v1/album/album-repository.ts

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

+ 3 - 5
server/apps/immich/src/api-v1/album/album.module.ts

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

+ 1 - 1
server/apps/immich/src/api-v1/album/album.service.spec.ts

@@ -1,7 +1,7 @@
 import { AlbumService } from './album.service';
 import { AuthUserDto } from '../../decorators/auth-user.decorator';
 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 { IAssetRepository } from '../asset/asset-repository';
 import { AddAssetsResponseDto } from './response-dto/add-assets-response.dto';

+ 5 - 5
server/apps/immich/src/api-v1/album/album.service.ts

@@ -1,15 +1,15 @@
 import { BadRequestException, Inject, Injectable, NotFoundException, ForbiddenException } from '@nestjs/common';
 import { AuthUserDto } from '../../decorators/auth-user.decorator';
 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 { RemoveAssetsDto } from './dto/remove-assets.dto';
 import { UpdateAlbumDto } from './dto/update-album.dto';
 import { GetAlbumsDto } from './dto/get-albums.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 { ASSET_REPOSITORY, IAssetRepository } from '../asset/asset-repository';
+import { IAssetRepository } from '../asset/asset-repository';
 import { AddAssetsResponseDto } from './response-dto/add-assets-response.dto';
 import { AddAssetsDto } from './dto/add-assets.dto';
 import { DownloadService } from '../../modules/download/download.service';
@@ -18,8 +18,8 @@ import { DownloadDto } from '../asset/dto/download-library.dto';
 @Injectable()
 export class AlbumService {
   constructor(
-    @Inject(ALBUM_REPOSITORY) private _albumRepository: IAlbumRepository,
-    @Inject(ASSET_REPOSITORY) private _assetRepository: IAssetRepository,
+    @Inject(IAlbumRepository) private _albumRepository: IAlbumRepository,
+    @Inject(IAssetRepository) private _assetRepository: IAssetRepository,
     private downloadService: DownloadService,
   ) {}
 

+ 1 - 1
server/apps/immich/src/api-v1/album/response-dto/album-response.dto.ts

@@ -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 { AssetResponseDto, mapAsset } from '../../asset/response-dto/asset-response.dto';
 import { ApiProperty } from '@nestjs/swagger';

+ 4 - 4
server/apps/immich/src/api-v1/asset/asset-repository.ts

@@ -1,6 +1,6 @@
 import { SearchPropertiesDto } from './dto/search-properties.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 { InjectRepository } from '@nestjs/typeorm';
 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 { In } from 'typeorm/find-options/operator/In';
 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';
 
 export interface IAssetRepository {
@@ -48,7 +48,7 @@ export interface IAssetRepository {
   countByIdAndUser(assetId: string, userId: string): Promise<number>;
 }
 
-export const ASSET_REPOSITORY = 'ASSET_REPOSITORY';
+export const IAssetRepository = 'IAssetRepository';
 
 @Injectable()
 export class AssetRepository implements IAssetRepository {
@@ -56,7 +56,7 @@ export class AssetRepository implements IAssetRepository {
     @InjectRepository(AssetEntity)
     private assetRepository: Repository<AssetEntity>,
 
-    @Inject(TAG_REPOSITORY) private _tagRepository: ITagRepository,
+    @Inject(ITagRepository) private _tagRepository: ITagRepository,
   ) {}
 
   async getAssetWithNoSmartInfo(): Promise<AssetEntity[]> {

+ 3 - 3
server/apps/immich/src/api-v1/asset/asset.module.ts

@@ -2,12 +2,12 @@ import { forwardRef, Module } from '@nestjs/common';
 import { AssetService } from './asset.service';
 import { AssetController } from './asset.controller';
 import { TypeOrmModule } from '@nestjs/typeorm';
-import { AssetEntity } from '@app/database/entities/asset.entity';
+import { AssetEntity } from '@app/database';
 import { BullModule } from '@nestjs/bull';
 import { BackgroundTaskModule } from '../../modules/background-task/background-task.module';
 import { BackgroundTaskService } from '../../modules/background-task/background-task.service';
 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 { TagModule } from '../tag/tag.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';
 
 const ASSET_REPOSITORY_PROVIDER = {
-  provide: ASSET_REPOSITORY,
+  provide: IAssetRepository,
   useClass: AssetRepository,
 };
 

+ 1 - 1
server/apps/immich/src/api-v1/asset/asset.service.spec.ts

@@ -2,7 +2,7 @@ import { IAssetRepository } from './asset-repository';
 import { AuthUserDto } from '../../decorators/auth-user.decorator';
 import { AssetService } from './asset.service';
 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 { AssetCountByTimeBucket } from './response-dto/asset-count-by-time-group-response.dto';
 import { TimeGroupEnum } from './dto/get-asset-count-by-time-bucket.dto';

+ 5 - 7
server/apps/immich/src/api-v1/asset/asset.service.ts

@@ -13,7 +13,7 @@ import { InjectRepository } from '@nestjs/typeorm';
 import { createHash, randomUUID } from 'node:crypto';
 import { QueryFailedError, Repository } from 'typeorm';
 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 { ServeFileDto } from './dto/serve-file.dto';
 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 { GetAssetThumbnailDto, GetAssetThumbnailFormatEnum } from './dto/get-asset-thumbnail.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 {
   AssetCountByTimeBucketResponseDto,
@@ -54,7 +54,7 @@ import { InjectQueue } from '@nestjs/bull';
 import { Queue } from 'bull';
 import { DownloadService } from '../../modules/download/download.service';
 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';
 
 const fileInfo = promisify(stat);
@@ -62,11 +62,9 @@ const fileInfo = promisify(stat);
 @Injectable()
 export class AssetService {
   constructor(
-    @Inject(ASSET_REPOSITORY)
-    private _assetRepository: IAssetRepository,
+    @Inject(IAssetRepository) private _assetRepository: IAssetRepository,
 
-    @Inject(ALBUM_REPOSITORY)
-    private _albumRepository: IAlbumRepository,
+    @Inject(IAlbumRepository) private _albumRepository: IAlbumRepository,
 
     @InjectRepository(AssetEntity)
     private assetRepository: Repository<AssetEntity>,

+ 1 - 1
server/apps/immich/src/api-v1/asset/dto/create-asset.dto.ts

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

+ 1 - 1
server/apps/immich/src/api-v1/asset/response-dto/asset-response.dto.ts

@@ -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 { mapTag, TagResponseDto } from '../../tag/response-dto/tag-response.dto';
 import { ExifResponseDto, mapExif } from './exif-response.dto';

+ 1 - 1
server/apps/immich/src/api-v1/asset/response-dto/exif-response.dto.ts

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

+ 1 - 1
server/apps/immich/src/api-v1/asset/response-dto/smart-info-response.dto.ts

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

+ 1 - 1
server/apps/immich/src/api-v1/auth/auth.service.spec.ts

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

+ 3 - 3
server/apps/immich/src/api-v1/auth/auth.service.ts

@@ -7,11 +7,11 @@ import {
   UnauthorizedException,
 } from '@nestjs/common';
 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 { AuthUserDto } from '../../decorators/auth-user.decorator';
 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 { LoginCredentialDto } from './dto/login-credential.dto';
 import { SignUpDto } from './dto/sign-up.dto';
@@ -29,7 +29,7 @@ export class AuthService {
   constructor(
     private oauthService: OAuthService,
     private immichJwtService: ImmichJwtService,
-    @Inject(USER_REPOSITORY) userRepository: IUserRepository,
+    @Inject(IUserRepository) userRepository: IUserRepository,
   ) {
     this.userCore = new UserCore(userRepository);
   }

+ 1 - 1
server/apps/immich/src/api-v1/auth/response-dto/admin-signup-response.dto.ts

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

+ 1 - 1
server/apps/immich/src/api-v1/auth/response-dto/login-response.dto.ts

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

+ 1 - 1
server/apps/immich/src/api-v1/communication/communication.gateway.ts

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

+ 1 - 1
server/apps/immich/src/api-v1/communication/communication.module.ts

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

+ 1 - 1
server/apps/immich/src/api-v1/device-info/device-info.module.ts

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

+ 1 - 1
server/apps/immich/src/api-v1/device-info/device-info.service.spec.ts

@@ -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 { DeviceInfoService } from './device-info.service';
 

+ 1 - 1
server/apps/immich/src/api-v1/device-info/device-info.service.ts

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

+ 1 - 1
server/apps/immich/src/api-v1/device-info/dto/upsert-device-info.dto.ts

@@ -1,5 +1,5 @@
 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';
 
 export class UpsertDeviceInfoDto {

+ 1 - 1
server/apps/immich/src/api-v1/device-info/response-dto/device-info-response.dto.ts

@@ -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';
 
 export class DeviceInfoResponseDto {

+ 1 - 1
server/apps/immich/src/api-v1/job/job.module.ts

@@ -6,7 +6,7 @@ import { ImmichJwtModule } from '../../modules/immich-jwt/immich-jwt.module';
 import { JwtModule } from '@nestjs/jwt';
 import { jwtConfig } from '../../config/jwt.config';
 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 { AssetModule } from '../asset/asset.module';
 import { UserModule } from '../user/user.module';

+ 3 - 3
server/apps/immich/src/api-v1/job/job.service.ts

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

+ 1 - 2
server/apps/immich/src/api-v1/oauth/oauth.service.spec.ts

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

+ 2 - 2
server/apps/immich/src/api-v1/oauth/oauth.service.ts

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

+ 1 - 2
server/apps/immich/src/api-v1/server-info/server-info.module.ts

@@ -1,10 +1,9 @@
 import { Module } from '@nestjs/common';
 import { ServerInfoService } from './server-info.service';
 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 { ImmichJwtModule } from '../../modules/immich-jwt/immich-jwt.module';
-import { UserEntity } from '@app/database/entities/user.entity';
 
 @Module({
   imports: [TypeOrmModule.forFeature([AssetEntity, UserEntity]), ImmichJwtModule],

+ 1 - 1
server/apps/immich/src/api-v1/server-info/server-info.service.ts

@@ -4,7 +4,7 @@ import { ServerInfoResponseDto } from './response-dto/server-info-response.dto';
 import diskusage from 'diskusage';
 import { ServerStatsResponseDto } from './response-dto/server-stats-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 { InjectRepository } from '@nestjs/typeorm';
 import { asHumanReadable } from '../../utils/human-readable.util';

+ 1 - 1
server/apps/immich/src/api-v1/system-config/dto/system-config.dto.ts

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

+ 1 - 1
server/apps/immich/src/api-v1/system-config/system-config.module.ts

@@ -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 { BullModule } from '@nestjs/bull';
 import { Module } from '@nestjs/common';

+ 1 - 1
server/apps/immich/src/api-v1/tag/dto/create-tag.dto.ts

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

+ 1 - 1
server/apps/immich/src/api-v1/tag/response-dto/tag-response.dto.ts

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

+ 3 - 3
server/apps/immich/src/api-v1/tag/tag.module.ts

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

+ 2 - 2
server/apps/immich/src/api-v1/tag/tag.repository.ts

@@ -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 { InjectRepository } from '@nestjs/typeorm';
 import { In, Repository } from 'typeorm';
@@ -13,7 +13,7 @@ export interface ITagRepository {
   remove(tag: TagEntity): Promise<TagEntity>;
 }
 
-export const TAG_REPOSITORY = 'TAG_REPOSITORY';
+export const ITagRepository = 'ITagRepository';
 
 @Injectable()
 export class TagRepository implements ITagRepository {

+ 1 - 2
server/apps/immich/src/api-v1/tag/tag.service.spec.ts

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

+ 5 - 5
server/apps/immich/src/api-v1/tag/tag.service.ts

@@ -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 { AuthUserDto } from '../../decorators/auth-user.decorator';
 import { CreateTagDto } from './dto/create-tag.dto';
 import { UpdateTagDto } from './dto/update-tag.dto';
-import { ITagRepository, TAG_REPOSITORY } from './tag.repository';
-import { mapTag, TagResponseDto } from "./response-dto/tag-response.dto";
+import { ITagRepository } from './tag.repository';
+import { mapTag, TagResponseDto } from './response-dto/tag-response.dto';
 
 @Injectable()
 export class TagService {
   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) {
     try {
@@ -37,7 +37,7 @@ export class TagService {
     return tag;
   }
 
-  async update(authUser: AuthUserDto, id: string, updateTagDto: UpdateTagDto): Promise<TagResponseDto>  {
+  async update(authUser: AuthUserDto, id: string, updateTagDto: UpdateTagDto): Promise<TagResponseDto> {
     const tag = await this.findOne(authUser, id);
 
     await this._tagRepository.update(tag, updateTagDto);

+ 1 - 1
server/apps/immich/src/api-v1/user/response-dto/user-response.dto.ts

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

+ 2 - 2
server/apps/immich/src/api-v1/user/user-repository.ts

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

+ 1 - 1
server/apps/immich/src/api-v1/user/user.core.ts

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

+ 3 - 3
server/apps/immich/src/api-v1/user/user.module.ts

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

+ 1 - 1
server/apps/immich/src/api-v1/user/user.service.spec.ts

@@ -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 { newUserRepositoryMock } from '../../../test/test-utils';
 import { AuthUserDto } from '../../decorators/auth-user.decorator';

+ 2 - 5
server/apps/immich/src/api-v1/user/user.service.ts

@@ -10,16 +10,13 @@ import {
 } from './response-dto/create-profile-image-response.dto';
 import { mapUserCountResponse, UserCountResponseDto } from './response-dto/user-count-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';
 
 @Injectable()
 export class UserService {
   private userCore: UserCore;
-  constructor(
-    @Inject(USER_REPOSITORY)
-    userRepository: IUserRepository,
-  ) {
+  constructor(@Inject(IUserRepository) userRepository: IUserRepository) {
     this.userCore = new UserCore(userRepository);
   }
 

+ 1 - 1
server/apps/immich/src/decorators/auth-user.decorator.ts

@@ -1,5 +1,5 @@
 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';
 
 export class AuthUserDto {

+ 1 - 3
server/apps/immich/src/modules/background-task/background-task.module.ts

@@ -1,9 +1,7 @@
 import { BullModule } from '@nestjs/bull';
 import { Module } from '@nestjs/common';
 import { TypeOrmModule } from '@nestjs/typeorm';
-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 { AssetEntity, ExifEntity, SmartInfoEntity } from '@app/database';
 import { BackgroundTaskProcessor } from './background-task.processor';
 import { BackgroundTaskService } from './background-task.service';
 

+ 1 - 2
server/apps/immich/src/modules/background-task/background-task.processor.ts

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

+ 1 - 1
server/apps/immich/src/modules/download/download.service.ts

@@ -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 archiver from 'archiver';
 import { extname } from 'path';

+ 1 - 1
server/apps/immich/src/modules/immich-jwt/immich-jwt.module.ts

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

+ 1 - 1
server/apps/immich/src/modules/immich-jwt/immich-jwt.service.ts

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

+ 1 - 1
server/apps/immich/src/modules/immich-jwt/strategies/jwt.strategy.ts

@@ -4,7 +4,7 @@ import { InjectRepository } from '@nestjs/typeorm';
 import { ExtractJwt, Strategy } from 'passport-jwt';
 import { Repository } from 'typeorm';
 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 { ImmichJwtService } from '../immich-jwt.service';
 

+ 1 - 3
server/apps/immich/src/modules/schedule-tasks/schedule-tasks.module.ts

@@ -1,10 +1,8 @@
 import { BullModule } from '@nestjs/bull';
 import { Module } from '@nestjs/common';
 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 { 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';
 
 @Module({

+ 1 - 3
server/apps/immich/src/modules/schedule-tasks/schedule-tasks.service.ts

@@ -2,11 +2,10 @@ import { Injectable, Logger } from '@nestjs/common';
 import { Cron, CronExpression } from '@nestjs/schedule';
 import { InjectRepository } from '@nestjs/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 { Queue } from 'bull';
 import { randomUUID } from 'crypto';
-import { ExifEntity } from '@app/database/entities/exif.entity';
 import {
   userDeletionProcessorName,
   exifExtractionProcessorName,
@@ -19,7 +18,6 @@ import {
   videoMetadataExtractionProcessorName,
 } from '@app/job';
 import { ConfigService } from '@nestjs/config';
-import { UserEntity } from '@app/database/entities/user.entity';
 import { IUserDeletionJob } from '@app/job/interfaces/user-deletion.interface';
 import { userUtils } from '@app/common';
 

+ 1 - 1
server/apps/immich/test/album.e2e-spec.ts

@@ -3,7 +3,7 @@ import { INestApplication } from '@nestjs/common';
 import { TypeOrmModule } from '@nestjs/typeorm';
 import request from 'supertest';
 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 { CreateAlbumDto } from '../src/api-v1/album/dto/create-album.dto';
 import { ImmichJwtModule } from '../src/modules/immich-jwt/immich-jwt.module';

+ 1 - 5
server/apps/microservices/src/microservices.module.ts

@@ -1,9 +1,5 @@
 import { immichAppConfig, immichBullAsyncConfig } from '@app/common/config';
-import { DatabaseModule } 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 { DatabaseModule, AssetEntity, ExifEntity, SmartInfoEntity, UserEntity } from '@app/database';
 import { StorageModule } from '@app/storage';
 import { BullModule } from '@nestjs/bull';
 import { Module } from '@nestjs/common';

+ 1 - 1
server/apps/microservices/src/processors/asset-uploaded.processor.ts

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

+ 1 - 1
server/apps/microservices/src/processors/generate-checksum.processor.ts

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

+ 8 - 14
server/apps/microservices/src/processors/machine-learning.processor.ts

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

+ 1 - 2
server/apps/microservices/src/processors/metadata-extraction.processor.ts

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

+ 1 - 1
server/apps/microservices/src/processors/storage-migration.processor.ts

@@ -1,5 +1,5 @@
 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 { QueueNameEnum, templateMigrationProcessorName, updateTemplateProcessorName } from '@app/job';
 import { StorageService } from '@app/storage';

+ 1 - 1
server/apps/microservices/src/processors/thumbnail.processor.ts

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

+ 1 - 2
server/apps/microservices/src/processors/user-deletion.processor.ts

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

+ 1 - 1
server/apps/microservices/src/processors/video-transcode.processor.ts

@@ -1,5 +1,5 @@
 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 { mp4ConversionProcessorName } from '@app/job/constants/job-name.constant';
 import { IMp4ConversionProcessor } from '@app/job/interfaces/video-transcode.interface';

+ 1 - 1
server/libs/common/src/utils/asset-utils.ts

@@ -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 fs from 'fs';
 

+ 1 - 1
server/libs/common/src/utils/user-utils.spec.ts

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

+ 1 - 1
server/libs/common/src/utils/user-utils.ts

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

+ 1 - 0
server/libs/database/src/config/index.ts

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

+ 10 - 0
server/libs/database/src/entities/index.ts

@@ -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';

+ 2 - 0
server/libs/database/src/index.ts

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

+ 1 - 1
server/libs/immich-config/src/immich-config.module.ts

@@ -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 { TypeOrmModule } from '@nestjs/typeorm';
 import { ImmichConfigService } from './immich-config.service';

+ 1 - 1
server/libs/immich-config/src/immich-config.service.ts

@@ -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 { InjectRepository } from '@nestjs/typeorm';
 import * as _ from 'lodash';

+ 1 - 1
server/libs/job/src/interfaces/asset-uploaded.interface.ts

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

+ 1 - 1
server/libs/job/src/interfaces/machine-learning.interface.ts

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

+ 1 - 1
server/libs/job/src/interfaces/metadata-extraction.interface.ts

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

+ 1 - 1
server/libs/job/src/interfaces/thumbnail-generation.interface.ts

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

+ 1 - 1
server/libs/job/src/interfaces/user-deletion.interface.ts

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

+ 1 - 1
server/libs/job/src/interfaces/video-transcode.interface.ts

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

+ 1 - 2
server/libs/storage/src/storage.module.ts

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

+ 1 - 2
server/libs/storage/src/storage.service.ts

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