diff --git a/server/src/database.ts b/server/src/database.ts index e88705711e..d6e6392804 100644 --- a/server/src/database.ts +++ b/server/src/database.ts @@ -1,6 +1,6 @@ import { Selectable } from 'kysely'; import { Exif as DatabaseExif } from 'src/db'; -import { AlbumUserRole, AssetStatus, AssetType, MemoryType, Permission, UserStatus } from 'src/enum'; +import { AlbumUserRole, AssetFileType, AssetStatus, AssetType, MemoryType, Permission, UserStatus } from 'src/enum'; import { OnThisDayData, UserMetadataItem } from 'src/types'; export type AuthUser = { @@ -17,6 +17,12 @@ export type AlbumUser = { role: AlbumUserRole; }; +export type AssetFile = { + id: string; + type: AssetFileType; + path: string; +}; + export type Library = { id: string; ownerId: string; diff --git a/server/src/entities/asset-files.entity.ts b/server/src/entities/asset-files.entity.ts deleted file mode 100644 index 3bd80784b6..0000000000 --- a/server/src/entities/asset-files.entity.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { AssetEntity } from 'src/entities/asset.entity'; -import { AssetFileType } from 'src/enum'; - -export class AssetFileEntity { - id!: string; - assetId!: string; - asset?: AssetEntity; - createdAt!: Date; - updatedAt!: Date; - updateId?: string; - type!: AssetFileType; - path!: string; -} diff --git a/server/src/entities/asset.entity.ts b/server/src/entities/asset.entity.ts index 55ad75d5c2..21ea8e3f08 100644 --- a/server/src/entities/asset.entity.ts +++ b/server/src/entities/asset.entity.ts @@ -1,10 +1,9 @@ import { DeduplicateJoinsPlugin, ExpressionBuilder, Kysely, SelectQueryBuilder, sql } from 'kysely'; import { jsonArrayFrom, jsonObjectFrom } from 'kysely/helpers/postgres'; -import { Exif, Tag, User } from 'src/database'; +import { AssetFile, Exif, Tag, User } from 'src/database'; import { DB } from 'src/db'; import { AlbumEntity } from 'src/entities/album.entity'; import { AssetFaceEntity } from 'src/entities/asset-face.entity'; -import { AssetFileEntity } from 'src/entities/asset-files.entity'; import { AssetJobStatusEntity } from 'src/entities/asset-job-status.entity'; import { SharedLinkEntity } from 'src/entities/shared-link.entity'; import { StackEntity } from 'src/entities/stack.entity'; @@ -25,7 +24,7 @@ export class AssetEntity { type!: AssetType; status!: AssetStatus; originalPath!: string; - files!: AssetFileEntity[]; + files!: AssetFile[]; thumbhash!: Buffer | null; encodedVideoPath!: string | null; createdAt!: Date; diff --git a/server/src/services/asset-media.service.spec.ts b/server/src/services/asset-media.service.spec.ts index 9499e788f4..bcaeb925b8 100644 --- a/server/src/services/asset-media.service.spec.ts +++ b/server/src/services/asset-media.service.spec.ts @@ -5,9 +5,9 @@ import { UnauthorizedException, } from '@nestjs/common'; import { Stats } from 'node:fs'; +import { AssetFile } from 'src/database'; import { AssetMediaStatus, AssetRejectReason, AssetUploadAction } from 'src/dtos/asset-media-response.dto'; import { AssetMediaCreateDto, AssetMediaReplaceDto, AssetMediaSize, UploadFieldName } from 'src/dtos/asset-media.dto'; -import { AssetFileEntity } from 'src/entities/asset-files.entity'; import { ASSET_CHECKSUM_CONSTRAINT, AssetEntity } from 'src/entities/asset.entity'; import { AssetFileType, AssetStatus, AssetType, CacheControl, JobName } from 'src/enum'; import { AuthRequest } from 'src/middleware/auth.guard'; @@ -166,7 +166,7 @@ const assetEntity = Object.freeze({ isArchived: false, encodedVideoPath: '', duration: '0:00:00.000000', - files: [] as AssetFileEntity[], + files: [] as AssetFile[], exifInfo: { latitude: 49.533_547, longitude: 10.703_075, @@ -535,12 +535,9 @@ describe(AssetMediaService.name, () => { ...assetStub.image, files: [ { - assetId: assetStub.image.id, - createdAt: assetStub.image.fileCreatedAt, id: '42', path: '/path/to/preview', type: AssetFileType.THUMBNAIL, - updatedAt: new Date(), }, ], }); @@ -555,12 +552,9 @@ describe(AssetMediaService.name, () => { ...assetStub.image, files: [ { - assetId: assetStub.image.id, - createdAt: assetStub.image.fileCreatedAt, id: '42', path: '/path/to/preview.jpg', type: AssetFileType.PREVIEW, - updatedAt: new Date(), }, ], }); diff --git a/server/src/services/notification.service.spec.ts b/server/src/services/notification.service.spec.ts index bd6c6e098a..c9a6f593ba 100644 --- a/server/src/services/notification.service.spec.ts +++ b/server/src/services/notification.service.spec.ts @@ -2,7 +2,6 @@ import { plainToInstance } from 'class-transformer'; import { defaults, SystemConfig } from 'src/config'; import { AlbumUser } from 'src/database'; import { SystemConfigDto } from 'src/dtos/system-config.dto'; -import { AssetFileEntity } from 'src/entities/asset-files.entity'; import { AssetFileType, JobName, JobStatus, UserMetadataKey } from 'src/enum'; import { EmailTemplate } from 'src/repositories/notification.repository'; import { NotificationService } from 'src/services/notification.service'; @@ -442,7 +441,7 @@ describe(NotificationService.name, () => { mocks.notification.renderEmail.mockResolvedValue({ html: '', text: '' }); mocks.asset.getById.mockResolvedValue({ ...assetStub.image, - files: [{ assetId: 'asset-id', type: AssetFileType.THUMBNAIL, path: 'path-to-thumb.jpg' } as AssetFileEntity], + files: [{ id: '1', type: AssetFileType.THUMBNAIL, path: 'path-to-thumb.jpg' }], }); await expect(sut.handleAlbumInvite({ id: '', recipientId: '' })).resolves.toBe(JobStatus.SUCCESS); diff --git a/server/src/utils/asset.util.ts b/server/src/utils/asset.util.ts index 575cbb4a21..a15f006cda 100644 --- a/server/src/utils/asset.util.ts +++ b/server/src/utils/asset.util.ts @@ -1,9 +1,9 @@ import { BadRequestException } from '@nestjs/common'; import { GeneratedImageType, StorageCore } from 'src/cores/storage.core'; +import { AssetFile } from 'src/database'; import { BulkIdErrorReason, BulkIdResponseDto } from 'src/dtos/asset-ids.response.dto'; import { UploadFieldName } from 'src/dtos/asset-media.dto'; import { AuthDto } from 'src/dtos/auth.dto'; -import { AssetFileEntity } from 'src/entities/asset-files.entity'; import { AssetFileType, AssetType, Permission } from 'src/enum'; import { AuthRequest } from 'src/middleware/auth.guard'; import { AccessRepository } from 'src/repositories/access.repository'; @@ -20,7 +20,7 @@ export const getAssetFile = ( return (files || []).find((file) => file.type === type); }; -export const getAssetFiles = (files: AssetFileEntity[]) => ({ +export const getAssetFiles = (files: AssetFile[]) => ({ fullsizeFile: getAssetFile(files, AssetFileType.FULLSIZE), previewFile: getAssetFile(files, AssetFileType.PREVIEW), thumbnailFile: getAssetFile(files, AssetFileType.THUMBNAIL), diff --git a/server/test/fixtures/asset.stub.ts b/server/test/fixtures/asset.stub.ts index 669cf1b848..2d7bdc0fe7 100644 --- a/server/test/fixtures/asset.stub.ts +++ b/server/test/fixtures/asset.stub.ts @@ -1,5 +1,4 @@ -import { Exif } from 'src/database'; -import { AssetFileEntity } from 'src/entities/asset-files.entity'; +import { AssetFile, Exif } from 'src/database'; import { AssetEntity } from 'src/entities/asset.entity'; import { StackEntity } from 'src/entities/stack.entity'; import { AssetFileType, AssetStatus, AssetType } from 'src/enum'; @@ -8,34 +7,25 @@ import { authStub } from 'test/fixtures/auth.stub'; import { fileStub } from 'test/fixtures/file.stub'; import { userStub } from 'test/fixtures/user.stub'; -const previewFile: AssetFileEntity = { +const previewFile: AssetFile = { id: 'file-1', - assetId: 'asset-id', type: AssetFileType.PREVIEW, path: '/uploads/user-id/thumbs/path.jpg', - createdAt: new Date('2023-02-23T05:06:29.716Z'), - updatedAt: new Date('2023-02-23T05:06:29.716Z'), }; -const thumbnailFile: AssetFileEntity = { +const thumbnailFile: AssetFile = { id: 'file-2', - assetId: 'asset-id', type: AssetFileType.THUMBNAIL, path: '/uploads/user-id/webp/path.ext', - createdAt: new Date('2023-02-23T05:06:29.716Z'), - updatedAt: new Date('2023-02-23T05:06:29.716Z'), }; -const fullsizeFile: AssetFileEntity = { +const fullsizeFile: AssetFile = { id: 'file-3', - assetId: 'asset-id', type: AssetFileType.FULLSIZE, path: '/uploads/user-id/fullsize/path.webp', - createdAt: new Date('2023-02-23T05:06:29.716Z'), - updatedAt: new Date('2023-02-23T05:06:29.716Z'), }; -const files: AssetFileEntity[] = [fullsizeFile, previewFile, thumbnailFile]; +const files: AssetFile[] = [fullsizeFile, previewFile, thumbnailFile]; export const stackStub = (stackId: string, assets: AssetEntity[]): StackEntity => { return {