1
0
forked from Cutlery/immich

response dto

This commit is contained in:
Alex Tran 2024-04-02 21:57:21 -05:00
parent a28330adf6
commit 7aa98162af
3 changed files with 25 additions and 2 deletions

View File

@ -83,6 +83,12 @@ export class AlbumCountResponseDto {
notShared!: number; notShared!: number;
} }
export class SubAlbumResponseDto {
id!: string;
albumName!: string;
albumThumbnailAssetId!: string | null;
}
export class AlbumResponseDto { export class AlbumResponseDto {
id!: string; id!: string;
ownerId!: string; ownerId!: string;
@ -105,6 +111,9 @@ export class AlbumResponseDto {
@Optional() @Optional()
@ApiProperty({ enumName: 'AssetOrder', enum: AssetOrder }) @ApiProperty({ enumName: 'AssetOrder', enum: AssetOrder })
order?: AssetOrder; order?: AssetOrder;
parentAlbums?: SubAlbumResponseDto[];
childAlbums?: SubAlbumResponseDto[];
} }
export const mapAlbum = (entity: AlbumEntity, withAssets: boolean, auth?: AuthDto): AlbumResponseDto => { 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, assetCount: entity.assets?.length || 0,
isActivityEnabled: entity.isActivityEnabled, isActivityEnabled: entity.isActivityEnabled,
order: entity.order, 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,
})),
}; };
}; };

View File

@ -1,5 +1,5 @@
import { ActivityEntity } from 'src/entities/activity.entity'; 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 { APIKeyEntity } from 'src/entities/api-key.entity';
import { AssetFaceEntity } from 'src/entities/asset-face.entity'; import { AssetFaceEntity } from 'src/entities/asset-face.entity';
import { AssetJobStatusEntity } from 'src/entities/asset-job-status.entity'; import { AssetJobStatusEntity } from 'src/entities/asset-job-status.entity';
@ -40,6 +40,7 @@ export const entities = [
SharedLinkEntity, SharedLinkEntity,
SmartInfoEntity, SmartInfoEntity,
SmartSearchEntity, SmartSearchEntity,
SubAlbumEntity,
SystemConfigEntity, SystemConfigEntity,
SystemMetadataEntity, SystemMetadataEntity,
TagEntity, TagEntity,

View File

@ -3,7 +3,7 @@ import { InjectDataSource, InjectRepository } from '@nestjs/typeorm';
import _ from 'lodash'; import _ from 'lodash';
import { dataSource } from 'src/database.config'; import { dataSource } from 'src/database.config';
import { Chunked, ChunkedArray, DATABASE_PARAMETER_CHUNK_SIZE, DummyValue, GenerateSql } from 'src/decorators'; 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 { AssetEntity } from 'src/entities/asset.entity';
import { AlbumAsset, AlbumAssetCount, AlbumInfoOptions, IAlbumRepository } from 'src/interfaces/album.interface'; import { AlbumAsset, AlbumAssetCount, AlbumInfoOptions, IAlbumRepository } from 'src/interfaces/album.interface';
import { Instrumentation } from 'src/utils/instrumentation'; import { Instrumentation } from 'src/utils/instrumentation';
@ -16,6 +16,7 @@ export class AlbumRepository implements IAlbumRepository {
constructor( constructor(
@InjectRepository(AssetEntity) private assetRepository: Repository<AssetEntity>, @InjectRepository(AssetEntity) private assetRepository: Repository<AssetEntity>,
@InjectRepository(AlbumEntity) private repository: Repository<AlbumEntity>, @InjectRepository(AlbumEntity) private repository: Repository<AlbumEntity>,
@InjectRepository(SubAlbumEntity) private subAlbumRepository: Repository<SubAlbumEntity>,
@InjectDataSource() private dataSource: DataSource, @InjectDataSource() private dataSource: DataSource,
) {} ) {}
@ -26,6 +27,8 @@ export class AlbumRepository implements IAlbumRepository {
sharedUsers: true, sharedUsers: true,
assets: false, assets: false,
sharedLinks: true, sharedLinks: true,
parentAlbums: true,
childAlbums: true,
}; };
const order: FindOptionsOrder<AlbumEntity> = {}; const order: FindOptionsOrder<AlbumEntity> = {};