diff --git a/server/src/repositories/index.ts b/server/src/repositories/index.ts index a01b46f3bd..d2e1aa08c8 100644 --- a/server/src/repositories/index.ts +++ b/server/src/repositories/index.ts @@ -31,6 +31,7 @@ import { ProcessRepository } from 'src/repositories/process.repository'; import { SearchRepository } from 'src/repositories/search.repository'; import { ServerInfoRepository } from 'src/repositories/server-info.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 { StackRepository } from 'src/repositories/stack.repository'; import { StorageRepository } from 'src/repositories/storage.repository'; @@ -79,6 +80,7 @@ export const repositories = [ SessionRepository, ServerInfoRepository, SharedLinkRepository, + SharedLinkAssetRepository, StackRepository, StorageRepository, SyncRepository, diff --git a/server/src/repositories/shared-link-asset.repository.ts b/server/src/repositories/shared-link-asset.repository.ts new file mode 100644 index 0000000000..45085c4a8d --- /dev/null +++ b/server/src/repositories/shared-link-asset.repository.ts @@ -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) {} + + 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); + } +} diff --git a/server/src/services/base.service.ts b/server/src/services/base.service.ts index 6b85c3ec6c..834843f5a2 100644 --- a/server/src/services/base.service.ts +++ b/server/src/services/base.service.ts @@ -38,6 +38,7 @@ import { ProcessRepository } from 'src/repositories/process.repository'; import { SearchRepository } from 'src/repositories/search.repository'; import { ServerInfoRepository } from 'src/repositories/server-info.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 { StackRepository } from 'src/repositories/stack.repository'; import { StorageRepository } from 'src/repositories/storage.repository'; @@ -141,6 +142,7 @@ export class BaseService { protected serverInfoRepository: ServerInfoRepository, protected sessionRepository: SessionRepository, protected sharedLinkRepository: SharedLinkRepository, + protected sharedLinkAssetRepository: SharedLinkAssetRepository, protected stackRepository: StackRepository, protected storageRepository: StorageRepository, protected syncRepository: SyncRepository, diff --git a/server/src/services/shared-link.service.ts b/server/src/services/shared-link.service.ts index 096739d056..40644dd098 100644 --- a/server/src/services/shared-link.service.ts +++ b/server/src/services/shared-link.service.ts @@ -175,9 +175,11 @@ export class SharedLinkService extends BaseService { throw new BadRequestException('Invalid shared link type'); } + const removedAssetIds = await this.sharedLinkAssetRepository.remove(id, dto.assetIds); + const results: AssetIdsResponseDto[] = []; for (const assetId of dto.assetIds) { - const hasAsset = sharedLink.assets.find((asset) => asset.id === assetId); + const hasAsset = removedAssetIds.find((id) => id === assetId); if (!hasAsset) { results.push({ assetId, success: false, error: AssetIdErrorReason.NOT_FOUND }); continue;