Skip to content

Commit

Permalink
Introduced new user sync functionality
Browse files Browse the repository at this point in the history
  • Loading branch information
ilyakubanov committed Mar 3, 2025
1 parent 517c4e0 commit 7f81cfb
Show file tree
Hide file tree
Showing 18 changed files with 742 additions and 159 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,6 @@
use SprykerEco\Zed\AmazonQuicksight\Business\ApiClient\UserAmazonQuicksightApiClientInterface;
use SprykerEco\Zed\AmazonQuicksight\Business\Creator\QuicksightAssetBundleImportJobCreator;
use SprykerEco\Zed\AmazonQuicksight\Business\Creator\QuicksightAssetBundleImportJobCreatorInterface;
use SprykerEco\Zed\AmazonQuicksight\Business\Creator\QuicksightUserCreator;
use SprykerEco\Zed\AmazonQuicksight\Business\Creator\QuicksightUserCreatorInterface;
use SprykerEco\Zed\AmazonQuicksight\Business\Deleter\DataSetDeleter;
use SprykerEco\Zed\AmazonQuicksight\Business\Deleter\DataSetDeleterInterface;
use SprykerEco\Zed\AmazonQuicksight\Business\Deleter\QuicksightUserDeleter;
Expand All @@ -45,6 +43,8 @@
use SprykerEco\Zed\AmazonQuicksight\Business\Reader\QuicksightUserReaderInterface;
use SprykerEco\Zed\AmazonQuicksight\Business\Reader\UserReader;
use SprykerEco\Zed\AmazonQuicksight\Business\Reader\UserReaderInterface;
use SprykerEco\Zed\AmazonQuicksight\Business\Saver\QuicksightUserSaver;
use SprykerEco\Zed\AmazonQuicksight\Business\Saver\QuicksightUserSaverInterface;
use SprykerEco\Zed\AmazonQuicksight\Business\Synchronizer\QuicksightAssetBundleImportJobSynchronizer;
use SprykerEco\Zed\AmazonQuicksight\Business\Synchronizer\QuicksightAssetBundleImportJobSynchronizerInterface;
use SprykerEco\Zed\AmazonQuicksight\Business\Updater\QuicksightAssetBundleImportJobUpdater;
Expand Down Expand Up @@ -72,17 +72,15 @@ public function createUserExpander(): UserExpanderInterface
}

/**
* @return \SprykerEco\Zed\AmazonQuicksight\Business\Creator\QuicksightUserCreatorInterface
* @return \SprykerEco\Zed\AmazonQuicksight\Business\Saver\QuicksightUserSaverInterface
*/
public function createQuicksightUserCreator(): QuicksightUserCreatorInterface
public function createQuicksightUserSaver(): QuicksightUserSaverInterface
{
return new QuicksightUserCreator(
$this->createUserCollectionFilter(),
return new QuicksightUserSaver(
$this->createQuicksightUserMatcher(),
$this->getEntityManager(),
$this->createUserAmazonQuicksightApiClient(),
$this->getMessengerFacade(),
$this->createErrorAdder(),
$this->createQuicksightUserReader(),
);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,13 +81,29 @@ public function deleteQuicksightUsersByUserCollectionResponse(
*
* @api
*
* @deprecated Use {@link \SprykerEco\Zed\AmazonQuicksight\Business\AmazonQuicksightFacade::saveMatchedQuicksightUsers()} instead.
*
* @return \Generated\Shared\Transfer\QuicksightUserCollectionResponseTransfer
*/
public function createMatchedQuicksightUsers(): QuicksightUserCollectionResponseTransfer
{
return $this->getFactory()
->createQuicksightUserCreator()
->createMatchedQuicksightUsers();
->createQuicksightUserSaver()
->saveMatchedQuicksightUsers(true);
}

/**
* {@inheritDoc}
*
* @api
*
* @return \Generated\Shared\Transfer\QuicksightUserCollectionResponseTransfer
*/
public function saveMatchedQuicksightUsers(): QuicksightUserCollectionResponseTransfer
{
return $this->getFactory()
->createQuicksightUserSaver()
->saveMatchedQuicksightUsers();
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,10 +92,28 @@ public function expandAnalyticsCollectionWithQuicksightAnalytics(
*
* @api
*
* @deprecated Use {@link \SprykerEco\Zed\AmazonQuicksight\Business\AmazonQuicksightFacadeInterface::saveMatchedQuicksightUsers()} instead.
*
* @return \Generated\Shared\Transfer\QuicksightUserCollectionResponseTransfer
*/
public function createMatchedQuicksightUsers(): QuicksightUserCollectionResponseTransfer;

/**
* Specification:
* - Sends request to AWS API to get list of registered Quicksight users. For more information see {@link https://docs.aws.amazon.com/quicksight/latest/APIReference/API_ListUsers.html}.
* - Filters out Quicksight users with unsupported roles using {@link \SprykerEco\Zed\AmazonQuicksight\AmazonQuicksightConfig::getQuicksightUserRoles()}.
* - Fetches user transfers from persistence.
* - Matches registered on Quicksight side Quicksight users with users from persistence by username.
* - Persists matched Quicksight users.
* - Adds errors to `QuicksightUserCollectionResponseTransfer.errors` if any occurs.
* - Returns `QuicksightUserCollectionResponseTransfer` with persisted Quicksight users and errors if any occurs.
*
* @api
*
* @return \Generated\Shared\Transfer\QuicksightUserCollectionResponseTransfer
*/
public function saveMatchedQuicksightUsers(): QuicksightUserCollectionResponseTransfer;

/**
* Specification:
* - Requires `EnableQuicksightAnalyticsRequestTransfer.assetBundleImportJobId` to be set.
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -51,13 +51,13 @@ public function filterOutUserTransfersNotApplicableForQuicksightUserDeletion(arr
}

/**
* @param \ArrayObject<array-key, \Generated\Shared\Transfer\UserTransfer> $userTransfers
* @param list<\Generated\Shared\Transfer\UserTransfer> $userTransfers
*
* @return array<int|string, \Generated\Shared\Transfer\UserTransfer>
*/
public function filterOutUserTransfersWithExistingQuicksightUser(ArrayObject $userTransfers): array
public function filterOutUserTransfersWithExistingQuicksightUser(array $userTransfers): array
{
return $this->filterOutUserTransfersWithPersistedQuicksightUser($userTransfers->getArrayCopy());
return $this->filterOutUserTransfersWithPersistedQuicksightUser($userTransfers);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,6 @@

namespace SprykerEco\Zed\AmazonQuicksight\Business\Filter;

use ArrayObject;

interface UserCollectionFilterInterface
{
/**
Expand All @@ -19,9 +17,9 @@ interface UserCollectionFilterInterface
public function filterOutUserTransfersNotApplicableForQuicksightUserDeletion(array $userTransfers): array;

/**
* @param \ArrayObject<array-key, \Generated\Shared\Transfer\UserTransfer> $userTransfers
* @param list<\Generated\Shared\Transfer\UserTransfer> $userTransfers
*
* @return list<\Generated\Shared\Transfer\UserTransfer>
*/
public function filterOutUserTransfersWithExistingQuicksightUser(ArrayObject $userTransfers): array;
public function filterOutUserTransfersWithExistingQuicksightUser(array $userTransfers): array;
}
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ class QuicksightUserMatcher implements QuicksightUserMatcherInterface
public function __construct(
UserReaderInterface $userReader,
UserCollectionFilterInterface $userCollectionFilter,
QuicksightUserCollectionFilterInterface $quicksightUserCollectionFilter
QuicksightUserCollectionFilterInterface $quicksightUserCollectionFilter,
) {
$this->userReader = $userReader;
$this->userCollectionFilter = $userCollectionFilter;
Expand All @@ -46,23 +46,30 @@ public function __construct(

/**
* @param \ArrayObject<array-key, \Generated\Shared\Transfer\QuicksightUserTransfer> $quicksightUserTransfers
* @param bool $filterOutExistingQuicksightUsers
*
* @return list<\Generated\Shared\Transfer\QuicksightUserTransfer>
*/
public function getQuicksightUsersMatchedWithExistingUsers(ArrayObject $quicksightUserTransfers): array
{
public function getQuicksightUsersMatchedWithExistingUsers(
ArrayObject $quicksightUserTransfers,
bool $filterOutExistingQuicksightUsers = false
): array {
$filteredQuicksightUserTransfers = $this->quicksightUserCollectionFilter->filterOutQuicksightUsersWithUnsupportedQuicksightUserRoles(
$quicksightUserTransfers,
);
if ($filteredQuicksightUserTransfers === []) {
return [];
}

$userCollectionTransfer = $this->userReader->getUsersApplicableForQuicksightUserRegistration();
$filteredUserTransfers = $this->userCollectionFilter->filterOutUserTransfersWithExistingQuicksightUser(
$userCollectionTransfer->getUsers(),
);
$userTransfersIndexedByUsername = $this->getUserTransfersIndexedByUsername($filteredUserTransfers);
$userTransfers = $this->userReader->getUsersApplicableForQuicksightUserRegistration()->getUsers()->getArrayCopy();

if ($filterOutExistingQuicksightUsers) {
$userTransfers = $this->userCollectionFilter->filterOutUserTransfersWithExistingQuicksightUser(
$userTransfers,
);
}

$userTransfersIndexedByUsername = $this->getUserTransfersIndexedByUsername($userTransfers);

$matchedQuicksightUserTransfers = [];
foreach ($filteredQuicksightUserTransfers as $quicksightUserTransfer) {
Expand All @@ -79,7 +86,7 @@ public function getQuicksightUsersMatchedWithExistingUsers(ArrayObject $quicksig
}

/**
* @param array<int|string, \Generated\Shared\Transfer\UserTransfer> $userTransfers
* @param list<\Generated\Shared\Transfer\UserTransfer> $userTransfers
*
* @return array<string, \Generated\Shared\Transfer\UserTransfer>
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,12 @@ interface QuicksightUserMatcherInterface
{
/**
* @param \ArrayObject<array-key, \Generated\Shared\Transfer\QuicksightUserTransfer> $quicksightUserTransfers
* @param bool $filterOutExistingQuicksightUsers
*
* @return list<\Generated\Shared\Transfer\QuicksightUserTransfer>
*/
public function getQuicksightUsersMatchedWithExistingUsers(ArrayObject $quicksightUserTransfers): array;
public function getQuicksightUsersMatchedWithExistingUsers(
ArrayObject $quicksightUserTransfers,
bool $filterOutExistingQuicksightUsers = false
): array;
}
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,29 @@ public function getQuicksightUserCollectionByUserTransfers(array $userTransfers)
$quicksightUserConditionsTransfer->addIdUser($userTransfer->getIdUserOrFail());
}

return $this->getQuicksightUserCollectionByCondition($quicksightUserConditionsTransfer);
}

/**
* @param list<int> $userIds
*
* @return \Generated\Shared\Transfer\QuicksightUserCollectionTransfer
*/
public function getQuicksightUserCollectionByUserIds(array $userIds): QuicksightUserCollectionTransfer
{
$quicksightUserConditionsTransfer = (new QuicksightUserConditionsTransfer())->setUserIds($userIds);

return $this->getQuicksightUserCollectionByCondition($quicksightUserConditionsTransfer);
}

/**
* @param \Generated\Shared\Transfer\QuicksightUserConditionsTransfer $quicksightUserConditionsTransfer
*
* @return \Generated\Shared\Transfer\QuicksightUserCollectionTransfer
*/
protected function getQuicksightUserCollectionByCondition(
QuicksightUserConditionsTransfer $quicksightUserConditionsTransfer,
): QuicksightUserCollectionTransfer {
$quicksightUserCriteriaTransfer = (new QuicksightUserCriteriaTransfer())
->setQuicksightUserConditions($quicksightUserConditionsTransfer);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,11 @@ interface QuicksightUserReaderInterface
* @return \Generated\Shared\Transfer\QuicksightUserCollectionTransfer
*/
public function getQuicksightUserCollectionByUserTransfers(array $userTransfers): QuicksightUserCollectionTransfer;

/**
* @param list<int> $userIds
*
* @return \Generated\Shared\Transfer\QuicksightUserCollectionTransfer
*/
public function getQuicksightUserCollectionByUserIds(array $userIds): QuicksightUserCollectionTransfer;
}
Loading

0 comments on commit 7f81cfb

Please sign in to comment.