Skip to content

Commit

Permalink
fix(server) long album load time on Album and Sharing page (immich-ap…
Browse files Browse the repository at this point in the history
…p#1890)

* chore: update package-lock.json version

* rfix(server) long album load time

* remove all eagerness

* generate index

* remove console.log

* remove deadcode

* fix: shared link album owner
  • Loading branch information
alextran1502 authored Feb 28, 2023
1 parent 243c98a commit 25cff6a
Show file tree
Hide file tree
Showing 8 changed files with 27 additions and 16 deletions.
5 changes: 1 addition & 4 deletions server/apps/immich/src/api-v1/album/album-repository.ts
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ export class AlbumRepository implements IAlbumRepository {

const queryProperties: FindManyOptions<AlbumEntity> = {
relations: { sharedUsers: true, assets: true, sharedLinks: true, owner: true },
select: { assets: { id: true } },
order: { assets: { fileCreatedAt: 'ASC' }, createdAt: 'ASC' },
};

Expand Down Expand Up @@ -112,10 +113,6 @@ export class AlbumRepository implements IAlbumRepository {
});
}

const albums = await albumsQuery;

albums.sort((a, b) => new Date(b.createdAt).valueOf() - new Date(a.createdAt).valueOf());

return albumsQuery;
}

Expand Down
2 changes: 1 addition & 1 deletion server/apps/immich/src/api-v1/album/album.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -66,11 +66,11 @@ export class AlbumService {
*/
async getAllAlbums(authUser: AuthUserDto, getAlbumsDto: GetAlbumsDto): Promise<AlbumResponseDto[]> {
let albums: AlbumEntity[];

if (typeof getAlbumsDto.assetId === 'string') {
albums = await this.albumRepository.getListByAssetId(authUser.id, getAlbumsDto.assetId);
} else {
albums = await this.albumRepository.getList(authUser.id, getAlbumsDto);

if (getAlbumsDto.shared) {
const publicSharingAlbums = await this.albumRepository.getPublicSharingList(authUser.id);
albums = [...albums, ...publicSharingAlbums];
Expand Down
6 changes: 3 additions & 3 deletions server/libs/infra/src/db/entities/album.entity.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ export class AlbumEntity {
@PrimaryGeneratedColumn('uuid')
id!: string;

@ManyToOne(() => UserEntity, { eager: true, onDelete: 'CASCADE', onUpdate: 'CASCADE', nullable: false })
@ManyToOne(() => UserEntity, { onDelete: 'CASCADE', onUpdate: 'CASCADE', nullable: false })
owner!: UserEntity;

@Column()
Expand All @@ -36,11 +36,11 @@ export class AlbumEntity {
@Column({ comment: 'Asset ID to be used as thumbnail', type: 'varchar', nullable: true })
albumThumbnailAssetId!: string | null;

@ManyToMany(() => UserEntity, { eager: true })
@ManyToMany(() => UserEntity)
@JoinTable()
sharedUsers!: UserEntity[];

@ManyToMany(() => AssetEntity, { eager: true })
@ManyToMany(() => AssetEntity)
@JoinTable()
assets!: AssetEntity[];

Expand Down
6 changes: 3 additions & 3 deletions server/libs/infra/src/db/entities/asset.entity.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ export class AssetEntity {
@Column()
deviceAssetId!: string;

@ManyToOne(() => UserEntity, { eager: true, onDelete: 'CASCADE', onUpdate: 'CASCADE', nullable: false })
@ManyToOne(() => UserEntity, { onDelete: 'CASCADE', onUpdate: 'CASCADE', nullable: false })
owner!: UserEntity;

@Column()
Expand Down Expand Up @@ -92,11 +92,11 @@ export class AssetEntity {
@OneToOne(() => SmartInfoEntity, (smartInfoEntity) => smartInfoEntity.asset)
smartInfo?: SmartInfoEntity;

@ManyToMany(() => TagEntity, (tag) => tag.assets, { cascade: true, eager: true })
@ManyToMany(() => TagEntity, (tag) => tag.assets, { cascade: true })
@JoinTable({ name: 'tag_asset' })
tags!: TagEntity[];

@ManyToMany(() => SharedLinkEntity, (link) => link.assets, { cascade: true, eager: true })
@ManyToMany(() => SharedLinkEntity, (link) => link.assets, { cascade: true })
@JoinTable({ name: 'shared_link__asset' })
sharedLinks!: SharedLinkEntity[];
}
Expand Down
1 change: 1 addition & 0 deletions server/libs/infra/src/db/entities/shared-link.entity.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ export class SharedLinkEntity {
@ManyToMany(() => AssetEntity, (asset) => asset.sharedLinks)
assets!: AssetEntity[];

@Index('IDX_sharedlink_albumId')
@ManyToOne(() => AlbumEntity, (album) => album.sharedLinks)
album?: AlbumEntity;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { MigrationInterface, QueryRunner } from "typeorm";

export class AddIndexForAlbumInSharedLinkTable1677535643119 implements MigrationInterface {
name = 'AddIndexForAlbumInSharedLinkTable1677535643119'

public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`CREATE INDEX "IDX_sharedlink_albumId" ON "shared_links" ("albumId") `);
}

public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`DROP INDEX "public"."IDX_sharedlink_albumId"`);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ export class SharedLinkRepository implements ISharedLinkRepository {
assets: {
exifInfo: true,
},
owner: true,
},
},
order: {
Expand All @@ -49,7 +50,9 @@ export class SharedLinkRepository implements ISharedLinkRepository {
},
relations: {
assets: true,
album: true,
album: {
owner: true,
},
},
order: {
createdAt: 'DESC',
Expand Down
4 changes: 0 additions & 4 deletions web/src/routes/(user)/albums/+page.svelte
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
<script lang="ts">
import AlbumCard from '$lib/components/album-page/album-card.svelte';
import { goto } from '$app/navigation';
import { onMount } from 'svelte';
import ContextMenu from '$lib/components/shared-components/context-menu/context-menu.svelte';
import MenuOption from '$lib/components/shared-components/context-menu/menu-option.svelte';
import DeleteOutline from 'svelte-material-icons/DeleteOutline.svelte';
Expand All @@ -20,13 +19,10 @@
contextMenuPosition,
createAlbum,
deleteSelectedContextAlbum,
loadAlbums,
showAlbumContextMenu,
closeAlbumContextMenu
} = useAlbums({ albums: data.albums });
onMount(loadAlbums);
const handleCreateAlbum = async () => {
const newAlbum = await createAlbum();
if (newAlbum) {
Expand Down

0 comments on commit 25cff6a

Please sign in to comment.