mirror of
				https://github.com/KevinMidboe/immich.git
				synced 2025-10-29 17:40:28 +00:00 
			
		
		
		
	fix(server): remove album thumbnail when the asset is deleted from the database (#681)
This commit is contained in:
		@@ -8,6 +8,7 @@ import { AlbumEntity } from '../../../../../libs/database/src/entities/album.ent
 | 
			
		||||
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 { AssetRepository, ASSET_REPOSITORY } from '../asset/asset-repository';
 | 
			
		||||
 | 
			
		||||
@Module({
 | 
			
		||||
  imports: [TypeOrmModule.forFeature([AssetEntity, UserEntity, AlbumEntity, AssetAlbumEntity, UserAlbumEntity])],
 | 
			
		||||
@@ -18,6 +19,10 @@ import { AlbumRepository, ALBUM_REPOSITORY } from './album-repository';
 | 
			
		||||
      provide: ALBUM_REPOSITORY,
 | 
			
		||||
      useClass: AlbumRepository,
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      provide: ASSET_REPOSITORY,
 | 
			
		||||
      useClass: AssetRepository,
 | 
			
		||||
    },
 | 
			
		||||
  ],
 | 
			
		||||
})
 | 
			
		||||
export class AlbumModule {}
 | 
			
		||||
 
 | 
			
		||||
@@ -10,10 +10,14 @@ 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 { AlbumCountResponseDto } from './response-dto/album-count-response.dto';
 | 
			
		||||
import { ASSET_REPOSITORY, IAssetRepository } from '../asset/asset-repository';
 | 
			
		||||
 | 
			
		||||
@Injectable()
 | 
			
		||||
export class AlbumService {
 | 
			
		||||
  constructor(@Inject(ALBUM_REPOSITORY) private _albumRepository: IAlbumRepository) {}
 | 
			
		||||
  constructor(
 | 
			
		||||
    @Inject(ALBUM_REPOSITORY) private _albumRepository: IAlbumRepository,
 | 
			
		||||
    @Inject(ASSET_REPOSITORY) private _assetRepository: IAssetRepository,
 | 
			
		||||
  ) {}
 | 
			
		||||
 | 
			
		||||
  private async _getAlbum({
 | 
			
		||||
    authUser,
 | 
			
		||||
@@ -54,6 +58,11 @@ export class AlbumService {
 | 
			
		||||
      return albums.map(mapAlbumExcludeAssetInfo);
 | 
			
		||||
    }
 | 
			
		||||
    const albums = await this._albumRepository.getList(authUser.id, getAlbumsDto);
 | 
			
		||||
 | 
			
		||||
    for (const album of albums) {
 | 
			
		||||
      await this._checkValidThumbnail(album);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return albums.map((album) => mapAlbumExcludeAssetInfo(album));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@@ -123,4 +132,18 @@ export class AlbumService {
 | 
			
		||||
  async getAlbumCountByUserId(authUser: AuthUserDto): Promise<AlbumCountResponseDto> {
 | 
			
		||||
    return this._albumRepository.getCountByUserId(authUser.id);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  async _checkValidThumbnail(album: AlbumEntity): Promise<AlbumEntity> {
 | 
			
		||||
    const assetId = album.albumThumbnailAssetId;
 | 
			
		||||
    if (assetId) {
 | 
			
		||||
      try {
 | 
			
		||||
        await this._assetRepository.getById(assetId);
 | 
			
		||||
      } catch (e) {
 | 
			
		||||
        album.albumThumbnailAssetId = null;
 | 
			
		||||
        return await this._albumRepository.updateAlbum(album, {});
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return album;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user