|
@@ -1,9 +1,9 @@
|
|
import { AlbumEntity } from '@app/database/entities/album.entity';
|
|
import { AlbumEntity } from '@app/database/entities/album.entity';
|
|
import { AssetAlbumEntity } from '@app/database/entities/asset-album.entity';
|
|
import { AssetAlbumEntity } from '@app/database/entities/asset-album.entity';
|
|
import { UserAlbumEntity } from '@app/database/entities/user-album.entity';
|
|
import { UserAlbumEntity } from '@app/database/entities/user-album.entity';
|
|
-import { BadRequestException, Injectable } from '@nestjs/common';
|
|
|
|
|
|
+import { Injectable } from '@nestjs/common';
|
|
import { InjectRepository } from '@nestjs/typeorm';
|
|
import { InjectRepository } from '@nestjs/typeorm';
|
|
-import { Repository, SelectQueryBuilder, DataSource } from 'typeorm';
|
|
|
|
|
|
+import { In, Repository, SelectQueryBuilder, DataSource } from 'typeorm';
|
|
import { AddAssetsDto } from './dto/add-assets.dto';
|
|
import { AddAssetsDto } from './dto/add-assets.dto';
|
|
import { AddUsersDto } from './dto/add-users.dto';
|
|
import { AddUsersDto } from './dto/add-users.dto';
|
|
import { CreateAlbumDto } from './dto/create-album.dto';
|
|
import { CreateAlbumDto } from './dto/create-album.dto';
|
|
@@ -11,7 +11,7 @@ import { GetAlbumsDto } from './dto/get-albums.dto';
|
|
import { RemoveAssetsDto } from './dto/remove-assets.dto';
|
|
import { RemoveAssetsDto } from './dto/remove-assets.dto';
|
|
import { UpdateAlbumDto } from './dto/update-album.dto';
|
|
import { UpdateAlbumDto } from './dto/update-album.dto';
|
|
import { AlbumCountResponseDto } from './response-dto/album-count-response.dto';
|
|
import { AlbumCountResponseDto } from './response-dto/album-count-response.dto';
|
|
-import {AddAssetsResponseDto} from "./response-dto/add-assets-response.dto";
|
|
|
|
|
|
+import { AddAssetsResponseDto } from './response-dto/add-assets-response.dto';
|
|
|
|
|
|
export interface IAlbumRepository {
|
|
export interface IAlbumRepository {
|
|
create(ownerId: string, createAlbumDto: CreateAlbumDto): Promise<AlbumEntity>;
|
|
create(ownerId: string, createAlbumDto: CreateAlbumDto): Promise<AlbumEntity>;
|
|
@@ -20,7 +20,7 @@ export interface IAlbumRepository {
|
|
delete(album: AlbumEntity): Promise<void>;
|
|
delete(album: AlbumEntity): Promise<void>;
|
|
addSharedUsers(album: AlbumEntity, addUsersDto: AddUsersDto): Promise<AlbumEntity>;
|
|
addSharedUsers(album: AlbumEntity, addUsersDto: AddUsersDto): Promise<AlbumEntity>;
|
|
removeUser(album: AlbumEntity, userId: string): Promise<void>;
|
|
removeUser(album: AlbumEntity, userId: string): Promise<void>;
|
|
- removeAssets(album: AlbumEntity, removeAssets: RemoveAssetsDto): Promise<AlbumEntity>;
|
|
|
|
|
|
+ removeAssets(album: AlbumEntity, removeAssets: RemoveAssetsDto): Promise<number>;
|
|
addAssets(album: AlbumEntity, addAssetsDto: AddAssetsDto): Promise<AddAssetsResponseDto>;
|
|
addAssets(album: AlbumEntity, addAssetsDto: AddAssetsDto): Promise<AddAssetsResponseDto>;
|
|
updateAlbum(album: AlbumEntity, updateAlbumDto: UpdateAlbumDto): Promise<AlbumEntity>;
|
|
updateAlbum(album: AlbumEntity, updateAlbumDto: UpdateAlbumDto): Promise<AlbumEntity>;
|
|
getListByAssetId(userId: string, assetId: string): Promise<AlbumEntity[]>;
|
|
getListByAssetId(userId: string, assetId: string): Promise<AlbumEntity[]>;
|
|
@@ -237,28 +237,13 @@ export class AlbumRepository implements IAlbumRepository {
|
|
await this.userAlbumRepository.delete({ albumId: album.id, sharedUserId: userId });
|
|
await this.userAlbumRepository.delete({ albumId: album.id, sharedUserId: userId });
|
|
}
|
|
}
|
|
|
|
|
|
- async removeAssets(album: AlbumEntity, removeAssetsDto: RemoveAssetsDto): Promise<AlbumEntity> {
|
|
|
|
- let deleteAssetCount = 0;
|
|
|
|
- // TODO: should probably do a single delete query?
|
|
|
|
- for (const assetId of removeAssetsDto.assetIds) {
|
|
|
|
- const res = await this.assetAlbumRepository.delete({ albumId: album.id, assetId: assetId });
|
|
|
|
- if (res.affected == 1) deleteAssetCount++;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- // TODO: No need to return boolean if using a singe delete query
|
|
|
|
- if (deleteAssetCount == removeAssetsDto.assetIds.length) {
|
|
|
|
- const retAlbum = (await this.get(album.id)) as AlbumEntity;
|
|
|
|
-
|
|
|
|
- if (retAlbum?.assets?.length === 0) {
|
|
|
|
- // is empty album
|
|
|
|
- await this.albumRepository.update(album.id, { albumThumbnailAssetId: null });
|
|
|
|
- retAlbum.albumThumbnailAssetId = null;
|
|
|
|
- }
|
|
|
|
|
|
+ async removeAssets(album: AlbumEntity, removeAssetsDto: RemoveAssetsDto): Promise<number> {
|
|
|
|
+ const res = await this.assetAlbumRepository.delete({
|
|
|
|
+ albumId: album.id,
|
|
|
|
+ assetId: In(removeAssetsDto.assetIds),
|
|
|
|
+ });
|
|
|
|
|
|
- return retAlbum;
|
|
|
|
- } else {
|
|
|
|
- throw new BadRequestException('Some assets were not found in the album');
|
|
|
|
- }
|
|
|
|
|
|
+ return res.affected || 0;
|
|
}
|
|
}
|
|
|
|
|
|
async addAssets(album: AlbumEntity, addAssetsDto: AddAssetsDto): Promise<AddAssetsResponseDto> {
|
|
async addAssets(album: AlbumEntity, addAssetsDto: AddAssetsDto): Promise<AddAssetsResponseDto> {
|
|
@@ -267,7 +252,7 @@ export class AlbumRepository implements IAlbumRepository {
|
|
|
|
|
|
for (const assetId of addAssetsDto.assetIds) {
|
|
for (const assetId of addAssetsDto.assetIds) {
|
|
// Album already contains that asset
|
|
// Album already contains that asset
|
|
- if (album.assets?.some(a => a.assetId === assetId)) {
|
|
|
|
|
|
+ if (album.assets?.some((a) => a.assetId === assetId)) {
|
|
alreadyExisting.push(assetId);
|
|
alreadyExisting.push(assetId);
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
@@ -288,7 +273,7 @@ export class AlbumRepository implements IAlbumRepository {
|
|
|
|
|
|
return {
|
|
return {
|
|
successfullyAdded: newRecords.length,
|
|
successfullyAdded: newRecords.length,
|
|
- alreadyInAlbum: alreadyExisting
|
|
|
|
|
|
+ alreadyInAlbum: alreadyExisting,
|
|
};
|
|
};
|
|
}
|
|
}
|
|
|
|
|