diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..a11af76
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,13 @@
+; This file is for unifying the coding style for different editors and IDEs.
+; More information at https://editorconfig.org
+root = true
+
+[*]
+indent_style = space
+indent_size = 4
+end_of_line = lf
+insert_final_newline = true
+trim_trailing_whitespace = true
+
+[*.bat]
+end_of_line = crlf
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..51f3ea4
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,36 @@
+# Define the line ending behavior of the different file extensions
+# Set the default behavior, in case people don't have core.autocrlf set.
+* text text=auto eol=lf
+
+*.php diff=php
+
+# Denote all files that are truly binary and should not be modified.
+*.png binary
+*.jpg binary
+*.gif binary
+*.jpeg binary
+*.zip binary
+*.phar binary
+*.ttf binary
+*.woff binary
+*.woff2 binary
+*.eot binary
+*.ico binary
+*.mo binary
+*.pdf binary
+*.xsd binary
+*.exe binary
+
+# Remove files for archives generated using `git archive`
+dependency.json export-ignore
+phpstan.json export-ignore
+phpstan.neon export-ignore
+psalm-report.json export-ignore linguist-generated=true
+tooling.yml export-ignore
+.coveralls.yml export-ignore
+.travis.yml export-ignore
+.editorconfig export-ignore
+.gitattributes export-ignore
+.gitignore export-ignore
+.github/ export-ignore
+architecture-baseline.json export-ignore
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 0000000..99d049b
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,61 @@
+name: CI
+
+on:
+ push:
+ branches:
+ - 'master'
+ pull_request:
+ workflow_dispatch:
+
+jobs:
+ validation:
+ name: Validation
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v3
+
+ - name: Setup PHP
+ uses: shivammathur/setup-php@v2
+ with:
+ php-version: '8.2'
+ extensions: mbstring, intl, bcmath
+ coverage: none
+
+ - name: Composer Install
+ run: composer install --prefer-dist --no-interaction --profile
+
+ - name: Run validation
+ run: composer validate
+
+ - name: Syntax check
+ run: find ./src -path src -prune -o -type f -name '*.php' -print0 | xargs -0 -n1 -P4 php -l -n | (! grep -v "No syntax errors detected" )
+
+ - name: Run CodeStyle checks
+ run: composer cs-check
+
+ - name: PHPStan setup
+ run: composer stan-setup
+
+ - name: Run PHPStan
+ run: composer stan
+
+ lowest:
+ name: Prefer Lowest
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v3
+
+ - name: Setup PHP
+ uses: shivammathur/setup-php@v2
+ with:
+ php-version: '8.1'
+ extensions: mbstring, intl, bcmath
+ coverage: none
+
+ - name: Composer Install
+ run: composer install --prefer-dist --no-interaction --profile
+
+ - name: Composer Update
+ run: composer update --prefer-lowest --prefer-dist --no-interaction --profile -vvv
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..58b3e11
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,36 @@
+# IDE
+.idea/
+.project/
+nbproject/
+.buildpath/
+.settings/
+*.sublime-*
+
+# OS
+.DS_Store
+*.AppleDouble
+*.AppleDB
+*.AppleDesktop
+
+# grunt stuff
+.grunt
+.sass-cache
+/node_modules/
+
+# tooling
+vendor/
+composer.lock
+.phpunit.result.cache
+
+# built client resources
+src/*/Zed/*/Static/Public
+src/*/Zed/*/Static/Assets/sprite
+
+# Propel classes
+src/*/Zed/*/Persistence/Propel/Base/*
+src/*/Zed/*/Persistence/Propel/Map/*
+
+# tests
+tests/**/_generated/
+tests/_output/*
+!tests/_output/.gitkeep
diff --git a/.license b/.license
new file mode 100644
index 0000000..cf29a25
--- /dev/null
+++ b/.license
@@ -0,0 +1,4 @@
+/**
+ * MIT License
+ * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file.
+ */
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000..740e64b
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,3 @@
+# AmazonQuicksight Changelog
+
+[Release Changelog](https://github.com/spryker-eco/amazon-quicksight/releases)
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..d376fd6
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,40 @@
+SPRYKER SYSTEMS GMBH EVALUATION LICENSE AGREEMENT
+
+SPRYKER SYSTEMS GMBH, REGISTERED WITH THE COMMERCIAL REGISTER OF THE LOWER COURT OF HAMBURG UNDER HRB 134310
+(“WE” OR ”SPRYKER”)GRANTS YOU (THE “LICENSEE”) THE RIGHT TO USE THE SOFTWARE (AS DEFINED BELOW)
+UNDER THE PROVISIONS OF THIS EVALUATION LICENSE AGREEMENT (THE “AGREEMENT”).
+
+The “Software” includes any software owned and distributed by Spryker under this Agreement. The Software
+contains elements of open source components, to which different license terms apply respectively.
+These open source components are needed to be installed separately.
+
+Spryker grants to Licensee, during the 45-calendar-day period (the “Evaluation Period”) following the download of the Software,
+the nontransferable, nonexclusive limited, free of charge license to permit Licensee’s employees to internally use the Software
+to test and evaluate the Software in connection with potentially purchasing non-evaluation licenses to the Software.
+
+Licensee shall not (i) use the Software to set up a productive live system, for development purposes or any other purposes apart
+from evaluating the Software; (ii) copy any part of the Software except to make one copy for back-up purposes; (iii) distribute,
+disclose, market, rent, lease, or transfer the Software or act as a service bureau with respect to the Software; (iv) export the
+Software or install it in multiple locations; (v) disclose any confidential information provided by Spryker; (vi) modify or make
+derivative works of the Software; or (vii) allow others to make or obtain copies of the Software.
+
+THE SOFTWARE IS PROVIDED “AS-IS” AND WITHOUT WARRANTY OF ANY KIND. SPRYKER DISCLAIMS ALL WARRANTIES, EXPRESSED OR IMPLIED, INCLUDING
+BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, TITLE, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE. SPRYKER WILL NOT
+BE LIABLE FOR ANY DAMAGES ASSOCIATED WITH THE SOFTWARE, INCLUDING WITHOUT LIMITATION ORDINARY, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL
+DAMAGES OF ANY KIND, INCLUDING BUT NOT LIMITED TO DAMAGES RELATING TO LOST DATA OR LOST PROFITS, EVEN IF SPRYKER HAS BEEN ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.
+
+Licensee's license to use the Software shall terminate on the earlier of (i) the expiration of the Evaluation Period, or (ii) the date
+both parties enter into a definitive agreement for the provision by Spryker to Licensee of a non-evaluation license to the Software.
+Upon termination of the license as provided above, Licensee shall promptly destroy the Software and any back-up copy of the Software
+made during the Evaluation Period if Spryker and the Licensee have not agreed a non-evaluation license to the Software.
+
+This Agreement shall be governed by the laws of Germany to the exclusion of IPR (International Law) and the United Nations Convention
+on Contracts for the International Sale of Goods (CISG). The parties consent to the jurisdiction of the courts in Berlin (Germany).
+
+This Agreement is not assignable or transferable by Licensee and any attempt to do so is null and void.
+
+This Agreement constitutes the entire agreement between the parties concerning Licensee’s use of the Software. This Agreement supersedes
+any prior verbal understanding between the parties and any Licensee purchase order or other ordering document, regardless of whether such
+document is received by Spryker before or after execution of this Agreement. This Agreement may be amended only in a writing signed by
+an authorized officer of Spryker.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..7d6d933
--- /dev/null
+++ b/README.md
@@ -0,0 +1,15 @@
+# AmazonQuicksight Module
+[![Latest Stable Version](https://poser.pugx.org/spryker-eco/amazon-quicksight/v/stable.svg)](https://packagist.org/packages/spryker-eco/amazon-quicksight)
+[![Minimum PHP Version](https://img.shields.io/badge/php-%3E%3D%208.1-8892BF.svg)](https://php.net/)
+
+AmazonQuicksight module allows the Spryker project to connect to the Amazon QuickSight service.
+
+## Installation
+
+```
+composer require spryker-eco/amazon-quicksight
+```
+
+## Documentation
+
+[Spryker Documentation](https://docs.spryker.com)
diff --git a/architecture-baseline.json b/architecture-baseline.json
new file mode 100644
index 0000000..fe51488
--- /dev/null
+++ b/architecture-baseline.json
@@ -0,0 +1 @@
+[]
diff --git a/codeception.yml b/codeception.yml
new file mode 100644
index 0000000..3b8fdfc
--- /dev/null
+++ b/codeception.yml
@@ -0,0 +1,14 @@
+namespace: AmazonQuicksight
+include:
+ - tests/SprykerEcoTest/Zed/AmazonQuicksight
+paths:
+ tests: tests/
+ output: tests/_output/
+ data: tests/_data/
+ support: tests/_support/
+ envs: tests/_envs/
+settings:
+ suite_class: \PHPUnit\Framework\TestSuite
+ colors: true
+ memory_limit: 1024M
+ log: true
diff --git a/composer.json b/composer.json
new file mode 100644
index 0000000..cd38031
--- /dev/null
+++ b/composer.json
@@ -0,0 +1,45 @@
+{
+ "name": "spryker-eco/amazon-quicksight",
+ "type": "library",
+ "description": "AmazonQuicksight module",
+ "license": "proprietary",
+ "require": {
+ "aws/aws-sdk-php": "^3.90.0",
+ "php": ">=8.1",
+ "spryker/kernel": "^3.30.0",
+ "spryker/user": "^3.0.0"
+ },
+ "require-dev": {
+ "spryker/code-sniffer": "*",
+ "spryker/testify": "*"
+ },
+ "autoload": {
+ "psr-4": {
+ "SprykerEco\\": "src/SprykerEco/"
+ }
+ },
+ "autoload-dev": {
+ "psr-4": {
+ "SprykerEcoTest\\": "tests/SprykerEcoTest/"
+ }
+ },
+ "minimum-stability": "dev",
+ "prefer-stable": true,
+ "scripts": {
+ "cs-check": "phpcs -p -s --standard=vendor/spryker/code-sniffer/SprykerStrict/ruleset.xml src/ tests/",
+ "cs-fix": "phpcbf -p --standard=vendor/spryker/code-sniffer/SprykerStrict/ruleset.xml src/ tests/",
+ "stan": "phpstan analyse -c phpstan.neon -l 6 src/",
+ "stan-setup": "cp composer.json composer.backup && COMPOSER_MEMORY_LIMIT=-1 composer require --dev phpstan/phpstan:^0.12 && mv composer.backup composer.json"
+ },
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "config": {
+ "sort-packages": true,
+ "allow-plugins": {
+ "dealerdirect/phpcodesniffer-composer-installer": true
+ }
+ }
+}
diff --git a/phpstan.neon b/phpstan.neon
new file mode 100644
index 0000000..3260382
--- /dev/null
+++ b/phpstan.neon
@@ -0,0 +1,6 @@
+parameters:
+ level: 8
+ paths:
+ - src/
+ excludePaths:
+ - src/SprykerEco/Zed/AmazonQuicksight/Persistence/Propel/Abstract*.php
diff --git a/src/SprykerEco/Shared/AmazonQuicksight/AmazonQuicksightConstants.php b/src/SprykerEco/Shared/AmazonQuicksight/AmazonQuicksightConstants.php
new file mode 100644
index 0000000..088f022
--- /dev/null
+++ b/src/SprykerEco/Shared/AmazonQuicksight/AmazonQuicksightConstants.php
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/SprykerEco/Zed/AmazonQuicksight/AmazonQuicksightConfig.php b/src/SprykerEco/Zed/AmazonQuicksight/AmazonQuicksightConfig.php
new file mode 100644
index 0000000..1e94c97
--- /dev/null
+++ b/src/SprykerEco/Zed/AmazonQuicksight/AmazonQuicksightConfig.php
@@ -0,0 +1,77 @@
+get(AmazonQuicksightConstants::AWS_ACCOUNT_ID);
+ }
+
+ /**
+ * Specification:
+ * - Returns the namespace for the Quicksight user registration.
+ *
+ * @api
+ *
+ * @return string
+ */
+ public function getQuicksightUserRegisterNamespace(): string
+ {
+ return static::QUICKSIGHT_USER_REGISTER_NAMESPACE;
+ }
+
+ /**
+ * Specification:
+ * - Provides configuration for the Quicksight client.
+ *
+ * @link https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.AwsClient.html#method___construct
+ *
+ * @api
+ *
+ * @return array
+ */
+ public function getQuicksightClientConfiguration(): array
+ {
+ $quicksightClientConfiguration = [
+ 'region' => $this->get(AmazonQuicksightConstants::AWS_REGION),
+ ];
+
+ $awsCredentialsKey = $this->get(AmazonQuicksightConstants::AWS_CREDENTIALS_KEY);
+ $awsCredentialsSecret = $this->get(AmazonQuicksightConstants::AWS_CREDENTIALS_SECRET);
+ $awsCredentialsToken = $this->get(AmazonQuicksightConstants::AWS_CREDENTIALS_TOKEN);
+
+ if ($awsCredentialsKey && $awsCredentialsSecret && $awsCredentialsToken) {
+ $quicksightClientConfiguration['credentials'] = new Credentials(
+ $awsCredentialsKey,
+ $awsCredentialsSecret,
+ $awsCredentialsToken,
+ );
+ }
+
+ return $quicksightClientConfiguration;
+ }
+}
diff --git a/src/SprykerEco/Zed/AmazonQuicksight/AmazonQuicksightDependencyProvider.php b/src/SprykerEco/Zed/AmazonQuicksight/AmazonQuicksightDependencyProvider.php
new file mode 100644
index 0000000..32ea401
--- /dev/null
+++ b/src/SprykerEco/Zed/AmazonQuicksight/AmazonQuicksightDependencyProvider.php
@@ -0,0 +1,52 @@
+addAwsQuicksightClient($container);
+
+ return $container;
+ }
+
+ /**
+ * @param \Spryker\Zed\Kernel\Container $container
+ *
+ * @return \Spryker\Zed\Kernel\Container
+ */
+ protected function addAwsQuicksightClient(Container $container): Container
+ {
+ $container->set(static::AWS_QUICKSIGHT_CLIENT, function () {
+ return new AmazonQuicksightToAwsQuicksightClientAdapter(
+ $this->getConfig()->getQuicksightClientConfiguration(),
+ );
+ });
+
+ return $container;
+ }
+}
diff --git a/src/SprykerEco/Zed/AmazonQuicksight/Business/AmazonQuicksightBusinessFactory.php b/src/SprykerEco/Zed/AmazonQuicksight/Business/AmazonQuicksightBusinessFactory.php
new file mode 100644
index 0000000..07adc4a
--- /dev/null
+++ b/src/SprykerEco/Zed/AmazonQuicksight/Business/AmazonQuicksightBusinessFactory.php
@@ -0,0 +1,19 @@
+ $args
+ */
+ public function __construct(array $args)
+ {
+ $this->quicksightClient = new QuickSightClient($args);
+ }
+
+ /**
+ * @param array $registerUserRequestData
+ *
+ * @return \Aws\ResultInterface
+ */
+ public function registerUser(array $registerUserRequestData): ResultInterface
+ {
+ return $this->quicksightClient->registerUser($registerUserRequestData);
+ }
+
+ /**
+ * @param array $generateEmbedUrlRequestData
+ *
+ * @return \Aws\ResultInterface
+ */
+ public function generateEmbedUrlForRegisteredUser(array $generateEmbedUrlRequestData): ResultInterface
+ {
+ return $this->quicksightClient->generateEmbedUrlForRegisteredUser($generateEmbedUrlRequestData);
+ }
+}
diff --git a/src/SprykerEco/Zed/AmazonQuicksight/Dependency/External/AmazonQuicksightToAwsQuicksightClientInterface.php b/src/SprykerEco/Zed/AmazonQuicksight/Dependency/External/AmazonQuicksightToAwsQuicksightClientInterface.php
new file mode 100644
index 0000000..55d64b9
--- /dev/null
+++ b/src/SprykerEco/Zed/AmazonQuicksight/Dependency/External/AmazonQuicksightToAwsQuicksightClientInterface.php
@@ -0,0 +1,27 @@
+ $registerUserRequestData
+ *
+ * @return \Aws\ResultInterface
+ */
+ public function registerUser(array $registerUserRequestData): ResultInterface;
+
+ /**
+ * @param array $generateEmbedUrlRequestData
+ *
+ * @return \Aws\ResultInterface
+ */
+ public function generateEmbedUrlForRegisteredUser(array $generateEmbedUrlRequestData): ResultInterface;
+}
diff --git a/src/SprykerEco/Zed/AmazonQuicksight/Persistence/AmazonQuicksightEntityManager.php b/src/SprykerEco/Zed/AmazonQuicksight/Persistence/AmazonQuicksightEntityManager.php
new file mode 100644
index 0000000..1676134
--- /dev/null
+++ b/src/SprykerEco/Zed/AmazonQuicksight/Persistence/AmazonQuicksightEntityManager.php
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/SprykerEcoTest/Zed/AmazonQuicksight/codeception.yml b/tests/SprykerEcoTest/Zed/AmazonQuicksight/codeception.yml
new file mode 100644
index 0000000..e3d070b
--- /dev/null
+++ b/tests/SprykerEcoTest/Zed/AmazonQuicksight/codeception.yml
@@ -0,0 +1,12 @@
+namespace: SprykerEcoTest\Zed\AmazonQuicksight
+paths:
+ tests: .
+ data: ../../../_data
+ support: _support
+ output: ../../../_output
+coverage:
+ enabled: true
+ remote: false
+ whitelist:
+ include:
+ - '../../../../src/*'
diff --git a/tooling.yml b/tooling.yml
new file mode 100644
index 0000000..5849649
--- /dev/null
+++ b/tooling.yml
@@ -0,0 +1,4 @@
+architecture-sniffer:
+ priority: 2
+code-sniffer:
+ level: 2