diff --git a/server/src/dtos/album.dto.ts b/server/src/dtos/album.dto.ts index 3f7af0f53..ee328359a 100644 --- a/server/src/dtos/album.dto.ts +++ b/server/src/dtos/album.dto.ts @@ -83,6 +83,12 @@ export class AlbumCountResponseDto { notShared!: number; } +export class SubAlbumResponseDto { + id!: string; + albumName!: string; + albumThumbnailAssetId!: string | null; +} + export class AlbumResponseDto { id!: string; ownerId!: string; @@ -105,6 +111,9 @@ export class AlbumResponseDto { @Optional() @ApiProperty({ enumName: 'AssetOrder', enum: AssetOrder }) order?: AssetOrder; + + parentAlbums?: SubAlbumResponseDto[]; + childAlbums?: SubAlbumResponseDto[]; } export const mapAlbum = (entity: AlbumEntity, withAssets: boolean, auth?: AuthDto): AlbumResponseDto => { @@ -146,6 +155,16 @@ export const mapAlbum = (entity: AlbumEntity, withAssets: boolean, auth?: AuthDt assetCount: entity.assets?.length || 0, isActivityEnabled: entity.isActivityEnabled, order: entity.order, + parentAlbums: entity.parentAlbums?.map((album) => ({ + id: album.id, + albumName: album.albumName, + albumThumbnailAssetId: album.albumThumbnailAssetId, + })), + childAlbums: entity.childAlbums?.map((album) => ({ + id: album.id, + albumName: album.albumName, + albumThumbnailAssetId: album.albumThumbnailAssetId, + })), }; }; diff --git a/server/src/entities/index.ts b/server/src/entities/index.ts index 761b47693..7ef727bdd 100644 --- a/server/src/entities/index.ts +++ b/server/src/entities/index.ts @@ -1,5 +1,5 @@ import { ActivityEntity } from 'src/entities/activity.entity'; -import { AlbumEntity } from 'src/entities/album.entity'; +import { AlbumEntity, SubAlbumEntity } from 'src/entities/album.entity'; import { APIKeyEntity } from 'src/entities/api-key.entity'; import { AssetFaceEntity } from 'src/entities/asset-face.entity'; import { AssetJobStatusEntity } from 'src/entities/asset-job-status.entity'; @@ -40,6 +40,7 @@ export const entities = [ SharedLinkEntity, SmartInfoEntity, SmartSearchEntity, + SubAlbumEntity, SystemConfigEntity, SystemMetadataEntity, TagEntity, diff --git a/server/src/repositories/album.repository.ts b/server/src/repositories/album.repository.ts index bbaab2a12..e523ff2d7 100644 --- a/server/src/repositories/album.repository.ts +++ b/server/src/repositories/album.repository.ts @@ -3,7 +3,7 @@ import { InjectDataSource, InjectRepository } from '@nestjs/typeorm'; import _ from 'lodash'; import { dataSource } from 'src/database.config'; import { Chunked, ChunkedArray, DATABASE_PARAMETER_CHUNK_SIZE, DummyValue, GenerateSql } from 'src/decorators'; -import { AlbumEntity } from 'src/entities/album.entity'; +import { AlbumEntity, SubAlbumEntity } from 'src/entities/album.entity'; import { AssetEntity } from 'src/entities/asset.entity'; import { AlbumAsset, AlbumAssetCount, AlbumInfoOptions, IAlbumRepository } from 'src/interfaces/album.interface'; import { Instrumentation } from 'src/utils/instrumentation'; @@ -16,6 +16,7 @@ export class AlbumRepository implements IAlbumRepository { constructor( @InjectRepository(AssetEntity) private assetRepository: Repository, @InjectRepository(AlbumEntity) private repository: Repository, + @InjectRepository(SubAlbumEntity) private subAlbumRepository: Repository, @InjectDataSource() private dataSource: DataSource, ) {} @@ -26,6 +27,8 @@ export class AlbumRepository implements IAlbumRepository { sharedUsers: true, assets: false, sharedLinks: true, + parentAlbums: true, + childAlbums: true, }; const order: FindOptionsOrder = {};