diff --git a/packages/syncing-server/src/Bootstrap/Container.ts b/packages/syncing-server/src/Bootstrap/Container.ts index dd8d22391..2d1f98313 100644 --- a/packages/syncing-server/src/Bootstrap/Container.ts +++ b/packages/syncing-server/src/Bootstrap/Container.ts @@ -541,6 +541,7 @@ export class ContainerConfigLoader { .toConstantValue( new GetItems( container.get(TYPES.Sync_ItemRepository), + container.get(TYPES.Sync_SharedVaultUserRepository), container.get(TYPES.Sync_CONTENT_SIZE_TRANSFER_LIMIT), container.get(TYPES.Sync_ItemTransferCalculator), container.get(TYPES.Sync_Timer), diff --git a/packages/syncing-server/src/Domain/UseCase/Syncing/GetItems/GetItems.spec.ts b/packages/syncing-server/src/Domain/UseCase/Syncing/GetItems/GetItems.spec.ts index b7ededb3e..811c71f68 100644 --- a/packages/syncing-server/src/Domain/UseCase/Syncing/GetItems/GetItems.spec.ts +++ b/packages/syncing-server/src/Domain/UseCase/Syncing/GetItems/GetItems.spec.ts @@ -16,7 +16,14 @@ describe('GetItems', () => { let sharedVaultUserRepository: SharedVaultUserRepositoryInterface const createUseCase = () => - new GetItems(itemRepository, contentSizeTransferLimit, itemTransferCalculator, timer, maxItemsSyncLimit) + new GetItems( + itemRepository, + sharedVaultUserRepository, + contentSizeTransferLimit, + itemTransferCalculator, + timer, + maxItemsSyncLimit, + ) beforeEach(() => { item = Item.create({ diff --git a/packages/syncing-server/src/Domain/UseCase/Syncing/GetItems/GetItems.ts b/packages/syncing-server/src/Domain/UseCase/Syncing/GetItems/GetItems.ts index 12aed4d0d..1543f3a43 100644 --- a/packages/syncing-server/src/Domain/UseCase/Syncing/GetItems/GetItems.ts +++ b/packages/syncing-server/src/Domain/UseCase/Syncing/GetItems/GetItems.ts @@ -7,6 +7,7 @@ import { ItemQuery } from '../../../Item/ItemQuery' import { ItemRepositoryInterface } from '../../../Item/ItemRepositoryInterface' import { ItemTransferCalculatorInterface } from '../../../Item/ItemTransferCalculatorInterface' import { GetItemsDTO } from './GetItemsDTO' +import { SharedVaultUserRepositoryInterface } from '../../../SharedVault/User/SharedVaultUserRepositoryInterface' export class GetItems implements UseCaseInterface { private readonly DEFAULT_ITEMS_LIMIT = 150 @@ -14,6 +15,7 @@ export class GetItems implements UseCaseInterface { constructor( private itemRepository: ItemRepositoryInterface, + private sharedVaultUserRepository: SharedVaultUserRepositoryInterface, private contentSizeTransferLimit: number, private itemTransferCalculator: ItemTransferCalculatorInterface, private timer: TimerInterface, @@ -37,6 +39,13 @@ export class GetItems implements UseCaseInterface { const limit = dto.limit === undefined || dto.limit < 1 ? this.DEFAULT_ITEMS_LIMIT : dto.limit const upperBoundLimit = limit < this.maxItemsSyncLimit ? limit : this.maxItemsSyncLimit + const sharedVaultUsers = await this.sharedVaultUserRepository.findByUserUuid(userUuid) + const userSharedVaultUuids = sharedVaultUsers.map((sharedVaultUser) => sharedVaultUser.props.sharedVaultUuid.value) + + const exclusiveSharedVaultUuids = dto.sharedVaultUuids + ? dto.sharedVaultUuids.filter((sharedVaultUuid) => userSharedVaultUuids.includes(sharedVaultUuid)) + : undefined + const itemQuery: ItemQuery = { userUuid: userUuid.value, lastSyncTime: lastSyncTime ?? undefined, @@ -46,8 +55,8 @@ export class GetItems implements UseCaseInterface { sortBy: 'updated_at_timestamp', sortOrder: 'ASC', limit: upperBoundLimit, - includeSharedVaultUuids: undefined, - exclusiveSharedVaultUuids: undefined, + includeSharedVaultUuids: !dto.sharedVaultUuids ? userSharedVaultUuids : undefined, + exclusiveSharedVaultUuids, } const itemUuidsToFetch = await this.itemTransferCalculator.computeItemUuidsToFetch(