fix remove assets from shared link

This commit is contained in:
Jorge Montejo 2025-10-09 21:06:19 +02:00 committed by MontejoJorge
parent 7b7d91a5e1
commit 42c16022ac
4 changed files with 25 additions and 1 deletions

View file

@ -31,6 +31,7 @@ import { ProcessRepository } from 'src/repositories/process.repository';
import { SearchRepository } from 'src/repositories/search.repository'; import { SearchRepository } from 'src/repositories/search.repository';
import { ServerInfoRepository } from 'src/repositories/server-info.repository'; import { ServerInfoRepository } from 'src/repositories/server-info.repository';
import { SessionRepository } from 'src/repositories/session.repository'; import { SessionRepository } from 'src/repositories/session.repository';
import { SharedLinkAssetRepository } from 'src/repositories/shared-link-asset.repository';
import { SharedLinkRepository } from 'src/repositories/shared-link.repository'; import { SharedLinkRepository } from 'src/repositories/shared-link.repository';
import { StackRepository } from 'src/repositories/stack.repository'; import { StackRepository } from 'src/repositories/stack.repository';
import { StorageRepository } from 'src/repositories/storage.repository'; import { StorageRepository } from 'src/repositories/storage.repository';
@ -79,6 +80,7 @@ export const repositories = [
SessionRepository, SessionRepository,
ServerInfoRepository, ServerInfoRepository,
SharedLinkRepository, SharedLinkRepository,
SharedLinkAssetRepository,
StackRepository, StackRepository,
StorageRepository, StorageRepository,
SyncRepository, SyncRepository,

View file

@ -0,0 +1,18 @@
import { Kysely } from 'kysely';
import { InjectKysely } from 'nestjs-kysely';
import { DB } from 'src/schema';
export class SharedLinkAssetRepository {
constructor(@InjectKysely() private db: Kysely<DB>) {}
async remove(sharedLinkId: string, assetsId: string[]) {
const deleted = await this.db
.deleteFrom('shared_link_asset')
.where('shared_link_asset.sharedLinksId', '=', sharedLinkId)
.where('shared_link_asset.assetsId', 'in', assetsId)
.returning('assetsId')
.execute();
return deleted.map((row) => row.assetsId);
}
}

View file

@ -38,6 +38,7 @@ import { ProcessRepository } from 'src/repositories/process.repository';
import { SearchRepository } from 'src/repositories/search.repository'; import { SearchRepository } from 'src/repositories/search.repository';
import { ServerInfoRepository } from 'src/repositories/server-info.repository'; import { ServerInfoRepository } from 'src/repositories/server-info.repository';
import { SessionRepository } from 'src/repositories/session.repository'; import { SessionRepository } from 'src/repositories/session.repository';
import { SharedLinkAssetRepository } from 'src/repositories/shared-link-asset.repository';
import { SharedLinkRepository } from 'src/repositories/shared-link.repository'; import { SharedLinkRepository } from 'src/repositories/shared-link.repository';
import { StackRepository } from 'src/repositories/stack.repository'; import { StackRepository } from 'src/repositories/stack.repository';
import { StorageRepository } from 'src/repositories/storage.repository'; import { StorageRepository } from 'src/repositories/storage.repository';
@ -141,6 +142,7 @@ export class BaseService {
protected serverInfoRepository: ServerInfoRepository, protected serverInfoRepository: ServerInfoRepository,
protected sessionRepository: SessionRepository, protected sessionRepository: SessionRepository,
protected sharedLinkRepository: SharedLinkRepository, protected sharedLinkRepository: SharedLinkRepository,
protected sharedLinkAssetRepository: SharedLinkAssetRepository,
protected stackRepository: StackRepository, protected stackRepository: StackRepository,
protected storageRepository: StorageRepository, protected storageRepository: StorageRepository,
protected syncRepository: SyncRepository, protected syncRepository: SyncRepository,

View file

@ -175,9 +175,11 @@ export class SharedLinkService extends BaseService {
throw new BadRequestException('Invalid shared link type'); throw new BadRequestException('Invalid shared link type');
} }
const removedAssetIds = await this.sharedLinkAssetRepository.remove(id, dto.assetIds);
const results: AssetIdsResponseDto[] = []; const results: AssetIdsResponseDto[] = [];
for (const assetId of dto.assetIds) { for (const assetId of dto.assetIds) {
const hasAsset = sharedLink.assets.find((asset) => asset.id === assetId); const hasAsset = removedAssetIds.find((id) => id === assetId);
if (!hasAsset) { if (!hasAsset) {
results.push({ assetId, success: false, error: AssetIdErrorReason.NOT_FOUND }); results.push({ assetId, success: false, error: AssetIdErrorReason.NOT_FOUND });
continue; continue;