gitextract_xdujmuk7/ ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── Cloud9Setup/ │ ├── .gitignore │ ├── README.md │ ├── increase-disk-size.sh │ ├── pre-requisites-versions-check.sh │ ├── pre-requisites.sh │ └── samconfig.toml ├── LICENSE ├── LICENSE-SAMPLECODE ├── LICENSE-SUMMARY ├── Lab1/ │ ├── client/ │ │ └── Application/ │ │ ├── .browserslistrc │ │ ├── .editorconfig │ │ ├── .gitignore │ │ ├── README.md │ │ ├── angular.json │ │ ├── karma.conf.js │ │ ├── package.json │ │ ├── src/ │ │ │ ├── app/ │ │ │ │ ├── _nav.ts │ │ │ │ ├── app-routing.module.ts │ │ │ │ ├── app.component.scss │ │ │ │ ├── app.component.ts │ │ │ │ ├── app.module.ts │ │ │ │ ├── models/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── interfaces.ts │ │ │ │ ├── nav/ │ │ │ │ │ ├── nav.component.html │ │ │ │ │ ├── nav.component.scss │ │ │ │ │ └── nav.component.ts │ │ │ │ └── views/ │ │ │ │ ├── dashboard/ │ │ │ │ │ ├── dashboard-routing.module.ts │ │ │ │ │ ├── dashboard.component.html │ │ │ │ │ ├── dashboard.component.scss │ │ │ │ │ ├── dashboard.component.ts │ │ │ │ │ └── dashboard.module.ts │ │ │ │ ├── orders/ │ │ │ │ │ ├── create/ │ │ │ │ │ │ ├── create.component.html │ │ │ │ │ │ ├── create.component.scss │ │ │ │ │ │ └── create.component.ts │ │ │ │ │ ├── detail/ │ │ │ │ │ │ ├── detail.component.html │ │ │ │ │ │ ├── detail.component.scss │ │ │ │ │ │ └── detail.component.ts │ │ │ │ │ ├── list/ │ │ │ │ │ │ ├── list.component.html │ │ │ │ │ │ ├── list.component.scss │ │ │ │ │ │ └── list.component.ts │ │ │ │ │ ├── models/ │ │ │ │ │ │ ├── order.interface.ts │ │ │ │ │ │ └── orderproduct.interface.ts │ │ │ │ │ ├── orders-routing.module.ts │ │ │ │ │ ├── orders.module.ts │ │ │ │ │ └── orders.service.ts │ │ │ │ └── products/ │ │ │ │ ├── create/ │ │ │ │ │ ├── create.component.html │ │ │ │ │ ├── create.component.scss │ │ │ │ │ └── create.component.ts │ │ │ │ ├── edit/ │ │ │ │ │ ├── edit.component.html │ │ │ │ │ ├── edit.component.scss │ │ │ │ │ └── edit.component.ts │ │ │ │ ├── list/ │ │ │ │ │ ├── list.component.html │ │ │ │ │ ├── list.component.scss │ │ │ │ │ └── list.component.ts │ │ │ │ ├── models/ │ │ │ │ │ └── product.interface.ts │ │ │ │ ├── product.service.ts │ │ │ │ ├── products-routing.module.ts │ │ │ │ └── products.module.ts │ │ │ ├── assets/ │ │ │ │ └── .gitkeep │ │ │ ├── custom-theme.scss │ │ │ ├── environments/ │ │ │ │ ├── environment.prod.ts │ │ │ │ └── environment.ts │ │ │ ├── index.html │ │ │ ├── main.ts │ │ │ ├── polyfills.ts │ │ │ ├── styles/ │ │ │ │ ├── _variables.scss │ │ │ │ └── reset.scss │ │ │ ├── styles.scss │ │ │ └── test.ts │ │ ├── tsconfig.app.json │ │ ├── tsconfig.json │ │ └── tsconfig.spec.json │ ├── scripts/ │ │ ├── deployment.sh │ │ └── geturl.sh │ └── server/ │ ├── .gitignore │ ├── OrderService/ │ │ ├── order_models.py │ │ ├── order_service.py │ │ ├── order_service_dal.py │ │ └── requirements.txt │ ├── ProductService/ │ │ ├── product_models.py │ │ ├── product_service.py │ │ ├── product_service_dal.py │ │ └── requirements.txt │ ├── README.md │ ├── layers/ │ │ ├── logger.py │ │ ├── requirements.txt │ │ └── utils.py │ ├── samconfig.toml │ └── template.yaml ├── Lab2/ │ ├── client/ │ │ ├── Admin/ │ │ │ ├── .browserslistrc │ │ │ ├── .editorconfig │ │ │ ├── .gitignore │ │ │ ├── README.md │ │ │ ├── angular.json │ │ │ ├── karma.conf.js │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── app/ │ │ │ │ │ ├── _nav.ts │ │ │ │ │ ├── app-routing.module.ts │ │ │ │ │ ├── app.component.scss │ │ │ │ │ ├── app.component.ts │ │ │ │ │ ├── app.module.ts │ │ │ │ │ ├── interceptors/ │ │ │ │ │ │ ├── auth.interceptor.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── models/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── interfaces.ts │ │ │ │ │ ├── nav/ │ │ │ │ │ │ ├── nav.component.css │ │ │ │ │ │ ├── nav.component.html │ │ │ │ │ │ ├── nav.component.spec.ts │ │ │ │ │ │ └── nav.component.ts │ │ │ │ │ └── views/ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ ├── auth.component.html │ │ │ │ │ │ ├── auth.component.scss │ │ │ │ │ │ └── auth.component.ts │ │ │ │ │ ├── dashboard/ │ │ │ │ │ │ ├── dashboard-routing.module.ts │ │ │ │ │ │ ├── dashboard.component.html │ │ │ │ │ │ ├── dashboard.component.scss │ │ │ │ │ │ ├── dashboard.component.ts │ │ │ │ │ │ └── dashboard.module.ts │ │ │ │ │ ├── tenants/ │ │ │ │ │ │ ├── create/ │ │ │ │ │ │ │ ├── create.component.html │ │ │ │ │ │ │ ├── create.component.scss │ │ │ │ │ │ │ └── create.component.ts │ │ │ │ │ │ ├── list/ │ │ │ │ │ │ │ ├── list.component.html │ │ │ │ │ │ │ ├── list.component.scss │ │ │ │ │ │ │ └── list.component.ts │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ └── tenant.ts │ │ │ │ │ │ ├── tenants-routing.module.ts │ │ │ │ │ │ ├── tenants.module.ts │ │ │ │ │ │ └── tenants.service.ts │ │ │ │ │ └── users/ │ │ │ │ │ ├── create/ │ │ │ │ │ │ ├── create.component.html │ │ │ │ │ │ ├── create.component.scss │ │ │ │ │ │ └── create.component.ts │ │ │ │ │ ├── list/ │ │ │ │ │ │ ├── list.component.html │ │ │ │ │ │ ├── list.component.scss │ │ │ │ │ │ └── list.component.ts │ │ │ │ │ ├── models/ │ │ │ │ │ │ └── user.ts │ │ │ │ │ ├── users-routing.module.ts │ │ │ │ │ ├── users.module.ts │ │ │ │ │ └── users.service.ts │ │ │ │ ├── assets/ │ │ │ │ │ └── .gitkeep │ │ │ │ ├── aws-exports.ts │ │ │ │ ├── custom-theme.scss │ │ │ │ ├── environments/ │ │ │ │ │ ├── environment.prod.ts │ │ │ │ │ └── environment.ts │ │ │ │ ├── index.html │ │ │ │ ├── main.ts │ │ │ │ ├── polyfills.ts │ │ │ │ ├── styles/ │ │ │ │ │ ├── _variables.scss │ │ │ │ │ └── reset.scss │ │ │ │ ├── styles.scss │ │ │ │ └── test.ts │ │ │ ├── tsconfig.app.json │ │ │ ├── tsconfig.json │ │ │ └── tsconfig.spec.json │ │ └── Landing/ │ │ ├── .browserslistrc │ │ ├── .editorconfig │ │ ├── .gitignore │ │ ├── README.md │ │ ├── angular.json │ │ ├── karma.conf.js │ │ ├── package.json │ │ ├── src/ │ │ │ ├── app/ │ │ │ │ ├── app-routing.module.ts │ │ │ │ ├── app.component.scss │ │ │ │ ├── app.component.ts │ │ │ │ ├── app.module.ts │ │ │ │ └── views/ │ │ │ │ ├── landing/ │ │ │ │ │ ├── landing.component.html │ │ │ │ │ ├── landing.component.scss │ │ │ │ │ └── landing.component.ts │ │ │ │ └── register/ │ │ │ │ ├── register.component.html │ │ │ │ ├── register.component.scss │ │ │ │ └── register.component.ts │ │ │ ├── assets/ │ │ │ │ └── .gitkeep │ │ │ ├── custom-theme.scss │ │ │ ├── environments/ │ │ │ │ ├── environment.prod.ts │ │ │ │ └── environment.ts │ │ │ ├── index.html │ │ │ ├── main.ts │ │ │ ├── polyfills.ts │ │ │ ├── styles/ │ │ │ │ ├── _variables.scss │ │ │ │ └── reset.scss │ │ │ ├── styles.scss │ │ │ └── test.ts │ │ ├── tsconfig.app.json │ │ ├── tsconfig.json │ │ └── tsconfig.spec.json │ ├── scripts/ │ │ ├── deploy-updates.sh │ │ ├── deployment.sh │ │ └── geturl.sh │ └── server/ │ ├── .gitignore │ ├── OrderService/ │ │ ├── order_models.py │ │ ├── order_service.py │ │ ├── order_service_dal.py │ │ └── requirements.txt │ ├── ProductService/ │ │ ├── product_models.py │ │ ├── product_service.py │ │ ├── product_service_dal.py │ │ └── requirements.txt │ ├── README.md │ ├── Resources/ │ │ ├── requirements.txt │ │ └── shared_service_authorizer.py │ ├── TenantManagementService/ │ │ ├── requirements.txt │ │ ├── tenant-management.py │ │ ├── tenant-registration.py │ │ └── user-management.py │ ├── layers/ │ │ ├── logger.py │ │ ├── requirements.txt │ │ └── utils.py │ ├── nested_templates/ │ │ ├── apigateway.yaml │ │ ├── apigateway_lambdapermissions.yaml │ │ ├── cognito.yaml │ │ ├── lambdafunctions.yaml │ │ ├── tables.yaml │ │ └── userinterface.yaml │ ├── samconfig.toml │ └── template.yaml ├── Lab3/ │ ├── client/ │ │ ├── Admin/ │ │ │ ├── .browserslistrc │ │ │ ├── .editorconfig │ │ │ ├── .gitignore │ │ │ ├── README.md │ │ │ ├── angular.json │ │ │ ├── karma.conf.js │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── app/ │ │ │ │ │ ├── _nav.ts │ │ │ │ │ ├── app-routing.module.ts │ │ │ │ │ ├── app.component.scss │ │ │ │ │ ├── app.component.ts │ │ │ │ │ ├── app.module.ts │ │ │ │ │ ├── interceptors/ │ │ │ │ │ │ ├── auth.interceptor.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── models/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── interfaces.ts │ │ │ │ │ ├── nav/ │ │ │ │ │ │ ├── nav.component.css │ │ │ │ │ │ ├── nav.component.html │ │ │ │ │ │ ├── nav.component.spec.ts │ │ │ │ │ │ └── nav.component.ts │ │ │ │ │ └── views/ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ ├── auth.component.html │ │ │ │ │ │ ├── auth.component.scss │ │ │ │ │ │ └── auth.component.ts │ │ │ │ │ ├── dashboard/ │ │ │ │ │ │ ├── dashboard-routing.module.ts │ │ │ │ │ │ ├── dashboard.component.html │ │ │ │ │ │ ├── dashboard.component.scss │ │ │ │ │ │ ├── dashboard.component.ts │ │ │ │ │ │ └── dashboard.module.ts │ │ │ │ │ ├── tenants/ │ │ │ │ │ │ ├── create/ │ │ │ │ │ │ │ ├── create.component.html │ │ │ │ │ │ │ ├── create.component.scss │ │ │ │ │ │ │ └── create.component.ts │ │ │ │ │ │ ├── list/ │ │ │ │ │ │ │ ├── list.component.html │ │ │ │ │ │ │ ├── list.component.scss │ │ │ │ │ │ │ └── list.component.ts │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ └── tenant.ts │ │ │ │ │ │ ├── tenants-routing.module.ts │ │ │ │ │ │ ├── tenants.module.ts │ │ │ │ │ │ └── tenants.service.ts │ │ │ │ │ └── users/ │ │ │ │ │ ├── create/ │ │ │ │ │ │ ├── create.component.html │ │ │ │ │ │ ├── create.component.scss │ │ │ │ │ │ └── create.component.ts │ │ │ │ │ ├── list/ │ │ │ │ │ │ ├── list.component.html │ │ │ │ │ │ ├── list.component.scss │ │ │ │ │ │ └── list.component.ts │ │ │ │ │ ├── models/ │ │ │ │ │ │ └── user.ts │ │ │ │ │ ├── users-routing.module.ts │ │ │ │ │ ├── users.module.ts │ │ │ │ │ └── users.service.ts │ │ │ │ ├── assets/ │ │ │ │ │ └── .gitkeep │ │ │ │ ├── aws-exports.ts │ │ │ │ ├── custom-theme.scss │ │ │ │ ├── environments/ │ │ │ │ │ ├── environment.prod.ts │ │ │ │ │ └── environment.ts │ │ │ │ ├── index.html │ │ │ │ ├── main.ts │ │ │ │ ├── polyfills.ts │ │ │ │ ├── styles/ │ │ │ │ │ ├── _variables.scss │ │ │ │ │ └── reset.scss │ │ │ │ ├── styles.scss │ │ │ │ └── test.ts │ │ │ ├── tsconfig.app.json │ │ │ ├── tsconfig.json │ │ │ └── tsconfig.spec.json │ │ ├── Application/ │ │ │ ├── .browserslistrc │ │ │ ├── .editorconfig │ │ │ ├── .gitignore │ │ │ ├── README.md │ │ │ ├── angular.json │ │ │ ├── cypress/ │ │ │ │ ├── README.md │ │ │ │ └── e2e/ │ │ │ │ └── 1-getting-started/ │ │ │ │ ├── basic-access.cy.js │ │ │ │ └── product-testing.cy.js │ │ │ ├── cypress.config.ts │ │ │ ├── cypress.env.json.example │ │ │ ├── karma.conf.js │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── app/ │ │ │ │ │ ├── _nav.ts │ │ │ │ │ ├── app-routing.module.ts │ │ │ │ │ ├── app.component.scss │ │ │ │ │ ├── app.component.ts │ │ │ │ │ ├── app.module.ts │ │ │ │ │ ├── cognito.guard.ts │ │ │ │ │ ├── interceptors/ │ │ │ │ │ │ ├── auth.interceptor.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── models/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── interfaces.ts │ │ │ │ │ ├── nav/ │ │ │ │ │ │ ├── nav.component.html │ │ │ │ │ │ ├── nav.component.scss │ │ │ │ │ │ └── nav.component.ts │ │ │ │ │ └── views/ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ ├── auth-configuration.service.ts │ │ │ │ │ │ ├── auth.component.html │ │ │ │ │ │ ├── auth.component.scss │ │ │ │ │ │ ├── auth.component.ts │ │ │ │ │ │ └── models/ │ │ │ │ │ │ └── config-params.ts │ │ │ │ │ ├── dashboard/ │ │ │ │ │ │ ├── dashboard-routing.module.ts │ │ │ │ │ │ ├── dashboard.component.html │ │ │ │ │ │ ├── dashboard.component.scss │ │ │ │ │ │ ├── dashboard.component.ts │ │ │ │ │ │ └── dashboard.module.ts │ │ │ │ │ ├── error/ │ │ │ │ │ │ ├── 404.component.html │ │ │ │ │ │ ├── 404.component.ts │ │ │ │ │ │ ├── 500.component.html │ │ │ │ │ │ ├── 500.component.ts │ │ │ │ │ │ ├── unauthorized.component.html │ │ │ │ │ │ ├── unauthorized.component.scss │ │ │ │ │ │ └── unauthorized.component.ts │ │ │ │ │ ├── orders/ │ │ │ │ │ │ ├── create/ │ │ │ │ │ │ │ ├── create.component.html │ │ │ │ │ │ │ ├── create.component.scss │ │ │ │ │ │ │ └── create.component.ts │ │ │ │ │ │ ├── detail/ │ │ │ │ │ │ │ ├── detail.component.html │ │ │ │ │ │ │ ├── detail.component.scss │ │ │ │ │ │ │ └── detail.component.ts │ │ │ │ │ │ ├── list/ │ │ │ │ │ │ │ ├── list.component.html │ │ │ │ │ │ │ ├── list.component.scss │ │ │ │ │ │ │ └── list.component.ts │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ ├── order.interface.ts │ │ │ │ │ │ │ └── orderproduct.interface.ts │ │ │ │ │ │ ├── orders-routing.module.ts │ │ │ │ │ │ ├── orders.module.ts │ │ │ │ │ │ └── orders.service.ts │ │ │ │ │ ├── products/ │ │ │ │ │ │ ├── create/ │ │ │ │ │ │ │ ├── create.component.html │ │ │ │ │ │ │ ├── create.component.scss │ │ │ │ │ │ │ └── create.component.ts │ │ │ │ │ │ ├── edit/ │ │ │ │ │ │ │ ├── edit.component.html │ │ │ │ │ │ │ ├── edit.component.scss │ │ │ │ │ │ │ └── edit.component.ts │ │ │ │ │ │ ├── list/ │ │ │ │ │ │ │ ├── list.component.html │ │ │ │ │ │ │ ├── list.component.scss │ │ │ │ │ │ │ └── list.component.ts │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ └── product.interface.ts │ │ │ │ │ │ ├── product.service.ts │ │ │ │ │ │ ├── products-routing.module.ts │ │ │ │ │ │ └── products.module.ts │ │ │ │ │ └── users/ │ │ │ │ │ ├── create/ │ │ │ │ │ │ ├── create.component.html │ │ │ │ │ │ ├── create.component.scss │ │ │ │ │ │ └── create.component.ts │ │ │ │ │ ├── list/ │ │ │ │ │ │ ├── list.component.html │ │ │ │ │ │ ├── list.component.scss │ │ │ │ │ │ └── list.component.ts │ │ │ │ │ ├── models/ │ │ │ │ │ │ └── user.ts │ │ │ │ │ ├── users-routing.module.ts │ │ │ │ │ ├── users.module.ts │ │ │ │ │ └── users.service.ts │ │ │ │ ├── assets/ │ │ │ │ │ └── .gitkeep │ │ │ │ ├── custom-theme.scss │ │ │ │ ├── environments/ │ │ │ │ │ ├── environment.prod.ts │ │ │ │ │ └── environment.ts │ │ │ │ ├── index.html │ │ │ │ ├── main.ts │ │ │ │ ├── polyfills.ts │ │ │ │ ├── styles/ │ │ │ │ │ ├── _variables.scss │ │ │ │ │ └── reset.scss │ │ │ │ ├── styles.scss │ │ │ │ └── test.ts │ │ │ ├── tsconfig.app.json │ │ │ ├── tsconfig.json │ │ │ └── tsconfig.spec.json │ │ ├── Landing/ │ │ │ ├── .browserslistrc │ │ │ ├── .editorconfig │ │ │ ├── .gitignore │ │ │ ├── README.md │ │ │ ├── angular.json │ │ │ ├── karma.conf.js │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── app/ │ │ │ │ │ ├── app-routing.module.ts │ │ │ │ │ ├── app.component.scss │ │ │ │ │ ├── app.component.ts │ │ │ │ │ ├── app.module.ts │ │ │ │ │ └── views/ │ │ │ │ │ ├── landing/ │ │ │ │ │ │ ├── landing.component.html │ │ │ │ │ │ ├── landing.component.scss │ │ │ │ │ │ └── landing.component.ts │ │ │ │ │ └── register/ │ │ │ │ │ ├── register.component.html │ │ │ │ │ ├── register.component.scss │ │ │ │ │ └── register.component.ts │ │ │ │ ├── assets/ │ │ │ │ │ └── .gitkeep │ │ │ │ ├── custom-theme.scss │ │ │ │ ├── environments/ │ │ │ │ │ ├── environment.prod.ts │ │ │ │ │ └── environment.ts │ │ │ │ ├── index.html │ │ │ │ ├── main.ts │ │ │ │ ├── polyfills.ts │ │ │ │ ├── styles/ │ │ │ │ │ ├── _variables.scss │ │ │ │ │ └── reset.scss │ │ │ │ ├── styles.scss │ │ │ │ └── test.ts │ │ │ ├── tsconfig.app.json │ │ │ ├── tsconfig.json │ │ │ └── tsconfig.spec.json │ │ └── dummy.txt │ ├── scripts/ │ │ ├── deploy-updates.sh │ │ ├── deployment.sh │ │ └── geturl.sh │ └── server/ │ ├── .gitignore │ ├── OrderService/ │ │ ├── order_models.py │ │ ├── order_service.py │ │ ├── order_service_dal.py │ │ └── requirements.txt │ ├── ProductService/ │ │ ├── product_models.py │ │ ├── product_service.py │ │ ├── product_service_dal.py │ │ └── requirements.txt │ ├── README.md │ ├── Resources/ │ │ ├── requirements.txt │ │ ├── shared_service_authorizer.py │ │ └── tenant_authorizer.py │ ├── TenantManagementService/ │ │ ├── requirements.txt │ │ ├── tenant-management.py │ │ ├── tenant-registration.py │ │ └── user-management.py │ ├── layers/ │ │ ├── auth_manager.py │ │ ├── logger.py │ │ ├── metrics_manager.py │ │ ├── requirements.txt │ │ └── utils.py │ ├── nested_templates/ │ │ ├── apigateway.yaml │ │ ├── apigateway_lambdapermissions.yaml │ │ ├── cognito.yaml │ │ ├── lambdafunctions.yaml │ │ ├── tables.yaml │ │ └── userinterface.yaml │ ├── shared-samconfig.toml │ ├── shared-template.yaml │ ├── tenant-samconfig.toml │ └── tenant-template.yaml ├── Lab4/ │ ├── client/ │ │ ├── Admin/ │ │ │ ├── .browserslistrc │ │ │ ├── .editorconfig │ │ │ ├── .gitignore │ │ │ ├── README.md │ │ │ ├── angular.json │ │ │ ├── karma.conf.js │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── app/ │ │ │ │ │ ├── _nav.ts │ │ │ │ │ ├── app-routing.module.ts │ │ │ │ │ ├── app.component.scss │ │ │ │ │ ├── app.component.ts │ │ │ │ │ ├── app.module.ts │ │ │ │ │ ├── interceptors/ │ │ │ │ │ │ ├── auth.interceptor.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── models/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── interfaces.ts │ │ │ │ │ ├── nav/ │ │ │ │ │ │ ├── nav.component.css │ │ │ │ │ │ ├── nav.component.html │ │ │ │ │ │ ├── nav.component.spec.ts │ │ │ │ │ │ └── nav.component.ts │ │ │ │ │ └── views/ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ ├── auth.component.html │ │ │ │ │ │ ├── auth.component.scss │ │ │ │ │ │ └── auth.component.ts │ │ │ │ │ ├── dashboard/ │ │ │ │ │ │ ├── dashboard-routing.module.ts │ │ │ │ │ │ ├── dashboard.component.html │ │ │ │ │ │ ├── dashboard.component.scss │ │ │ │ │ │ ├── dashboard.component.ts │ │ │ │ │ │ └── dashboard.module.ts │ │ │ │ │ ├── tenants/ │ │ │ │ │ │ ├── create/ │ │ │ │ │ │ │ ├── create.component.html │ │ │ │ │ │ │ ├── create.component.scss │ │ │ │ │ │ │ └── create.component.ts │ │ │ │ │ │ ├── list/ │ │ │ │ │ │ │ ├── list.component.html │ │ │ │ │ │ │ ├── list.component.scss │ │ │ │ │ │ │ └── list.component.ts │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ └── tenant.ts │ │ │ │ │ │ ├── tenants-routing.module.ts │ │ │ │ │ │ ├── tenants.module.ts │ │ │ │ │ │ └── tenants.service.ts │ │ │ │ │ └── users/ │ │ │ │ │ ├── create/ │ │ │ │ │ │ ├── create.component.html │ │ │ │ │ │ ├── create.component.scss │ │ │ │ │ │ └── create.component.ts │ │ │ │ │ ├── list/ │ │ │ │ │ │ ├── list.component.html │ │ │ │ │ │ ├── list.component.scss │ │ │ │ │ │ └── list.component.ts │ │ │ │ │ ├── models/ │ │ │ │ │ │ └── user.ts │ │ │ │ │ ├── users-routing.module.ts │ │ │ │ │ ├── users.module.ts │ │ │ │ │ └── users.service.ts │ │ │ │ ├── assets/ │ │ │ │ │ └── .gitkeep │ │ │ │ ├── aws-exports.ts │ │ │ │ ├── custom-theme.scss │ │ │ │ ├── environments/ │ │ │ │ │ ├── environment.prod.ts │ │ │ │ │ └── environment.ts │ │ │ │ ├── index.html │ │ │ │ ├── main.ts │ │ │ │ ├── polyfills.ts │ │ │ │ ├── styles/ │ │ │ │ │ ├── _variables.scss │ │ │ │ │ └── reset.scss │ │ │ │ ├── styles.scss │ │ │ │ └── test.ts │ │ │ ├── tsconfig.app.json │ │ │ ├── tsconfig.json │ │ │ └── tsconfig.spec.json │ │ ├── Application/ │ │ │ ├── .browserslistrc │ │ │ ├── .editorconfig │ │ │ ├── .gitignore │ │ │ ├── README.md │ │ │ ├── angular.json │ │ │ ├── cypress/ │ │ │ │ ├── README.md │ │ │ │ └── e2e/ │ │ │ │ └── 1-getting-started/ │ │ │ │ ├── basic-access.cy.js │ │ │ │ └── product-testing.cy.js │ │ │ ├── cypress.config.ts │ │ │ ├── cypress.env.json.example │ │ │ ├── karma.conf.js │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── app/ │ │ │ │ │ ├── _nav.ts │ │ │ │ │ ├── app-routing.module.ts │ │ │ │ │ ├── app.component.scss │ │ │ │ │ ├── app.component.ts │ │ │ │ │ ├── app.module.ts │ │ │ │ │ ├── cognito.guard.ts │ │ │ │ │ ├── interceptors/ │ │ │ │ │ │ ├── auth.interceptor.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── models/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── interfaces.ts │ │ │ │ │ ├── nav/ │ │ │ │ │ │ ├── nav.component.html │ │ │ │ │ │ ├── nav.component.scss │ │ │ │ │ │ └── nav.component.ts │ │ │ │ │ └── views/ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ ├── auth-configuration.service.ts │ │ │ │ │ │ ├── auth.component.html │ │ │ │ │ │ ├── auth.component.scss │ │ │ │ │ │ ├── auth.component.ts │ │ │ │ │ │ └── models/ │ │ │ │ │ │ └── config-params.ts │ │ │ │ │ ├── dashboard/ │ │ │ │ │ │ ├── dashboard-routing.module.ts │ │ │ │ │ │ ├── dashboard.component.html │ │ │ │ │ │ ├── dashboard.component.scss │ │ │ │ │ │ ├── dashboard.component.ts │ │ │ │ │ │ └── dashboard.module.ts │ │ │ │ │ ├── error/ │ │ │ │ │ │ ├── 404.component.html │ │ │ │ │ │ ├── 404.component.ts │ │ │ │ │ │ ├── 500.component.html │ │ │ │ │ │ ├── 500.component.ts │ │ │ │ │ │ ├── unauthorized.component.html │ │ │ │ │ │ ├── unauthorized.component.scss │ │ │ │ │ │ └── unauthorized.component.ts │ │ │ │ │ ├── orders/ │ │ │ │ │ │ ├── create/ │ │ │ │ │ │ │ ├── create.component.html │ │ │ │ │ │ │ ├── create.component.scss │ │ │ │ │ │ │ └── create.component.ts │ │ │ │ │ │ ├── detail/ │ │ │ │ │ │ │ ├── detail.component.html │ │ │ │ │ │ │ ├── detail.component.scss │ │ │ │ │ │ │ └── detail.component.ts │ │ │ │ │ │ ├── list/ │ │ │ │ │ │ │ ├── list.component.html │ │ │ │ │ │ │ ├── list.component.scss │ │ │ │ │ │ │ └── list.component.ts │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ ├── order.interface.ts │ │ │ │ │ │ │ └── orderproduct.interface.ts │ │ │ │ │ │ ├── orders-routing.module.ts │ │ │ │ │ │ ├── orders.module.ts │ │ │ │ │ │ └── orders.service.ts │ │ │ │ │ ├── products/ │ │ │ │ │ │ ├── create/ │ │ │ │ │ │ │ ├── create.component.html │ │ │ │ │ │ │ ├── create.component.scss │ │ │ │ │ │ │ └── create.component.ts │ │ │ │ │ │ ├── edit/ │ │ │ │ │ │ │ ├── edit.component.html │ │ │ │ │ │ │ ├── edit.component.scss │ │ │ │ │ │ │ └── edit.component.ts │ │ │ │ │ │ ├── list/ │ │ │ │ │ │ │ ├── list.component.html │ │ │ │ │ │ │ ├── list.component.scss │ │ │ │ │ │ │ └── list.component.ts │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ └── product.interface.ts │ │ │ │ │ │ ├── product.service.ts │ │ │ │ │ │ ├── products-routing.module.ts │ │ │ │ │ │ └── products.module.ts │ │ │ │ │ └── users/ │ │ │ │ │ ├── create/ │ │ │ │ │ │ ├── create.component.html │ │ │ │ │ │ ├── create.component.scss │ │ │ │ │ │ └── create.component.ts │ │ │ │ │ ├── list/ │ │ │ │ │ │ ├── list.component.html │ │ │ │ │ │ ├── list.component.scss │ │ │ │ │ │ └── list.component.ts │ │ │ │ │ ├── models/ │ │ │ │ │ │ └── user.ts │ │ │ │ │ ├── users-routing.module.ts │ │ │ │ │ ├── users.module.ts │ │ │ │ │ └── users.service.ts │ │ │ │ ├── assets/ │ │ │ │ │ └── .gitkeep │ │ │ │ ├── custom-theme.scss │ │ │ │ ├── environments/ │ │ │ │ │ ├── environment.prod.ts │ │ │ │ │ └── environment.ts │ │ │ │ ├── index.html │ │ │ │ ├── main.ts │ │ │ │ ├── polyfills.ts │ │ │ │ ├── styles/ │ │ │ │ │ ├── _variables.scss │ │ │ │ │ └── reset.scss │ │ │ │ ├── styles.scss │ │ │ │ └── test.ts │ │ │ ├── tsconfig.app.json │ │ │ ├── tsconfig.json │ │ │ └── tsconfig.spec.json │ │ ├── Landing/ │ │ │ ├── .browserslistrc │ │ │ ├── .editorconfig │ │ │ ├── .gitignore │ │ │ ├── README.md │ │ │ ├── angular.json │ │ │ ├── karma.conf.js │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── app/ │ │ │ │ │ ├── app-routing.module.ts │ │ │ │ │ ├── app.component.scss │ │ │ │ │ ├── app.component.ts │ │ │ │ │ ├── app.module.ts │ │ │ │ │ └── views/ │ │ │ │ │ ├── landing/ │ │ │ │ │ │ ├── landing.component.html │ │ │ │ │ │ ├── landing.component.scss │ │ │ │ │ │ └── landing.component.ts │ │ │ │ │ └── register/ │ │ │ │ │ ├── register.component.html │ │ │ │ │ ├── register.component.scss │ │ │ │ │ └── register.component.ts │ │ │ │ ├── assets/ │ │ │ │ │ └── .gitkeep │ │ │ │ ├── custom-theme.scss │ │ │ │ ├── environments/ │ │ │ │ │ ├── environment.prod.ts │ │ │ │ │ └── environment.ts │ │ │ │ ├── index.html │ │ │ │ ├── main.ts │ │ │ │ ├── polyfills.ts │ │ │ │ ├── styles/ │ │ │ │ │ ├── _variables.scss │ │ │ │ │ └── reset.scss │ │ │ │ ├── styles.scss │ │ │ │ └── test.ts │ │ │ ├── tsconfig.app.json │ │ │ ├── tsconfig.json │ │ │ └── tsconfig.spec.json │ │ └── dummy.txt │ ├── scripts/ │ │ ├── deployment.sh │ │ └── geturl.sh │ └── server/ │ ├── .gitignore │ ├── OrderService/ │ │ ├── order_models.py │ │ ├── order_service.py │ │ ├── order_service_dal.py │ │ └── requirements.txt │ ├── ProductService/ │ │ ├── product_models.py │ │ ├── product_service.py │ │ ├── product_service_dal.py │ │ └── requirements.txt │ ├── README.md │ ├── Resources/ │ │ ├── requirements.txt │ │ ├── shared_service_authorizer.py │ │ └── tenant_authorizer.py │ ├── TenantManagementService/ │ │ ├── requirements.txt │ │ ├── tenant-management.py │ │ ├── tenant-registration.py │ │ └── user-management.py │ ├── layers/ │ │ ├── auth_manager.py │ │ ├── logger.py │ │ ├── metrics_manager.py │ │ ├── requirements.txt │ │ └── utils.py │ ├── nested_templates/ │ │ ├── apigateway.yaml │ │ ├── apigateway_lambdapermissions.yaml │ │ ├── cognito.yaml │ │ ├── lambdafunctions.yaml │ │ ├── tables.yaml │ │ └── userinterface.yaml │ ├── shared-samconfig.toml │ ├── shared-template.yaml │ ├── tenant-samconfig.toml │ └── tenant-template.yaml ├── Lab5/ │ ├── client/ │ │ ├── Admin/ │ │ │ ├── .browserslistrc │ │ │ ├── .editorconfig │ │ │ ├── .gitignore │ │ │ ├── README.md │ │ │ ├── angular.json │ │ │ ├── karma.conf.js │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── app/ │ │ │ │ │ ├── _nav.ts │ │ │ │ │ ├── app-routing.module.ts │ │ │ │ │ ├── app.component.scss │ │ │ │ │ ├── app.component.ts │ │ │ │ │ ├── app.module.ts │ │ │ │ │ ├── interceptors/ │ │ │ │ │ │ ├── auth.interceptor.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── models/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── interfaces.ts │ │ │ │ │ ├── nav/ │ │ │ │ │ │ ├── nav.component.css │ │ │ │ │ │ ├── nav.component.html │ │ │ │ │ │ ├── nav.component.spec.ts │ │ │ │ │ │ └── nav.component.ts │ │ │ │ │ └── views/ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ ├── auth.component.html │ │ │ │ │ │ ├── auth.component.scss │ │ │ │ │ │ └── auth.component.ts │ │ │ │ │ ├── dashboard/ │ │ │ │ │ │ ├── dashboard-routing.module.ts │ │ │ │ │ │ ├── dashboard.component.html │ │ │ │ │ │ ├── dashboard.component.scss │ │ │ │ │ │ ├── dashboard.component.ts │ │ │ │ │ │ └── dashboard.module.ts │ │ │ │ │ ├── tenants/ │ │ │ │ │ │ ├── create/ │ │ │ │ │ │ │ ├── create.component.html │ │ │ │ │ │ │ ├── create.component.scss │ │ │ │ │ │ │ └── create.component.ts │ │ │ │ │ │ ├── list/ │ │ │ │ │ │ │ ├── list.component.html │ │ │ │ │ │ │ ├── list.component.scss │ │ │ │ │ │ │ └── list.component.ts │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ └── tenant.ts │ │ │ │ │ │ ├── tenants-routing.module.ts │ │ │ │ │ │ ├── tenants.module.ts │ │ │ │ │ │ └── tenants.service.ts │ │ │ │ │ └── users/ │ │ │ │ │ ├── create/ │ │ │ │ │ │ ├── create.component.html │ │ │ │ │ │ ├── create.component.scss │ │ │ │ │ │ └── create.component.ts │ │ │ │ │ ├── list/ │ │ │ │ │ │ ├── list.component.html │ │ │ │ │ │ ├── list.component.scss │ │ │ │ │ │ └── list.component.ts │ │ │ │ │ ├── models/ │ │ │ │ │ │ └── user.ts │ │ │ │ │ ├── users-routing.module.ts │ │ │ │ │ ├── users.module.ts │ │ │ │ │ └── users.service.ts │ │ │ │ ├── assets/ │ │ │ │ │ └── .gitkeep │ │ │ │ ├── aws-exports.ts │ │ │ │ ├── custom-theme.scss │ │ │ │ ├── environments/ │ │ │ │ │ ├── environment.prod.ts │ │ │ │ │ └── environment.ts │ │ │ │ ├── index.html │ │ │ │ ├── main.ts │ │ │ │ ├── polyfills.ts │ │ │ │ ├── styles/ │ │ │ │ │ ├── _variables.scss │ │ │ │ │ └── reset.scss │ │ │ │ ├── styles.scss │ │ │ │ └── test.ts │ │ │ ├── tsconfig.app.json │ │ │ ├── tsconfig.json │ │ │ └── tsconfig.spec.json │ │ ├── Application/ │ │ │ ├── .browserslistrc │ │ │ ├── .editorconfig │ │ │ ├── .gitignore │ │ │ ├── README.md │ │ │ ├── angular.json │ │ │ ├── cypress/ │ │ │ │ ├── README.md │ │ │ │ └── e2e/ │ │ │ │ └── 1-getting-started/ │ │ │ │ ├── basic-access.cy.js │ │ │ │ └── product-testing.cy.js │ │ │ ├── cypress.config.ts │ │ │ ├── cypress.env.json.example │ │ │ ├── karma.conf.js │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── app/ │ │ │ │ │ ├── _nav.ts │ │ │ │ │ ├── app-routing.module.ts │ │ │ │ │ ├── app.component.scss │ │ │ │ │ ├── app.component.ts │ │ │ │ │ ├── app.module.ts │ │ │ │ │ ├── cognito.guard.ts │ │ │ │ │ ├── interceptors/ │ │ │ │ │ │ ├── auth.interceptor.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── models/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── interfaces.ts │ │ │ │ │ ├── nav/ │ │ │ │ │ │ ├── nav.component.html │ │ │ │ │ │ ├── nav.component.scss │ │ │ │ │ │ └── nav.component.ts │ │ │ │ │ └── views/ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ ├── auth-configuration.service.ts │ │ │ │ │ │ ├── auth.component.html │ │ │ │ │ │ ├── auth.component.scss │ │ │ │ │ │ ├── auth.component.ts │ │ │ │ │ │ └── models/ │ │ │ │ │ │ └── config-params.ts │ │ │ │ │ ├── dashboard/ │ │ │ │ │ │ ├── dashboard-routing.module.ts │ │ │ │ │ │ ├── dashboard.component.html │ │ │ │ │ │ ├── dashboard.component.scss │ │ │ │ │ │ ├── dashboard.component.ts │ │ │ │ │ │ └── dashboard.module.ts │ │ │ │ │ ├── error/ │ │ │ │ │ │ ├── 404.component.html │ │ │ │ │ │ ├── 404.component.ts │ │ │ │ │ │ ├── 500.component.html │ │ │ │ │ │ ├── 500.component.ts │ │ │ │ │ │ ├── unauthorized.component.html │ │ │ │ │ │ ├── unauthorized.component.scss │ │ │ │ │ │ └── unauthorized.component.ts │ │ │ │ │ ├── orders/ │ │ │ │ │ │ ├── create/ │ │ │ │ │ │ │ ├── create.component.html │ │ │ │ │ │ │ ├── create.component.scss │ │ │ │ │ │ │ └── create.component.ts │ │ │ │ │ │ ├── detail/ │ │ │ │ │ │ │ ├── detail.component.html │ │ │ │ │ │ │ ├── detail.component.scss │ │ │ │ │ │ │ └── detail.component.ts │ │ │ │ │ │ ├── list/ │ │ │ │ │ │ │ ├── list.component.html │ │ │ │ │ │ │ ├── list.component.scss │ │ │ │ │ │ │ └── list.component.ts │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ ├── order.interface.ts │ │ │ │ │ │ │ └── orderproduct.interface.ts │ │ │ │ │ │ ├── orders-routing.module.ts │ │ │ │ │ │ ├── orders.module.ts │ │ │ │ │ │ └── orders.service.ts │ │ │ │ │ ├── products/ │ │ │ │ │ │ ├── create/ │ │ │ │ │ │ │ ├── create.component.html │ │ │ │ │ │ │ ├── create.component.scss │ │ │ │ │ │ │ └── create.component.ts │ │ │ │ │ │ ├── edit/ │ │ │ │ │ │ │ ├── edit.component.html │ │ │ │ │ │ │ ├── edit.component.scss │ │ │ │ │ │ │ └── edit.component.ts │ │ │ │ │ │ ├── list/ │ │ │ │ │ │ │ ├── list.component.html │ │ │ │ │ │ │ ├── list.component.scss │ │ │ │ │ │ │ └── list.component.ts │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ └── product.interface.ts │ │ │ │ │ │ ├── product.service.ts │ │ │ │ │ │ ├── products-routing.module.ts │ │ │ │ │ │ └── products.module.ts │ │ │ │ │ └── users/ │ │ │ │ │ ├── create/ │ │ │ │ │ │ ├── create.component.html │ │ │ │ │ │ ├── create.component.scss │ │ │ │ │ │ └── create.component.ts │ │ │ │ │ ├── list/ │ │ │ │ │ │ ├── list.component.html │ │ │ │ │ │ ├── list.component.scss │ │ │ │ │ │ └── list.component.ts │ │ │ │ │ ├── models/ │ │ │ │ │ │ └── user.ts │ │ │ │ │ ├── users-routing.module.ts │ │ │ │ │ ├── users.module.ts │ │ │ │ │ └── users.service.ts │ │ │ │ ├── assets/ │ │ │ │ │ └── .gitkeep │ │ │ │ ├── custom-theme.scss │ │ │ │ ├── environments/ │ │ │ │ │ ├── environment.prod.ts │ │ │ │ │ └── environment.ts │ │ │ │ ├── index.html │ │ │ │ ├── main.ts │ │ │ │ ├── polyfills.ts │ │ │ │ ├── styles/ │ │ │ │ │ ├── _variables.scss │ │ │ │ │ └── reset.scss │ │ │ │ ├── styles.scss │ │ │ │ └── test.ts │ │ │ ├── tsconfig.app.json │ │ │ ├── tsconfig.json │ │ │ └── tsconfig.spec.json │ │ └── Landing/ │ │ ├── .browserslistrc │ │ ├── .editorconfig │ │ ├── .gitignore │ │ ├── README.md │ │ ├── angular.json │ │ ├── karma.conf.js │ │ ├── package.json │ │ ├── src/ │ │ │ ├── app/ │ │ │ │ ├── app-routing.module.ts │ │ │ │ ├── app.component.scss │ │ │ │ ├── app.component.ts │ │ │ │ ├── app.module.ts │ │ │ │ └── views/ │ │ │ │ ├── landing/ │ │ │ │ │ ├── landing.component.html │ │ │ │ │ ├── landing.component.scss │ │ │ │ │ └── landing.component.ts │ │ │ │ └── register/ │ │ │ │ ├── register.component.html │ │ │ │ ├── register.component.scss │ │ │ │ └── register.component.ts │ │ │ ├── assets/ │ │ │ │ └── .gitkeep │ │ │ ├── custom-theme.scss │ │ │ ├── environments/ │ │ │ │ ├── environment.prod.ts │ │ │ │ └── environment.ts │ │ │ ├── index.html │ │ │ ├── main.ts │ │ │ ├── polyfills.ts │ │ │ ├── styles/ │ │ │ │ ├── _variables.scss │ │ │ │ └── reset.scss │ │ │ ├── styles.scss │ │ │ └── test.ts │ │ ├── tsconfig.app.json │ │ ├── tsconfig.json │ │ └── tsconfig.spec.json │ ├── scripts/ │ │ ├── deploy-updates.sh │ │ ├── deployment.sh │ │ └── geturl.sh │ └── server/ │ ├── .gitignore │ ├── OrderService/ │ │ ├── order_models.py │ │ ├── order_service.py │ │ ├── order_service_dal.py │ │ └── requirements.txt │ ├── ProductService/ │ │ ├── product_models.py │ │ ├── product_service.py │ │ ├── product_service_dal.py │ │ └── requirements.txt │ ├── README.md │ ├── Resources/ │ │ ├── requirements.txt │ │ ├── shared_service_authorizer.py │ │ └── tenant_authorizer.py │ ├── TenantManagementService/ │ │ ├── requirements.txt │ │ ├── tenant-management.py │ │ ├── tenant-provisioning.py │ │ ├── tenant-registration.py │ │ └── user-management.py │ ├── TenantPipeline/ │ │ ├── .gitignore │ │ ├── .npmignore │ │ ├── README.md │ │ ├── bin/ │ │ │ └── pipeline.ts │ │ ├── cdk.json │ │ ├── jest.config.js │ │ ├── lib/ │ │ │ └── serverless-saas-stack.ts │ │ ├── package.json │ │ ├── resources/ │ │ │ └── lambda-deploy-tenant-stack.py │ │ ├── test/ │ │ │ └── pipeline.test.ts │ │ └── tsconfig.json │ ├── custom_resources/ │ │ ├── requirements.txt │ │ ├── update_settings_table.py │ │ ├── update_tenant_apigatewayurl.py │ │ └── update_tenantstackmap_table.py │ ├── layers/ │ │ ├── auth_manager.py │ │ ├── logger.py │ │ ├── metrics_manager.py │ │ ├── requirements.txt │ │ └── utils.py │ ├── nested_templates/ │ │ ├── apigateway.yaml │ │ ├── apigateway_lambdapermissions.yaml │ │ ├── cognito.yaml │ │ ├── custom_resources.yaml │ │ ├── lambdafunctions.yaml │ │ ├── tables.yaml │ │ └── userinterface.yaml │ ├── shared-samconfig.toml │ ├── shared-template.yaml │ ├── tenant-buildspec.yml │ ├── tenant-samconfig.toml │ └── tenant-template.yaml ├── Lab6/ │ ├── client/ │ │ ├── Admin/ │ │ │ ├── .browserslistrc │ │ │ ├── .editorconfig │ │ │ ├── .gitignore │ │ │ ├── README.md │ │ │ ├── angular.json │ │ │ ├── karma.conf.js │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── app/ │ │ │ │ │ ├── _nav.ts │ │ │ │ │ ├── app-routing.module.ts │ │ │ │ │ ├── app.component.scss │ │ │ │ │ ├── app.component.ts │ │ │ │ │ ├── app.module.ts │ │ │ │ │ ├── interceptors/ │ │ │ │ │ │ ├── auth.interceptor.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── models/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── interfaces.ts │ │ │ │ │ ├── nav/ │ │ │ │ │ │ ├── nav.component.css │ │ │ │ │ │ ├── nav.component.html │ │ │ │ │ │ ├── nav.component.spec.ts │ │ │ │ │ │ └── nav.component.ts │ │ │ │ │ └── views/ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ ├── auth.component.html │ │ │ │ │ │ ├── auth.component.scss │ │ │ │ │ │ └── auth.component.ts │ │ │ │ │ ├── dashboard/ │ │ │ │ │ │ ├── dashboard-routing.module.ts │ │ │ │ │ │ ├── dashboard.component.html │ │ │ │ │ │ ├── dashboard.component.scss │ │ │ │ │ │ ├── dashboard.component.ts │ │ │ │ │ │ └── dashboard.module.ts │ │ │ │ │ ├── tenants/ │ │ │ │ │ │ ├── create/ │ │ │ │ │ │ │ ├── create.component.html │ │ │ │ │ │ │ ├── create.component.scss │ │ │ │ │ │ │ └── create.component.ts │ │ │ │ │ │ ├── list/ │ │ │ │ │ │ │ ├── list.component.html │ │ │ │ │ │ │ ├── list.component.scss │ │ │ │ │ │ │ └── list.component.ts │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ └── tenant.ts │ │ │ │ │ │ ├── tenants-routing.module.ts │ │ │ │ │ │ ├── tenants.module.ts │ │ │ │ │ │ └── tenants.service.ts │ │ │ │ │ └── users/ │ │ │ │ │ ├── create/ │ │ │ │ │ │ ├── create.component.html │ │ │ │ │ │ ├── create.component.scss │ │ │ │ │ │ └── create.component.ts │ │ │ │ │ ├── list/ │ │ │ │ │ │ ├── list.component.html │ │ │ │ │ │ ├── list.component.scss │ │ │ │ │ │ └── list.component.ts │ │ │ │ │ ├── models/ │ │ │ │ │ │ └── user.ts │ │ │ │ │ ├── users-routing.module.ts │ │ │ │ │ ├── users.module.ts │ │ │ │ │ └── users.service.ts │ │ │ │ ├── assets/ │ │ │ │ │ └── .gitkeep │ │ │ │ ├── aws-exports.ts │ │ │ │ ├── custom-theme.scss │ │ │ │ ├── environments/ │ │ │ │ │ ├── environment.prod.ts │ │ │ │ │ └── environment.ts │ │ │ │ ├── index.html │ │ │ │ ├── main.ts │ │ │ │ ├── polyfills.ts │ │ │ │ ├── styles/ │ │ │ │ │ ├── _variables.scss │ │ │ │ │ └── reset.scss │ │ │ │ ├── styles.scss │ │ │ │ └── test.ts │ │ │ ├── tsconfig.app.json │ │ │ ├── tsconfig.json │ │ │ └── tsconfig.spec.json │ │ ├── Application/ │ │ │ ├── .browserslistrc │ │ │ ├── .editorconfig │ │ │ ├── .gitignore │ │ │ ├── README.md │ │ │ ├── angular.json │ │ │ ├── cypress/ │ │ │ │ ├── README.md │ │ │ │ └── e2e/ │ │ │ │ └── 1-getting-started/ │ │ │ │ ├── basic-access.cy.js │ │ │ │ └── product-testing.cy.js │ │ │ ├── cypress.config.ts │ │ │ ├── cypress.env.json.example │ │ │ ├── karma.conf.js │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── app/ │ │ │ │ │ ├── _nav.ts │ │ │ │ │ ├── app-routing.module.ts │ │ │ │ │ ├── app.component.scss │ │ │ │ │ ├── app.component.ts │ │ │ │ │ ├── app.module.ts │ │ │ │ │ ├── cognito.guard.ts │ │ │ │ │ ├── interceptors/ │ │ │ │ │ │ ├── auth.interceptor.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── models/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── interfaces.ts │ │ │ │ │ ├── nav/ │ │ │ │ │ │ ├── nav.component.html │ │ │ │ │ │ ├── nav.component.scss │ │ │ │ │ │ └── nav.component.ts │ │ │ │ │ └── views/ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ ├── auth-configuration.service.ts │ │ │ │ │ │ ├── auth.component.html │ │ │ │ │ │ ├── auth.component.scss │ │ │ │ │ │ ├── auth.component.ts │ │ │ │ │ │ └── models/ │ │ │ │ │ │ └── config-params.ts │ │ │ │ │ ├── dashboard/ │ │ │ │ │ │ ├── dashboard-routing.module.ts │ │ │ │ │ │ ├── dashboard.component.html │ │ │ │ │ │ ├── dashboard.component.scss │ │ │ │ │ │ ├── dashboard.component.ts │ │ │ │ │ │ └── dashboard.module.ts │ │ │ │ │ ├── error/ │ │ │ │ │ │ ├── 404.component.html │ │ │ │ │ │ ├── 404.component.ts │ │ │ │ │ │ ├── 500.component.html │ │ │ │ │ │ ├── 500.component.ts │ │ │ │ │ │ ├── unauthorized.component.html │ │ │ │ │ │ ├── unauthorized.component.scss │ │ │ │ │ │ └── unauthorized.component.ts │ │ │ │ │ ├── orders/ │ │ │ │ │ │ ├── create/ │ │ │ │ │ │ │ ├── create.component.html │ │ │ │ │ │ │ ├── create.component.scss │ │ │ │ │ │ │ └── create.component.ts │ │ │ │ │ │ ├── detail/ │ │ │ │ │ │ │ ├── detail.component.html │ │ │ │ │ │ │ ├── detail.component.scss │ │ │ │ │ │ │ └── detail.component.ts │ │ │ │ │ │ ├── list/ │ │ │ │ │ │ │ ├── list.component.html │ │ │ │ │ │ │ ├── list.component.scss │ │ │ │ │ │ │ └── list.component.ts │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ ├── order.interface.ts │ │ │ │ │ │ │ └── orderproduct.interface.ts │ │ │ │ │ │ ├── orders-routing.module.ts │ │ │ │ │ │ ├── orders.module.ts │ │ │ │ │ │ └── orders.service.ts │ │ │ │ │ ├── products/ │ │ │ │ │ │ ├── create/ │ │ │ │ │ │ │ ├── create.component.html │ │ │ │ │ │ │ ├── create.component.scss │ │ │ │ │ │ │ └── create.component.ts │ │ │ │ │ │ ├── edit/ │ │ │ │ │ │ │ ├── edit.component.html │ │ │ │ │ │ │ ├── edit.component.scss │ │ │ │ │ │ │ └── edit.component.ts │ │ │ │ │ │ ├── list/ │ │ │ │ │ │ │ ├── list.component.html │ │ │ │ │ │ │ ├── list.component.scss │ │ │ │ │ │ │ └── list.component.ts │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ └── product.interface.ts │ │ │ │ │ │ ├── product.service.ts │ │ │ │ │ │ ├── products-routing.module.ts │ │ │ │ │ │ └── products.module.ts │ │ │ │ │ └── users/ │ │ │ │ │ ├── create/ │ │ │ │ │ │ ├── create.component.html │ │ │ │ │ │ ├── create.component.scss │ │ │ │ │ │ └── create.component.ts │ │ │ │ │ ├── list/ │ │ │ │ │ │ ├── list.component.html │ │ │ │ │ │ ├── list.component.scss │ │ │ │ │ │ └── list.component.ts │ │ │ │ │ ├── models/ │ │ │ │ │ │ └── user.ts │ │ │ │ │ ├── users-routing.module.ts │ │ │ │ │ ├── users.module.ts │ │ │ │ │ └── users.service.ts │ │ │ │ ├── assets/ │ │ │ │ │ └── .gitkeep │ │ │ │ ├── custom-theme.scss │ │ │ │ ├── environments/ │ │ │ │ │ ├── environment.prod.ts │ │ │ │ │ └── environment.ts │ │ │ │ ├── index.html │ │ │ │ ├── main.ts │ │ │ │ ├── polyfills.ts │ │ │ │ ├── styles/ │ │ │ │ │ ├── _variables.scss │ │ │ │ │ └── reset.scss │ │ │ │ ├── styles.scss │ │ │ │ └── test.ts │ │ │ ├── tsconfig.app.json │ │ │ ├── tsconfig.json │ │ │ └── tsconfig.spec.json │ │ └── Landing/ │ │ ├── .browserslistrc │ │ ├── .editorconfig │ │ ├── .gitignore │ │ ├── README.md │ │ ├── angular.json │ │ ├── karma.conf.js │ │ ├── package.json │ │ ├── src/ │ │ │ ├── app/ │ │ │ │ ├── app-routing.module.ts │ │ │ │ ├── app.component.scss │ │ │ │ ├── app.component.ts │ │ │ │ ├── app.module.ts │ │ │ │ └── views/ │ │ │ │ ├── landing/ │ │ │ │ │ ├── landing.component.html │ │ │ │ │ ├── landing.component.scss │ │ │ │ │ └── landing.component.ts │ │ │ │ └── register/ │ │ │ │ ├── register.component.html │ │ │ │ ├── register.component.scss │ │ │ │ └── register.component.ts │ │ │ ├── assets/ │ │ │ │ └── .gitkeep │ │ │ ├── custom-theme.scss │ │ │ ├── environments/ │ │ │ │ ├── environment.prod.ts │ │ │ │ └── environment.ts │ │ │ ├── index.html │ │ │ ├── main.ts │ │ │ ├── polyfills.ts │ │ │ ├── styles/ │ │ │ │ ├── _variables.scss │ │ │ │ └── reset.scss │ │ │ ├── styles.scss │ │ │ └── test.ts │ │ ├── tsconfig.app.json │ │ ├── tsconfig.json │ │ └── tsconfig.spec.json │ ├── scripts/ │ │ ├── deployment.sh │ │ ├── geturl.sh │ │ └── test-basic-tier-throttling.sh │ └── server/ │ ├── .gitignore │ ├── OrderService/ │ │ ├── order_models.py │ │ ├── order_service.py │ │ ├── order_service_dal.py │ │ └── requirements.txt │ ├── ProductService/ │ │ ├── product_models.py │ │ ├── product_service.py │ │ ├── product_service_dal.py │ │ └── requirements.txt │ ├── README.md │ ├── Resources/ │ │ ├── requirements.txt │ │ ├── shared_service_authorizer.py │ │ └── tenant_authorizer.py │ ├── TenantManagementService/ │ │ ├── requirements.txt │ │ ├── tenant-management.py │ │ ├── tenant-provisioning.py │ │ ├── tenant-registration.py │ │ └── user-management.py │ ├── TenantPipeline/ │ │ ├── .gitignore │ │ ├── .npmignore │ │ ├── README.md │ │ ├── bin/ │ │ │ └── pipeline.ts │ │ ├── cdk.json │ │ ├── jest.config.js │ │ ├── lib/ │ │ │ └── serverless-saas-stack.ts │ │ ├── package.json │ │ ├── resources/ │ │ │ └── lambda-deploy-tenant-stack.py │ │ ├── test/ │ │ │ └── pipeline.test.ts │ │ └── tsconfig.json │ ├── custom_resources/ │ │ ├── requirements.txt │ │ ├── update_settings_table.py │ │ ├── update_tenant_apigatewayurl.py │ │ ├── update_tenantstackmap_table.py │ │ └── update_usage_plan.py │ ├── layers/ │ │ ├── auth_manager.py │ │ ├── logger.py │ │ ├── metrics_manager.py │ │ ├── requirements.txt │ │ └── utils.py │ ├── nested_templates/ │ │ ├── apigateway.yaml │ │ ├── apigateway_lambdapermissions.yaml │ │ ├── cognito.yaml │ │ ├── custom_resources.yaml │ │ ├── lambdafunctions.yaml │ │ ├── tables.yaml │ │ └── userinterface.yaml │ ├── shared-samconfig.toml │ ├── shared-template.yaml │ ├── tenant-buildspec.yml │ ├── tenant-samconfig.toml │ └── tenant-template.yaml ├── Lab7/ │ ├── .aws-sam/ │ │ ├── build/ │ │ │ ├── GetDynamoDBUsageAndCostByTenant/ │ │ │ │ ├── requirements.txt │ │ │ │ └── tenant_usage_and_cost.py │ │ │ ├── GetLambdaUsageAndCostByTenant/ │ │ │ │ ├── requirements.txt │ │ │ │ └── tenant_usage_and_cost.py │ │ │ └── template.yaml │ │ └── build.toml │ ├── SampleCUR/ │ │ ├── 20221011_211731_00058_ff5sr_094c8542-2cfd-459d-96e1-10e3bc2ac7a6 │ │ ├── 20221011_211731_00058_ff5sr_1ded6019-91c5-470a-9533-5a63ff447fa4 │ │ ├── 20221011_211731_00058_ff5sr_265b33b8-c229-4a42-9c51-e54380ec03b0 │ │ ├── 20221011_211731_00058_ff5sr_36154ed1-7420-43dc-9bce-e30ff784b7fc │ │ ├── 20221011_211731_00058_ff5sr_4644e2bd-8b84-42df-bce7-35b29a0d3b83 │ │ ├── 20221011_211731_00058_ff5sr_47129e77-847c-420a-acac-3ce962bad5af │ │ ├── 20221011_211731_00058_ff5sr_4f484d50-53e1-40f6-84d3-1495af1981e7 │ │ ├── 20221011_211731_00058_ff5sr_501fe43e-84a3-4665-8ae6-e81ac0a8c024 │ │ ├── 20221011_211731_00058_ff5sr_586d15f5-4ff9-4231-9693-d601f8a96386 │ │ ├── 20221011_211731_00058_ff5sr_5cf01031-5bec-496a-9003-354edff50dcc │ │ ├── 20221011_211731_00058_ff5sr_74023afa-6ec8-4281-a5ce-b4771aac2ae0 │ │ ├── 20221011_211731_00058_ff5sr_7fb5dd51-6c56-41be-94fc-0cb6fc122cfd │ │ ├── 20221011_211731_00058_ff5sr_93372514-9952-4af6-a6f3-396921248c28 │ │ ├── 20221011_211731_00058_ff5sr_952352a7-a59a-4f6c-b359-aa2251d1f6a8 │ │ ├── 20221011_211731_00058_ff5sr_9ab989ba-acce-479c-bc60-c33acffa4c79 │ │ ├── 20221011_211731_00058_ff5sr_9b9fe19e-b145-49d1-9aed-135fec199529 │ │ ├── 20221011_211731_00058_ff5sr_a35b0a43-ebb6-44e1-949b-14d3e0472842 │ │ ├── 20221011_211731_00058_ff5sr_a6fa2ec0-8151-41a2-b6ef-f0f630ff956f │ │ ├── 20221011_211731_00058_ff5sr_aa65c209-65b9-4c95-873a-7c863ea5e0a7 │ │ ├── 20221011_211731_00058_ff5sr_b0cfe354-83a9-403b-9371-477dc4f4e8ef │ │ ├── 20221011_211731_00058_ff5sr_b6f519bf-0afa-480a-b5ab-5d75bec1490d │ │ ├── 20221011_211731_00058_ff5sr_c0ad9ac0-db23-4466-9eb2-d59b532bf15a │ │ ├── 20221011_211731_00058_ff5sr_c3499311-c8db-4272-875a-280a7473d9ec │ │ ├── 20221011_211731_00058_ff5sr_dc8883cc-c8fd-49e7-acd1-8d08867e157d │ │ ├── 20221011_211731_00058_ff5sr_e02f4092-0266-4104-9978-d5bcb8138da3 │ │ ├── 20221011_211731_00058_ff5sr_e7dfb4a0-e8eb-438b-96c6-16023f5a131b │ │ ├── 20221011_211731_00058_ff5sr_ebfd0670-22dd-40cb-a63d-61ebb593982a │ │ ├── 20221011_211731_00058_ff5sr_ecb0667a-7aa5-4fd0-8e85-8c3a5701dd14 │ │ ├── 20221011_211731_00058_ff5sr_f8c1b718-c6dc-4ee0-874d-3d41f6b12732 │ │ └── 20221011_211731_00058_ff5sr_faaa1338-ae7a-4565-ab3c-3dd6b1d63837 │ ├── TenantUsageAndCost/ │ │ ├── requirements.txt │ │ └── tenant_usage_and_cost.py │ ├── deployment.sh │ ├── lambdaoutput.json │ ├── samconfig.toml │ └── template.yaml ├── README.md ├── Solution/ │ ├── Lab1/ │ │ ├── client/ │ │ │ └── Application/ │ │ │ ├── .browserslistrc │ │ │ ├── .editorconfig │ │ │ ├── .gitignore │ │ │ ├── README.md │ │ │ ├── angular.json │ │ │ ├── karma.conf.js │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── app/ │ │ │ │ │ ├── _nav.ts │ │ │ │ │ ├── app-routing.module.ts │ │ │ │ │ ├── app.component.scss │ │ │ │ │ ├── app.component.ts │ │ │ │ │ ├── app.module.ts │ │ │ │ │ ├── models/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── interfaces.ts │ │ │ │ │ ├── nav/ │ │ │ │ │ │ ├── nav.component.html │ │ │ │ │ │ ├── nav.component.scss │ │ │ │ │ │ └── nav.component.ts │ │ │ │ │ └── views/ │ │ │ │ │ ├── dashboard/ │ │ │ │ │ │ ├── dashboard-routing.module.ts │ │ │ │ │ │ ├── dashboard.component.html │ │ │ │ │ │ ├── dashboard.component.scss │ │ │ │ │ │ ├── dashboard.component.ts │ │ │ │ │ │ └── dashboard.module.ts │ │ │ │ │ ├── orders/ │ │ │ │ │ │ ├── create/ │ │ │ │ │ │ │ ├── create.component.html │ │ │ │ │ │ │ ├── create.component.scss │ │ │ │ │ │ │ └── create.component.ts │ │ │ │ │ │ ├── detail/ │ │ │ │ │ │ │ ├── detail.component.html │ │ │ │ │ │ │ ├── detail.component.scss │ │ │ │ │ │ │ └── detail.component.ts │ │ │ │ │ │ ├── list/ │ │ │ │ │ │ │ ├── list.component.html │ │ │ │ │ │ │ ├── list.component.scss │ │ │ │ │ │ │ └── list.component.ts │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ ├── order.interface.ts │ │ │ │ │ │ │ └── orderproduct.interface.ts │ │ │ │ │ │ ├── orders-routing.module.ts │ │ │ │ │ │ ├── orders.module.ts │ │ │ │ │ │ └── orders.service.ts │ │ │ │ │ └── products/ │ │ │ │ │ ├── create/ │ │ │ │ │ │ ├── create.component.html │ │ │ │ │ │ ├── create.component.scss │ │ │ │ │ │ └── create.component.ts │ │ │ │ │ ├── edit/ │ │ │ │ │ │ ├── edit.component.html │ │ │ │ │ │ ├── edit.component.scss │ │ │ │ │ │ └── edit.component.ts │ │ │ │ │ ├── list/ │ │ │ │ │ │ ├── list.component.html │ │ │ │ │ │ ├── list.component.scss │ │ │ │ │ │ └── list.component.ts │ │ │ │ │ ├── models/ │ │ │ │ │ │ └── product.interface.ts │ │ │ │ │ ├── product.service.ts │ │ │ │ │ ├── products-routing.module.ts │ │ │ │ │ └── products.module.ts │ │ │ │ ├── assets/ │ │ │ │ │ └── .gitkeep │ │ │ │ ├── custom-theme.scss │ │ │ │ ├── environments/ │ │ │ │ │ ├── environment.prod.ts │ │ │ │ │ └── environment.ts │ │ │ │ ├── index.html │ │ │ │ ├── main.ts │ │ │ │ ├── polyfills.ts │ │ │ │ ├── styles/ │ │ │ │ │ ├── _variables.scss │ │ │ │ │ └── reset.scss │ │ │ │ ├── styles.scss │ │ │ │ └── test.ts │ │ │ ├── tsconfig.app.json │ │ │ ├── tsconfig.json │ │ │ └── tsconfig.spec.json │ │ ├── scripts/ │ │ │ ├── deployment.sh │ │ │ └── geturl.sh │ │ └── server/ │ │ ├── .gitignore │ │ ├── OrderService/ │ │ │ ├── order_models.py │ │ │ ├── order_service.py │ │ │ ├── order_service_dal.py │ │ │ └── requirements.txt │ │ ├── ProductService/ │ │ │ ├── product_models.py │ │ │ ├── product_service.py │ │ │ ├── product_service_dal.py │ │ │ └── requirements.txt │ │ ├── README.md │ │ ├── layers/ │ │ │ ├── logger.py │ │ │ ├── requirements.txt │ │ │ └── utils.py │ │ ├── samconfig.toml │ │ └── template.yaml │ ├── Lab2/ │ │ ├── client/ │ │ │ ├── Admin/ │ │ │ │ ├── .browserslistrc │ │ │ │ ├── .editorconfig │ │ │ │ ├── .gitignore │ │ │ │ ├── README.md │ │ │ │ ├── angular.json │ │ │ │ ├── karma.conf.js │ │ │ │ ├── package.json │ │ │ │ ├── src/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── _nav.ts │ │ │ │ │ │ ├── app-routing.module.ts │ │ │ │ │ │ ├── app.component.scss │ │ │ │ │ │ ├── app.component.ts │ │ │ │ │ │ ├── app.module.ts │ │ │ │ │ │ ├── interceptors/ │ │ │ │ │ │ │ ├── auth.interceptor.ts │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── interfaces.ts │ │ │ │ │ │ ├── nav/ │ │ │ │ │ │ │ ├── nav.component.css │ │ │ │ │ │ │ ├── nav.component.html │ │ │ │ │ │ │ ├── nav.component.spec.ts │ │ │ │ │ │ │ └── nav.component.ts │ │ │ │ │ │ └── views/ │ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ │ ├── auth.component.html │ │ │ │ │ │ │ ├── auth.component.scss │ │ │ │ │ │ │ └── auth.component.ts │ │ │ │ │ │ ├── dashboard/ │ │ │ │ │ │ │ ├── dashboard-routing.module.ts │ │ │ │ │ │ │ ├── dashboard.component.html │ │ │ │ │ │ │ ├── dashboard.component.scss │ │ │ │ │ │ │ ├── dashboard.component.ts │ │ │ │ │ │ │ └── dashboard.module.ts │ │ │ │ │ │ ├── tenants/ │ │ │ │ │ │ │ ├── create/ │ │ │ │ │ │ │ │ ├── create.component.html │ │ │ │ │ │ │ │ ├── create.component.scss │ │ │ │ │ │ │ │ └── create.component.ts │ │ │ │ │ │ │ ├── list/ │ │ │ │ │ │ │ │ ├── list.component.html │ │ │ │ │ │ │ │ ├── list.component.scss │ │ │ │ │ │ │ │ └── list.component.ts │ │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ │ └── tenant.ts │ │ │ │ │ │ │ ├── tenants-routing.module.ts │ │ │ │ │ │ │ ├── tenants.module.ts │ │ │ │ │ │ │ └── tenants.service.ts │ │ │ │ │ │ └── users/ │ │ │ │ │ │ ├── create/ │ │ │ │ │ │ │ ├── create.component.html │ │ │ │ │ │ │ ├── create.component.scss │ │ │ │ │ │ │ └── create.component.ts │ │ │ │ │ │ ├── list/ │ │ │ │ │ │ │ ├── list.component.html │ │ │ │ │ │ │ ├── list.component.scss │ │ │ │ │ │ │ └── list.component.ts │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ └── user.ts │ │ │ │ │ │ ├── users-routing.module.ts │ │ │ │ │ │ ├── users.module.ts │ │ │ │ │ │ └── users.service.ts │ │ │ │ │ ├── assets/ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ ├── aws-exports.ts │ │ │ │ │ ├── custom-theme.scss │ │ │ │ │ ├── environments/ │ │ │ │ │ │ ├── environment.prod.ts │ │ │ │ │ │ └── environment.ts │ │ │ │ │ ├── index.html │ │ │ │ │ ├── main.ts │ │ │ │ │ ├── polyfills.ts │ │ │ │ │ ├── styles/ │ │ │ │ │ │ ├── _variables.scss │ │ │ │ │ │ └── reset.scss │ │ │ │ │ ├── styles.scss │ │ │ │ │ └── test.ts │ │ │ │ ├── tsconfig.app.json │ │ │ │ ├── tsconfig.json │ │ │ │ └── tsconfig.spec.json │ │ │ └── Landing/ │ │ │ ├── .browserslistrc │ │ │ ├── .editorconfig │ │ │ ├── .gitignore │ │ │ ├── README.md │ │ │ ├── angular.json │ │ │ ├── karma.conf.js │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── app/ │ │ │ │ │ ├── app-routing.module.ts │ │ │ │ │ ├── app.component.scss │ │ │ │ │ ├── app.component.ts │ │ │ │ │ ├── app.module.ts │ │ │ │ │ └── views/ │ │ │ │ │ ├── landing/ │ │ │ │ │ │ ├── landing.component.html │ │ │ │ │ │ ├── landing.component.scss │ │ │ │ │ │ └── landing.component.ts │ │ │ │ │ └── register/ │ │ │ │ │ ├── register.component.html │ │ │ │ │ ├── register.component.scss │ │ │ │ │ └── register.component.ts │ │ │ │ ├── assets/ │ │ │ │ │ └── .gitkeep │ │ │ │ ├── custom-theme.scss │ │ │ │ ├── environments/ │ │ │ │ │ ├── environment.prod.ts │ │ │ │ │ └── environment.ts │ │ │ │ ├── index.html │ │ │ │ ├── main.ts │ │ │ │ ├── polyfills.ts │ │ │ │ ├── styles/ │ │ │ │ │ ├── _variables.scss │ │ │ │ │ └── reset.scss │ │ │ │ ├── styles.scss │ │ │ │ └── test.ts │ │ │ ├── tsconfig.app.json │ │ │ ├── tsconfig.json │ │ │ └── tsconfig.spec.json │ │ ├── scripts/ │ │ │ ├── deploy-updates.sh │ │ │ ├── deployment.sh │ │ │ └── geturl.sh │ │ └── server/ │ │ ├── .gitignore │ │ ├── OrderService/ │ │ │ ├── order_models.py │ │ │ ├── order_service.py │ │ │ ├── order_service_dal.py │ │ │ └── requirements.txt │ │ ├── ProductService/ │ │ │ ├── product_models.py │ │ │ ├── product_service.py │ │ │ ├── product_service_dal.py │ │ │ └── requirements.txt │ │ ├── README.md │ │ ├── Resources/ │ │ │ ├── requirements.txt │ │ │ └── shared_service_authorizer.py │ │ ├── TenantManagementService/ │ │ │ ├── requirements.txt │ │ │ ├── tenant-management.py │ │ │ ├── tenant-registration.py │ │ │ └── user-management.py │ │ ├── layers/ │ │ │ ├── logger.py │ │ │ ├── requirements.txt │ │ │ └── utils.py │ │ ├── nested_templates/ │ │ │ ├── apigateway.yaml │ │ │ ├── apigateway_lambdapermissions.yaml │ │ │ ├── cognito.yaml │ │ │ ├── lambdafunctions.yaml │ │ │ ├── tables.yaml │ │ │ └── userinterface.yaml │ │ ├── samconfig.toml │ │ └── template.yaml │ ├── Lab3/ │ │ ├── client/ │ │ │ ├── Admin/ │ │ │ │ ├── .browserslistrc │ │ │ │ ├── .editorconfig │ │ │ │ ├── .gitignore │ │ │ │ ├── README.md │ │ │ │ ├── angular.json │ │ │ │ ├── karma.conf.js │ │ │ │ ├── package.json │ │ │ │ ├── src/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── _nav.ts │ │ │ │ │ │ ├── app-routing.module.ts │ │ │ │ │ │ ├── app.component.scss │ │ │ │ │ │ ├── app.component.ts │ │ │ │ │ │ ├── app.module.ts │ │ │ │ │ │ ├── interceptors/ │ │ │ │ │ │ │ ├── auth.interceptor.ts │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── interfaces.ts │ │ │ │ │ │ ├── nav/ │ │ │ │ │ │ │ ├── nav.component.css │ │ │ │ │ │ │ ├── nav.component.html │ │ │ │ │ │ │ ├── nav.component.spec.ts │ │ │ │ │ │ │ └── nav.component.ts │ │ │ │ │ │ └── views/ │ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ │ ├── auth.component.html │ │ │ │ │ │ │ ├── auth.component.scss │ │ │ │ │ │ │ └── auth.component.ts │ │ │ │ │ │ ├── dashboard/ │ │ │ │ │ │ │ ├── dashboard-routing.module.ts │ │ │ │ │ │ │ ├── dashboard.component.html │ │ │ │ │ │ │ ├── dashboard.component.scss │ │ │ │ │ │ │ ├── dashboard.component.ts │ │ │ │ │ │ │ └── dashboard.module.ts │ │ │ │ │ │ ├── tenants/ │ │ │ │ │ │ │ ├── create/ │ │ │ │ │ │ │ │ ├── create.component.html │ │ │ │ │ │ │ │ ├── create.component.scss │ │ │ │ │ │ │ │ └── create.component.ts │ │ │ │ │ │ │ ├── list/ │ │ │ │ │ │ │ │ ├── list.component.html │ │ │ │ │ │ │ │ ├── list.component.scss │ │ │ │ │ │ │ │ └── list.component.ts │ │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ │ └── tenant.ts │ │ │ │ │ │ │ ├── tenants-routing.module.ts │ │ │ │ │ │ │ ├── tenants.module.ts │ │ │ │ │ │ │ └── tenants.service.ts │ │ │ │ │ │ └── users/ │ │ │ │ │ │ ├── create/ │ │ │ │ │ │ │ ├── create.component.html │ │ │ │ │ │ │ ├── create.component.scss │ │ │ │ │ │ │ └── create.component.ts │ │ │ │ │ │ ├── list/ │ │ │ │ │ │ │ ├── list.component.html │ │ │ │ │ │ │ ├── list.component.scss │ │ │ │ │ │ │ └── list.component.ts │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ └── user.ts │ │ │ │ │ │ ├── users-routing.module.ts │ │ │ │ │ │ ├── users.module.ts │ │ │ │ │ │ └── users.service.ts │ │ │ │ │ ├── assets/ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ ├── aws-exports.ts │ │ │ │ │ ├── custom-theme.scss │ │ │ │ │ ├── environments/ │ │ │ │ │ │ ├── environment.prod.ts │ │ │ │ │ │ └── environment.ts │ │ │ │ │ ├── index.html │ │ │ │ │ ├── main.ts │ │ │ │ │ ├── polyfills.ts │ │ │ │ │ ├── styles/ │ │ │ │ │ │ ├── _variables.scss │ │ │ │ │ │ └── reset.scss │ │ │ │ │ ├── styles.scss │ │ │ │ │ └── test.ts │ │ │ │ ├── tsconfig.app.json │ │ │ │ ├── tsconfig.json │ │ │ │ └── tsconfig.spec.json │ │ │ ├── Application/ │ │ │ │ ├── .browserslistrc │ │ │ │ ├── .editorconfig │ │ │ │ ├── .gitignore │ │ │ │ ├── README.md │ │ │ │ ├── angular.json │ │ │ │ ├── cypress/ │ │ │ │ │ ├── README.md │ │ │ │ │ └── e2e/ │ │ │ │ │ └── 1-getting-started/ │ │ │ │ │ ├── basic-access.cy.js │ │ │ │ │ └── product-testing.cy.js │ │ │ │ ├── cypress.config.ts │ │ │ │ ├── cypress.env.json.example │ │ │ │ ├── karma.conf.js │ │ │ │ ├── package.json │ │ │ │ ├── src/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── _nav.ts │ │ │ │ │ │ ├── app-routing.module.ts │ │ │ │ │ │ ├── app.component.scss │ │ │ │ │ │ ├── app.component.ts │ │ │ │ │ │ ├── app.module.ts │ │ │ │ │ │ ├── cognito.guard.ts │ │ │ │ │ │ ├── interceptors/ │ │ │ │ │ │ │ ├── auth.interceptor.ts │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── interfaces.ts │ │ │ │ │ │ ├── nav/ │ │ │ │ │ │ │ ├── nav.component.html │ │ │ │ │ │ │ ├── nav.component.scss │ │ │ │ │ │ │ └── nav.component.ts │ │ │ │ │ │ └── views/ │ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ │ ├── auth-configuration.service.ts │ │ │ │ │ │ │ ├── auth.component.html │ │ │ │ │ │ │ ├── auth.component.scss │ │ │ │ │ │ │ ├── auth.component.ts │ │ │ │ │ │ │ └── models/ │ │ │ │ │ │ │ └── config-params.ts │ │ │ │ │ │ ├── dashboard/ │ │ │ │ │ │ │ ├── dashboard-routing.module.ts │ │ │ │ │ │ │ ├── dashboard.component.html │ │ │ │ │ │ │ ├── dashboard.component.scss │ │ │ │ │ │ │ ├── dashboard.component.ts │ │ │ │ │ │ │ └── dashboard.module.ts │ │ │ │ │ │ ├── error/ │ │ │ │ │ │ │ ├── 404.component.html │ │ │ │ │ │ │ ├── 404.component.ts │ │ │ │ │ │ │ ├── 500.component.html │ │ │ │ │ │ │ ├── 500.component.ts │ │ │ │ │ │ │ ├── unauthorized.component.html │ │ │ │ │ │ │ ├── unauthorized.component.scss │ │ │ │ │ │ │ └── unauthorized.component.ts │ │ │ │ │ │ ├── orders/ │ │ │ │ │ │ │ ├── create/ │ │ │ │ │ │ │ │ ├── create.component.html │ │ │ │ │ │ │ │ ├── create.component.scss │ │ │ │ │ │ │ │ └── create.component.ts │ │ │ │ │ │ │ ├── detail/ │ │ │ │ │ │ │ │ ├── detail.component.html │ │ │ │ │ │ │ │ ├── detail.component.scss │ │ │ │ │ │ │ │ └── detail.component.ts │ │ │ │ │ │ │ ├── list/ │ │ │ │ │ │ │ │ ├── list.component.html │ │ │ │ │ │ │ │ ├── list.component.scss │ │ │ │ │ │ │ │ └── list.component.ts │ │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ │ ├── order.interface.ts │ │ │ │ │ │ │ │ └── orderproduct.interface.ts │ │ │ │ │ │ │ ├── orders-routing.module.ts │ │ │ │ │ │ │ ├── orders.module.ts │ │ │ │ │ │ │ └── orders.service.ts │ │ │ │ │ │ ├── products/ │ │ │ │ │ │ │ ├── create/ │ │ │ │ │ │ │ │ ├── create.component.html │ │ │ │ │ │ │ │ ├── create.component.scss │ │ │ │ │ │ │ │ └── create.component.ts │ │ │ │ │ │ │ ├── edit/ │ │ │ │ │ │ │ │ ├── edit.component.html │ │ │ │ │ │ │ │ ├── edit.component.scss │ │ │ │ │ │ │ │ └── edit.component.ts │ │ │ │ │ │ │ ├── list/ │ │ │ │ │ │ │ │ ├── list.component.html │ │ │ │ │ │ │ │ ├── list.component.scss │ │ │ │ │ │ │ │ └── list.component.ts │ │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ │ └── product.interface.ts │ │ │ │ │ │ │ ├── product.service.ts │ │ │ │ │ │ │ ├── products-routing.module.ts │ │ │ │ │ │ │ └── products.module.ts │ │ │ │ │ │ └── users/ │ │ │ │ │ │ ├── create/ │ │ │ │ │ │ │ ├── create.component.html │ │ │ │ │ │ │ ├── create.component.scss │ │ │ │ │ │ │ └── create.component.ts │ │ │ │ │ │ ├── list/ │ │ │ │ │ │ │ ├── list.component.html │ │ │ │ │ │ │ ├── list.component.scss │ │ │ │ │ │ │ └── list.component.ts │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ └── user.ts │ │ │ │ │ │ ├── users-routing.module.ts │ │ │ │ │ │ ├── users.module.ts │ │ │ │ │ │ └── users.service.ts │ │ │ │ │ ├── assets/ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ ├── custom-theme.scss │ │ │ │ │ ├── environments/ │ │ │ │ │ │ ├── environment.prod.ts │ │ │ │ │ │ └── environment.ts │ │ │ │ │ ├── index.html │ │ │ │ │ ├── main.ts │ │ │ │ │ ├── polyfills.ts │ │ │ │ │ ├── styles/ │ │ │ │ │ │ ├── _variables.scss │ │ │ │ │ │ └── reset.scss │ │ │ │ │ ├── styles.scss │ │ │ │ │ └── test.ts │ │ │ │ ├── tsconfig.app.json │ │ │ │ ├── tsconfig.json │ │ │ │ └── tsconfig.spec.json │ │ │ ├── Landing/ │ │ │ │ ├── .browserslistrc │ │ │ │ ├── .editorconfig │ │ │ │ ├── .gitignore │ │ │ │ ├── README.md │ │ │ │ ├── angular.json │ │ │ │ ├── karma.conf.js │ │ │ │ ├── package.json │ │ │ │ ├── src/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── app-routing.module.ts │ │ │ │ │ │ ├── app.component.scss │ │ │ │ │ │ ├── app.component.ts │ │ │ │ │ │ ├── app.module.ts │ │ │ │ │ │ └── views/ │ │ │ │ │ │ ├── landing/ │ │ │ │ │ │ │ ├── landing.component.html │ │ │ │ │ │ │ ├── landing.component.scss │ │ │ │ │ │ │ └── landing.component.ts │ │ │ │ │ │ └── register/ │ │ │ │ │ │ ├── register.component.html │ │ │ │ │ │ ├── register.component.scss │ │ │ │ │ │ └── register.component.ts │ │ │ │ │ ├── assets/ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ ├── custom-theme.scss │ │ │ │ │ ├── environments/ │ │ │ │ │ │ ├── environment.prod.ts │ │ │ │ │ │ └── environment.ts │ │ │ │ │ ├── index.html │ │ │ │ │ ├── main.ts │ │ │ │ │ ├── polyfills.ts │ │ │ │ │ ├── styles/ │ │ │ │ │ │ ├── _variables.scss │ │ │ │ │ │ └── reset.scss │ │ │ │ │ ├── styles.scss │ │ │ │ │ └── test.ts │ │ │ │ ├── tsconfig.app.json │ │ │ │ ├── tsconfig.json │ │ │ │ └── tsconfig.spec.json │ │ │ └── dummy.txt │ │ ├── scripts/ │ │ │ ├── deploy-updates.sh │ │ │ ├── deployment.sh │ │ │ └── geturl.sh │ │ └── server/ │ │ ├── .gitignore │ │ ├── OrderService/ │ │ │ ├── order_models.py │ │ │ ├── order_service.py │ │ │ ├── order_service_dal.py │ │ │ └── requirements.txt │ │ ├── ProductService/ │ │ │ ├── product_models.py │ │ │ ├── product_service.py │ │ │ ├── product_service_dal.py │ │ │ └── requirements.txt │ │ ├── README.md │ │ ├── Resources/ │ │ │ ├── requirements.txt │ │ │ ├── shared_service_authorizer.py │ │ │ └── tenant_authorizer.py │ │ ├── TenantManagementService/ │ │ │ ├── requirements.txt │ │ │ ├── tenant-management.py │ │ │ ├── tenant-registration.py │ │ │ └── user-management.py │ │ ├── layers/ │ │ │ ├── auth_manager.py │ │ │ ├── logger.py │ │ │ ├── metrics_manager.py │ │ │ ├── requirements.txt │ │ │ └── utils.py │ │ ├── nested_templates/ │ │ │ ├── apigateway.yaml │ │ │ ├── apigateway_lambdapermissions.yaml │ │ │ ├── cognito.yaml │ │ │ ├── lambdafunctions.yaml │ │ │ ├── tables.yaml │ │ │ └── userinterface.yaml │ │ ├── shared-samconfig.toml │ │ ├── shared-template.yaml │ │ ├── tenant-samconfig.toml │ │ └── tenant-template.yaml │ ├── Lab4/ │ │ ├── client/ │ │ │ ├── Admin/ │ │ │ │ ├── .browserslistrc │ │ │ │ ├── .editorconfig │ │ │ │ ├── .gitignore │ │ │ │ ├── README.md │ │ │ │ ├── angular.json │ │ │ │ ├── karma.conf.js │ │ │ │ ├── package.json │ │ │ │ ├── src/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── _nav.ts │ │ │ │ │ │ ├── app-routing.module.ts │ │ │ │ │ │ ├── app.component.scss │ │ │ │ │ │ ├── app.component.ts │ │ │ │ │ │ ├── app.module.ts │ │ │ │ │ │ ├── interceptors/ │ │ │ │ │ │ │ ├── auth.interceptor.ts │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── interfaces.ts │ │ │ │ │ │ ├── nav/ │ │ │ │ │ │ │ ├── nav.component.css │ │ │ │ │ │ │ ├── nav.component.html │ │ │ │ │ │ │ ├── nav.component.spec.ts │ │ │ │ │ │ │ └── nav.component.ts │ │ │ │ │ │ └── views/ │ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ │ ├── auth.component.html │ │ │ │ │ │ │ ├── auth.component.scss │ │ │ │ │ │ │ └── auth.component.ts │ │ │ │ │ │ ├── dashboard/ │ │ │ │ │ │ │ ├── dashboard-routing.module.ts │ │ │ │ │ │ │ ├── dashboard.component.html │ │ │ │ │ │ │ ├── dashboard.component.scss │ │ │ │ │ │ │ ├── dashboard.component.ts │ │ │ │ │ │ │ └── dashboard.module.ts │ │ │ │ │ │ ├── tenants/ │ │ │ │ │ │ │ ├── create/ │ │ │ │ │ │ │ │ ├── create.component.html │ │ │ │ │ │ │ │ ├── create.component.scss │ │ │ │ │ │ │ │ └── create.component.ts │ │ │ │ │ │ │ ├── list/ │ │ │ │ │ │ │ │ ├── list.component.html │ │ │ │ │ │ │ │ ├── list.component.scss │ │ │ │ │ │ │ │ └── list.component.ts │ │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ │ └── tenant.ts │ │ │ │ │ │ │ ├── tenants-routing.module.ts │ │ │ │ │ │ │ ├── tenants.module.ts │ │ │ │ │ │ │ └── tenants.service.ts │ │ │ │ │ │ └── users/ │ │ │ │ │ │ ├── create/ │ │ │ │ │ │ │ ├── create.component.html │ │ │ │ │ │ │ ├── create.component.scss │ │ │ │ │ │ │ └── create.component.ts │ │ │ │ │ │ ├── list/ │ │ │ │ │ │ │ ├── list.component.html │ │ │ │ │ │ │ ├── list.component.scss │ │ │ │ │ │ │ └── list.component.ts │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ └── user.ts │ │ │ │ │ │ ├── users-routing.module.ts │ │ │ │ │ │ ├── users.module.ts │ │ │ │ │ │ └── users.service.ts │ │ │ │ │ ├── assets/ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ ├── aws-exports.ts │ │ │ │ │ ├── custom-theme.scss │ │ │ │ │ ├── environments/ │ │ │ │ │ │ ├── environment.prod.ts │ │ │ │ │ │ └── environment.ts │ │ │ │ │ ├── index.html │ │ │ │ │ ├── main.ts │ │ │ │ │ ├── polyfills.ts │ │ │ │ │ ├── styles/ │ │ │ │ │ │ ├── _variables.scss │ │ │ │ │ │ └── reset.scss │ │ │ │ │ ├── styles.scss │ │ │ │ │ └── test.ts │ │ │ │ ├── tsconfig.app.json │ │ │ │ ├── tsconfig.json │ │ │ │ └── tsconfig.spec.json │ │ │ ├── Application/ │ │ │ │ ├── .browserslistrc │ │ │ │ ├── .editorconfig │ │ │ │ ├── .gitignore │ │ │ │ ├── README.md │ │ │ │ ├── angular.json │ │ │ │ ├── cypress/ │ │ │ │ │ ├── README.md │ │ │ │ │ └── e2e/ │ │ │ │ │ └── 1-getting-started/ │ │ │ │ │ ├── basic-access.cy.js │ │ │ │ │ └── product-testing.cy.js │ │ │ │ ├── cypress.config.ts │ │ │ │ ├── cypress.env.json.example │ │ │ │ ├── karma.conf.js │ │ │ │ ├── package.json │ │ │ │ ├── src/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── _nav.ts │ │ │ │ │ │ ├── app-routing.module.ts │ │ │ │ │ │ ├── app.component.scss │ │ │ │ │ │ ├── app.component.ts │ │ │ │ │ │ ├── app.module.ts │ │ │ │ │ │ ├── cognito.guard.ts │ │ │ │ │ │ ├── interceptors/ │ │ │ │ │ │ │ ├── auth.interceptor.ts │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── interfaces.ts │ │ │ │ │ │ ├── nav/ │ │ │ │ │ │ │ ├── nav.component.html │ │ │ │ │ │ │ ├── nav.component.scss │ │ │ │ │ │ │ └── nav.component.ts │ │ │ │ │ │ └── views/ │ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ │ ├── auth-configuration.service.ts │ │ │ │ │ │ │ ├── auth.component.html │ │ │ │ │ │ │ ├── auth.component.scss │ │ │ │ │ │ │ ├── auth.component.ts │ │ │ │ │ │ │ └── models/ │ │ │ │ │ │ │ └── config-params.ts │ │ │ │ │ │ ├── dashboard/ │ │ │ │ │ │ │ ├── dashboard-routing.module.ts │ │ │ │ │ │ │ ├── dashboard.component.html │ │ │ │ │ │ │ ├── dashboard.component.scss │ │ │ │ │ │ │ ├── dashboard.component.ts │ │ │ │ │ │ │ └── dashboard.module.ts │ │ │ │ │ │ ├── error/ │ │ │ │ │ │ │ ├── 404.component.html │ │ │ │ │ │ │ ├── 404.component.ts │ │ │ │ │ │ │ ├── 500.component.html │ │ │ │ │ │ │ ├── 500.component.ts │ │ │ │ │ │ │ ├── unauthorized.component.html │ │ │ │ │ │ │ ├── unauthorized.component.scss │ │ │ │ │ │ │ └── unauthorized.component.ts │ │ │ │ │ │ ├── orders/ │ │ │ │ │ │ │ ├── create/ │ │ │ │ │ │ │ │ ├── create.component.html │ │ │ │ │ │ │ │ ├── create.component.scss │ │ │ │ │ │ │ │ └── create.component.ts │ │ │ │ │ │ │ ├── detail/ │ │ │ │ │ │ │ │ ├── detail.component.html │ │ │ │ │ │ │ │ ├── detail.component.scss │ │ │ │ │ │ │ │ └── detail.component.ts │ │ │ │ │ │ │ ├── list/ │ │ │ │ │ │ │ │ ├── list.component.html │ │ │ │ │ │ │ │ ├── list.component.scss │ │ │ │ │ │ │ │ └── list.component.ts │ │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ │ ├── order.interface.ts │ │ │ │ │ │ │ │ └── orderproduct.interface.ts │ │ │ │ │ │ │ ├── orders-routing.module.ts │ │ │ │ │ │ │ ├── orders.module.ts │ │ │ │ │ │ │ └── orders.service.ts │ │ │ │ │ │ ├── products/ │ │ │ │ │ │ │ ├── create/ │ │ │ │ │ │ │ │ ├── create.component.html │ │ │ │ │ │ │ │ ├── create.component.scss │ │ │ │ │ │ │ │ └── create.component.ts │ │ │ │ │ │ │ ├── edit/ │ │ │ │ │ │ │ │ ├── edit.component.html │ │ │ │ │ │ │ │ ├── edit.component.scss │ │ │ │ │ │ │ │ └── edit.component.ts │ │ │ │ │ │ │ ├── list/ │ │ │ │ │ │ │ │ ├── list.component.html │ │ │ │ │ │ │ │ ├── list.component.scss │ │ │ │ │ │ │ │ └── list.component.ts │ │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ │ └── product.interface.ts │ │ │ │ │ │ │ ├── product.service.ts │ │ │ │ │ │ │ ├── products-routing.module.ts │ │ │ │ │ │ │ └── products.module.ts │ │ │ │ │ │ └── users/ │ │ │ │ │ │ ├── create/ │ │ │ │ │ │ │ ├── create.component.html │ │ │ │ │ │ │ ├── create.component.scss │ │ │ │ │ │ │ └── create.component.ts │ │ │ │ │ │ ├── list/ │ │ │ │ │ │ │ ├── list.component.html │ │ │ │ │ │ │ ├── list.component.scss │ │ │ │ │ │ │ └── list.component.ts │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ └── user.ts │ │ │ │ │ │ ├── users-routing.module.ts │ │ │ │ │ │ ├── users.module.ts │ │ │ │ │ │ └── users.service.ts │ │ │ │ │ ├── assets/ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ ├── custom-theme.scss │ │ │ │ │ ├── environments/ │ │ │ │ │ │ ├── environment.prod.ts │ │ │ │ │ │ └── environment.ts │ │ │ │ │ ├── index.html │ │ │ │ │ ├── main.ts │ │ │ │ │ ├── polyfills.ts │ │ │ │ │ ├── styles/ │ │ │ │ │ │ ├── _variables.scss │ │ │ │ │ │ └── reset.scss │ │ │ │ │ ├── styles.scss │ │ │ │ │ └── test.ts │ │ │ │ ├── tsconfig.app.json │ │ │ │ ├── tsconfig.json │ │ │ │ └── tsconfig.spec.json │ │ │ ├── Landing/ │ │ │ │ ├── .browserslistrc │ │ │ │ ├── .editorconfig │ │ │ │ ├── .gitignore │ │ │ │ ├── README.md │ │ │ │ ├── angular.json │ │ │ │ ├── karma.conf.js │ │ │ │ ├── package.json │ │ │ │ ├── src/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── app-routing.module.ts │ │ │ │ │ │ ├── app.component.scss │ │ │ │ │ │ ├── app.component.ts │ │ │ │ │ │ ├── app.module.ts │ │ │ │ │ │ └── views/ │ │ │ │ │ │ ├── landing/ │ │ │ │ │ │ │ ├── landing.component.html │ │ │ │ │ │ │ ├── landing.component.scss │ │ │ │ │ │ │ └── landing.component.ts │ │ │ │ │ │ └── register/ │ │ │ │ │ │ ├── register.component.html │ │ │ │ │ │ ├── register.component.scss │ │ │ │ │ │ └── register.component.ts │ │ │ │ │ ├── assets/ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ ├── custom-theme.scss │ │ │ │ │ ├── environments/ │ │ │ │ │ │ ├── environment.prod.ts │ │ │ │ │ │ └── environment.ts │ │ │ │ │ ├── index.html │ │ │ │ │ ├── main.ts │ │ │ │ │ ├── polyfills.ts │ │ │ │ │ ├── styles/ │ │ │ │ │ │ ├── _variables.scss │ │ │ │ │ │ └── reset.scss │ │ │ │ │ ├── styles.scss │ │ │ │ │ └── test.ts │ │ │ │ ├── tsconfig.app.json │ │ │ │ ├── tsconfig.json │ │ │ │ └── tsconfig.spec.json │ │ │ └── dummy.txt │ │ ├── scripts/ │ │ │ ├── deployment.sh │ │ │ └── geturl.sh │ │ └── server/ │ │ ├── .gitignore │ │ ├── OrderService/ │ │ │ ├── order_models.py │ │ │ ├── order_service.py │ │ │ ├── order_service_dal.py │ │ │ └── requirements.txt │ │ ├── ProductService/ │ │ │ ├── product_models.py │ │ │ ├── product_service.py │ │ │ ├── product_service_dal.py │ │ │ └── requirements.txt │ │ ├── README.md │ │ ├── Resources/ │ │ │ ├── requirements.txt │ │ │ ├── shared_service_authorizer.py │ │ │ └── tenant_authorizer.py │ │ ├── TenantManagementService/ │ │ │ ├── requirements.txt │ │ │ ├── tenant-management.py │ │ │ ├── tenant-registration.py │ │ │ └── user-management.py │ │ ├── layers/ │ │ │ ├── auth_manager.py │ │ │ ├── logger.py │ │ │ ├── metrics_manager.py │ │ │ ├── requirements.txt │ │ │ └── utils.py │ │ ├── nested_templates/ │ │ │ ├── apigateway.yaml │ │ │ ├── apigateway_lambdapermissions.yaml │ │ │ ├── cognito.yaml │ │ │ ├── lambdafunctions.yaml │ │ │ ├── tables.yaml │ │ │ └── userinterface.yaml │ │ ├── shared-samconfig.toml │ │ ├── shared-template.yaml │ │ ├── tenant-samconfig.toml │ │ └── tenant-template.yaml │ ├── Lab5/ │ │ ├── client/ │ │ │ ├── Admin/ │ │ │ │ ├── .browserslistrc │ │ │ │ ├── .editorconfig │ │ │ │ ├── .gitignore │ │ │ │ ├── README.md │ │ │ │ ├── angular.json │ │ │ │ ├── karma.conf.js │ │ │ │ ├── package.json │ │ │ │ ├── src/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── _nav.ts │ │ │ │ │ │ ├── app-routing.module.ts │ │ │ │ │ │ ├── app.component.scss │ │ │ │ │ │ ├── app.component.ts │ │ │ │ │ │ ├── app.module.ts │ │ │ │ │ │ ├── interceptors/ │ │ │ │ │ │ │ ├── auth.interceptor.ts │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── interfaces.ts │ │ │ │ │ │ ├── nav/ │ │ │ │ │ │ │ ├── nav.component.css │ │ │ │ │ │ │ ├── nav.component.html │ │ │ │ │ │ │ ├── nav.component.spec.ts │ │ │ │ │ │ │ └── nav.component.ts │ │ │ │ │ │ └── views/ │ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ │ ├── auth.component.html │ │ │ │ │ │ │ ├── auth.component.scss │ │ │ │ │ │ │ └── auth.component.ts │ │ │ │ │ │ ├── dashboard/ │ │ │ │ │ │ │ ├── dashboard-routing.module.ts │ │ │ │ │ │ │ ├── dashboard.component.html │ │ │ │ │ │ │ ├── dashboard.component.scss │ │ │ │ │ │ │ ├── dashboard.component.ts │ │ │ │ │ │ │ └── dashboard.module.ts │ │ │ │ │ │ ├── tenants/ │ │ │ │ │ │ │ ├── create/ │ │ │ │ │ │ │ │ ├── create.component.html │ │ │ │ │ │ │ │ ├── create.component.scss │ │ │ │ │ │ │ │ └── create.component.ts │ │ │ │ │ │ │ ├── list/ │ │ │ │ │ │ │ │ ├── list.component.html │ │ │ │ │ │ │ │ ├── list.component.scss │ │ │ │ │ │ │ │ └── list.component.ts │ │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ │ └── tenant.ts │ │ │ │ │ │ │ ├── tenants-routing.module.ts │ │ │ │ │ │ │ ├── tenants.module.ts │ │ │ │ │ │ │ └── tenants.service.ts │ │ │ │ │ │ └── users/ │ │ │ │ │ │ ├── create/ │ │ │ │ │ │ │ ├── create.component.html │ │ │ │ │ │ │ ├── create.component.scss │ │ │ │ │ │ │ └── create.component.ts │ │ │ │ │ │ ├── list/ │ │ │ │ │ │ │ ├── list.component.html │ │ │ │ │ │ │ ├── list.component.scss │ │ │ │ │ │ │ └── list.component.ts │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ └── user.ts │ │ │ │ │ │ ├── users-routing.module.ts │ │ │ │ │ │ ├── users.module.ts │ │ │ │ │ │ └── users.service.ts │ │ │ │ │ ├── assets/ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ ├── aws-exports.ts │ │ │ │ │ ├── custom-theme.scss │ │ │ │ │ ├── environments/ │ │ │ │ │ │ ├── environment.prod.ts │ │ │ │ │ │ └── environment.ts │ │ │ │ │ ├── index.html │ │ │ │ │ ├── main.ts │ │ │ │ │ ├── polyfills.ts │ │ │ │ │ ├── styles/ │ │ │ │ │ │ ├── _variables.scss │ │ │ │ │ │ └── reset.scss │ │ │ │ │ ├── styles.scss │ │ │ │ │ └── test.ts │ │ │ │ ├── tsconfig.app.json │ │ │ │ ├── tsconfig.json │ │ │ │ └── tsconfig.spec.json │ │ │ ├── Application/ │ │ │ │ ├── .browserslistrc │ │ │ │ ├── .editorconfig │ │ │ │ ├── .gitignore │ │ │ │ ├── README.md │ │ │ │ ├── angular.json │ │ │ │ ├── cypress/ │ │ │ │ │ ├── README.md │ │ │ │ │ └── e2e/ │ │ │ │ │ └── 1-getting-started/ │ │ │ │ │ ├── basic-access.cy.js │ │ │ │ │ └── product-testing.cy.js │ │ │ │ ├── cypress.config.ts │ │ │ │ ├── cypress.env.json.example │ │ │ │ ├── karma.conf.js │ │ │ │ ├── package.json │ │ │ │ ├── src/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── _nav.ts │ │ │ │ │ │ ├── app-routing.module.ts │ │ │ │ │ │ ├── app.component.scss │ │ │ │ │ │ ├── app.component.ts │ │ │ │ │ │ ├── app.module.ts │ │ │ │ │ │ ├── cognito.guard.ts │ │ │ │ │ │ ├── interceptors/ │ │ │ │ │ │ │ ├── auth.interceptor.ts │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── interfaces.ts │ │ │ │ │ │ ├── nav/ │ │ │ │ │ │ │ ├── nav.component.html │ │ │ │ │ │ │ ├── nav.component.scss │ │ │ │ │ │ │ └── nav.component.ts │ │ │ │ │ │ └── views/ │ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ │ ├── auth-configuration.service.ts │ │ │ │ │ │ │ ├── auth.component.html │ │ │ │ │ │ │ ├── auth.component.scss │ │ │ │ │ │ │ ├── auth.component.ts │ │ │ │ │ │ │ └── models/ │ │ │ │ │ │ │ └── config-params.ts │ │ │ │ │ │ ├── dashboard/ │ │ │ │ │ │ │ ├── dashboard-routing.module.ts │ │ │ │ │ │ │ ├── dashboard.component.html │ │ │ │ │ │ │ ├── dashboard.component.scss │ │ │ │ │ │ │ ├── dashboard.component.ts │ │ │ │ │ │ │ └── dashboard.module.ts │ │ │ │ │ │ ├── error/ │ │ │ │ │ │ │ ├── 404.component.html │ │ │ │ │ │ │ ├── 404.component.ts │ │ │ │ │ │ │ ├── 500.component.html │ │ │ │ │ │ │ ├── 500.component.ts │ │ │ │ │ │ │ ├── unauthorized.component.html │ │ │ │ │ │ │ ├── unauthorized.component.scss │ │ │ │ │ │ │ └── unauthorized.component.ts │ │ │ │ │ │ ├── orders/ │ │ │ │ │ │ │ ├── create/ │ │ │ │ │ │ │ │ ├── create.component.html │ │ │ │ │ │ │ │ ├── create.component.scss │ │ │ │ │ │ │ │ └── create.component.ts │ │ │ │ │ │ │ ├── detail/ │ │ │ │ │ │ │ │ ├── detail.component.html │ │ │ │ │ │ │ │ ├── detail.component.scss │ │ │ │ │ │ │ │ └── detail.component.ts │ │ │ │ │ │ │ ├── list/ │ │ │ │ │ │ │ │ ├── list.component.html │ │ │ │ │ │ │ │ ├── list.component.scss │ │ │ │ │ │ │ │ └── list.component.ts │ │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ │ ├── order.interface.ts │ │ │ │ │ │ │ │ └── orderproduct.interface.ts │ │ │ │ │ │ │ ├── orders-routing.module.ts │ │ │ │ │ │ │ ├── orders.module.ts │ │ │ │ │ │ │ └── orders.service.ts │ │ │ │ │ │ ├── products/ │ │ │ │ │ │ │ ├── create/ │ │ │ │ │ │ │ │ ├── create.component.html │ │ │ │ │ │ │ │ ├── create.component.scss │ │ │ │ │ │ │ │ └── create.component.ts │ │ │ │ │ │ │ ├── edit/ │ │ │ │ │ │ │ │ ├── edit.component.html │ │ │ │ │ │ │ │ ├── edit.component.scss │ │ │ │ │ │ │ │ └── edit.component.ts │ │ │ │ │ │ │ ├── list/ │ │ │ │ │ │ │ │ ├── list.component.html │ │ │ │ │ │ │ │ ├── list.component.scss │ │ │ │ │ │ │ │ └── list.component.ts │ │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ │ └── product.interface.ts │ │ │ │ │ │ │ ├── product.service.ts │ │ │ │ │ │ │ ├── products-routing.module.ts │ │ │ │ │ │ │ └── products.module.ts │ │ │ │ │ │ └── users/ │ │ │ │ │ │ ├── create/ │ │ │ │ │ │ │ ├── create.component.html │ │ │ │ │ │ │ ├── create.component.scss │ │ │ │ │ │ │ └── create.component.ts │ │ │ │ │ │ ├── list/ │ │ │ │ │ │ │ ├── list.component.html │ │ │ │ │ │ │ ├── list.component.scss │ │ │ │ │ │ │ └── list.component.ts │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ └── user.ts │ │ │ │ │ │ ├── users-routing.module.ts │ │ │ │ │ │ ├── users.module.ts │ │ │ │ │ │ └── users.service.ts │ │ │ │ │ ├── assets/ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ ├── custom-theme.scss │ │ │ │ │ ├── environments/ │ │ │ │ │ │ ├── environment.prod.ts │ │ │ │ │ │ └── environment.ts │ │ │ │ │ ├── index.html │ │ │ │ │ ├── main.ts │ │ │ │ │ ├── polyfills.ts │ │ │ │ │ ├── styles/ │ │ │ │ │ │ ├── _variables.scss │ │ │ │ │ │ └── reset.scss │ │ │ │ │ ├── styles.scss │ │ │ │ │ └── test.ts │ │ │ │ ├── tsconfig.app.json │ │ │ │ ├── tsconfig.json │ │ │ │ └── tsconfig.spec.json │ │ │ └── Landing/ │ │ │ ├── .browserslistrc │ │ │ ├── .editorconfig │ │ │ ├── .gitignore │ │ │ ├── README.md │ │ │ ├── angular.json │ │ │ ├── karma.conf.js │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── app/ │ │ │ │ │ ├── app-routing.module.ts │ │ │ │ │ ├── app.component.scss │ │ │ │ │ ├── app.component.ts │ │ │ │ │ ├── app.module.ts │ │ │ │ │ └── views/ │ │ │ │ │ ├── landing/ │ │ │ │ │ │ ├── landing.component.html │ │ │ │ │ │ ├── landing.component.scss │ │ │ │ │ │ └── landing.component.ts │ │ │ │ │ └── register/ │ │ │ │ │ ├── register.component.html │ │ │ │ │ ├── register.component.scss │ │ │ │ │ └── register.component.ts │ │ │ │ ├── assets/ │ │ │ │ │ └── .gitkeep │ │ │ │ ├── custom-theme.scss │ │ │ │ ├── environments/ │ │ │ │ │ ├── environment.prod.ts │ │ │ │ │ └── environment.ts │ │ │ │ ├── index.html │ │ │ │ ├── main.ts │ │ │ │ ├── polyfills.ts │ │ │ │ ├── styles/ │ │ │ │ │ ├── _variables.scss │ │ │ │ │ └── reset.scss │ │ │ │ ├── styles.scss │ │ │ │ └── test.ts │ │ │ ├── tsconfig.app.json │ │ │ ├── tsconfig.json │ │ │ └── tsconfig.spec.json │ │ ├── scripts/ │ │ │ ├── deploy-updates.sh │ │ │ ├── deployment.sh │ │ │ └── geturl.sh │ │ └── server/ │ │ ├── .gitignore │ │ ├── OrderService/ │ │ │ ├── order_models.py │ │ │ ├── order_service.py │ │ │ ├── order_service_dal.py │ │ │ └── requirements.txt │ │ ├── ProductService/ │ │ │ ├── product_models.py │ │ │ ├── product_service.py │ │ │ ├── product_service_dal.py │ │ │ └── requirements.txt │ │ ├── README.md │ │ ├── Resources/ │ │ │ ├── requirements.txt │ │ │ ├── shared_service_authorizer.py │ │ │ └── tenant_authorizer.py │ │ ├── TenantManagementService/ │ │ │ ├── events/ │ │ │ │ ├── env.json │ │ │ │ ├── tenant-registration.json │ │ │ │ ├── update_users_apikey_by_tenant.json │ │ │ │ └── user-management.json │ │ │ ├── requirements.txt │ │ │ ├── tenant-management.py │ │ │ ├── tenant-provisioning.py │ │ │ ├── tenant-registration.py │ │ │ └── user-management.py │ │ ├── TenantPipeline/ │ │ │ ├── .gitignore │ │ │ ├── .npmignore │ │ │ ├── README.md │ │ │ ├── bin/ │ │ │ │ └── pipeline.ts │ │ │ ├── cdk.json │ │ │ ├── jest.config.js │ │ │ ├── lib/ │ │ │ │ └── serverless-saas-stack.ts │ │ │ ├── package.json │ │ │ ├── resources/ │ │ │ │ └── lambda-deploy-tenant-stack.py │ │ │ ├── test/ │ │ │ │ └── pipeline.test.ts │ │ │ └── tsconfig.json │ │ ├── custom_resources/ │ │ │ ├── requirements.txt │ │ │ ├── update_settings_table.py │ │ │ ├── update_tenant_apigatewayurl.py │ │ │ └── update_tenantstackmap_table.py │ │ ├── layers/ │ │ │ ├── auth_manager.py │ │ │ ├── logger.py │ │ │ ├── metrics_manager.py │ │ │ ├── requirements.txt │ │ │ └── utils.py │ │ ├── nested_templates/ │ │ │ ├── apigateway.yaml │ │ │ ├── apigateway_lambdapermissions.yaml │ │ │ ├── cognito.yaml │ │ │ ├── custom_resources.yaml │ │ │ ├── lambdafunctions.yaml │ │ │ ├── tables.yaml │ │ │ └── userinterface.yaml │ │ ├── shared-samconfig.toml │ │ ├── shared-template.yaml │ │ ├── tenant-buildspec.yml │ │ ├── tenant-samconfig.toml │ │ └── tenant-template.yaml │ ├── Lab6/ │ │ ├── client/ │ │ │ ├── Admin/ │ │ │ │ ├── .browserslistrc │ │ │ │ ├── .editorconfig │ │ │ │ ├── .gitignore │ │ │ │ ├── README.md │ │ │ │ ├── angular.json │ │ │ │ ├── karma.conf.js │ │ │ │ ├── package.json │ │ │ │ ├── src/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── _nav.ts │ │ │ │ │ │ ├── app-routing.module.ts │ │ │ │ │ │ ├── app.component.scss │ │ │ │ │ │ ├── app.component.ts │ │ │ │ │ │ ├── app.module.ts │ │ │ │ │ │ ├── interceptors/ │ │ │ │ │ │ │ ├── auth.interceptor.ts │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── interfaces.ts │ │ │ │ │ │ ├── nav/ │ │ │ │ │ │ │ ├── nav.component.css │ │ │ │ │ │ │ ├── nav.component.html │ │ │ │ │ │ │ ├── nav.component.spec.ts │ │ │ │ │ │ │ └── nav.component.ts │ │ │ │ │ │ └── views/ │ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ │ ├── auth.component.html │ │ │ │ │ │ │ ├── auth.component.scss │ │ │ │ │ │ │ └── auth.component.ts │ │ │ │ │ │ ├── dashboard/ │ │ │ │ │ │ │ ├── dashboard-routing.module.ts │ │ │ │ │ │ │ ├── dashboard.component.html │ │ │ │ │ │ │ ├── dashboard.component.scss │ │ │ │ │ │ │ ├── dashboard.component.ts │ │ │ │ │ │ │ └── dashboard.module.ts │ │ │ │ │ │ ├── tenants/ │ │ │ │ │ │ │ ├── create/ │ │ │ │ │ │ │ │ ├── create.component.html │ │ │ │ │ │ │ │ ├── create.component.scss │ │ │ │ │ │ │ │ └── create.component.ts │ │ │ │ │ │ │ ├── list/ │ │ │ │ │ │ │ │ ├── list.component.html │ │ │ │ │ │ │ │ ├── list.component.scss │ │ │ │ │ │ │ │ └── list.component.ts │ │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ │ └── tenant.ts │ │ │ │ │ │ │ ├── tenants-routing.module.ts │ │ │ │ │ │ │ ├── tenants.module.ts │ │ │ │ │ │ │ └── tenants.service.ts │ │ │ │ │ │ └── users/ │ │ │ │ │ │ ├── create/ │ │ │ │ │ │ │ ├── create.component.html │ │ │ │ │ │ │ ├── create.component.scss │ │ │ │ │ │ │ └── create.component.ts │ │ │ │ │ │ ├── list/ │ │ │ │ │ │ │ ├── list.component.html │ │ │ │ │ │ │ ├── list.component.scss │ │ │ │ │ │ │ └── list.component.ts │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ └── user.ts │ │ │ │ │ │ ├── users-routing.module.ts │ │ │ │ │ │ ├── users.module.ts │ │ │ │ │ │ └── users.service.ts │ │ │ │ │ ├── assets/ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ ├── aws-exports.ts │ │ │ │ │ ├── custom-theme.scss │ │ │ │ │ ├── environments/ │ │ │ │ │ │ ├── environment.prod.ts │ │ │ │ │ │ └── environment.ts │ │ │ │ │ ├── index.html │ │ │ │ │ ├── main.ts │ │ │ │ │ ├── polyfills.ts │ │ │ │ │ ├── styles/ │ │ │ │ │ │ ├── _variables.scss │ │ │ │ │ │ └── reset.scss │ │ │ │ │ ├── styles.scss │ │ │ │ │ └── test.ts │ │ │ │ ├── tsconfig.app.json │ │ │ │ ├── tsconfig.json │ │ │ │ └── tsconfig.spec.json │ │ │ ├── Application/ │ │ │ │ ├── .browserslistrc │ │ │ │ ├── .editorconfig │ │ │ │ ├── .gitignore │ │ │ │ ├── README.md │ │ │ │ ├── angular.json │ │ │ │ ├── cypress/ │ │ │ │ │ ├── README.md │ │ │ │ │ └── e2e/ │ │ │ │ │ └── 1-getting-started/ │ │ │ │ │ ├── basic-access.cy.js │ │ │ │ │ └── product-testing.cy.js │ │ │ │ ├── cypress.config.ts │ │ │ │ ├── cypress.env.json.example │ │ │ │ ├── karma.conf.js │ │ │ │ ├── package.json │ │ │ │ ├── src/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── _nav.ts │ │ │ │ │ │ ├── app-routing.module.ts │ │ │ │ │ │ ├── app.component.scss │ │ │ │ │ │ ├── app.component.ts │ │ │ │ │ │ ├── app.module.ts │ │ │ │ │ │ ├── cognito.guard.ts │ │ │ │ │ │ ├── interceptors/ │ │ │ │ │ │ │ ├── auth.interceptor.ts │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── interfaces.ts │ │ │ │ │ │ ├── nav/ │ │ │ │ │ │ │ ├── nav.component.html │ │ │ │ │ │ │ ├── nav.component.scss │ │ │ │ │ │ │ └── nav.component.ts │ │ │ │ │ │ └── views/ │ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ │ ├── auth-configuration.service.ts │ │ │ │ │ │ │ ├── auth.component.html │ │ │ │ │ │ │ ├── auth.component.scss │ │ │ │ │ │ │ ├── auth.component.ts │ │ │ │ │ │ │ └── models/ │ │ │ │ │ │ │ └── config-params.ts │ │ │ │ │ │ ├── dashboard/ │ │ │ │ │ │ │ ├── dashboard-routing.module.ts │ │ │ │ │ │ │ ├── dashboard.component.html │ │ │ │ │ │ │ ├── dashboard.component.scss │ │ │ │ │ │ │ ├── dashboard.component.ts │ │ │ │ │ │ │ └── dashboard.module.ts │ │ │ │ │ │ ├── error/ │ │ │ │ │ │ │ ├── 404.component.html │ │ │ │ │ │ │ ├── 404.component.ts │ │ │ │ │ │ │ ├── 500.component.html │ │ │ │ │ │ │ ├── 500.component.ts │ │ │ │ │ │ │ ├── unauthorized.component.html │ │ │ │ │ │ │ ├── unauthorized.component.scss │ │ │ │ │ │ │ └── unauthorized.component.ts │ │ │ │ │ │ ├── orders/ │ │ │ │ │ │ │ ├── create/ │ │ │ │ │ │ │ │ ├── create.component.html │ │ │ │ │ │ │ │ ├── create.component.scss │ │ │ │ │ │ │ │ └── create.component.ts │ │ │ │ │ │ │ ├── detail/ │ │ │ │ │ │ │ │ ├── detail.component.html │ │ │ │ │ │ │ │ ├── detail.component.scss │ │ │ │ │ │ │ │ └── detail.component.ts │ │ │ │ │ │ │ ├── list/ │ │ │ │ │ │ │ │ ├── list.component.html │ │ │ │ │ │ │ │ ├── list.component.scss │ │ │ │ │ │ │ │ └── list.component.ts │ │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ │ ├── order.interface.ts │ │ │ │ │ │ │ │ └── orderproduct.interface.ts │ │ │ │ │ │ │ ├── orders-routing.module.ts │ │ │ │ │ │ │ ├── orders.module.ts │ │ │ │ │ │ │ └── orders.service.ts │ │ │ │ │ │ ├── products/ │ │ │ │ │ │ │ ├── create/ │ │ │ │ │ │ │ │ ├── create.component.html │ │ │ │ │ │ │ │ ├── create.component.scss │ │ │ │ │ │ │ │ └── create.component.ts │ │ │ │ │ │ │ ├── edit/ │ │ │ │ │ │ │ │ ├── edit.component.html │ │ │ │ │ │ │ │ ├── edit.component.scss │ │ │ │ │ │ │ │ └── edit.component.ts │ │ │ │ │ │ │ ├── list/ │ │ │ │ │ │ │ │ ├── list.component.html │ │ │ │ │ │ │ │ ├── list.component.scss │ │ │ │ │ │ │ │ └── list.component.ts │ │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ │ └── product.interface.ts │ │ │ │ │ │ │ ├── product.service.ts │ │ │ │ │ │ │ ├── products-routing.module.ts │ │ │ │ │ │ │ └── products.module.ts │ │ │ │ │ │ └── users/ │ │ │ │ │ │ ├── create/ │ │ │ │ │ │ │ ├── create.component.html │ │ │ │ │ │ │ ├── create.component.scss │ │ │ │ │ │ │ └── create.component.ts │ │ │ │ │ │ ├── list/ │ │ │ │ │ │ │ ├── list.component.html │ │ │ │ │ │ │ ├── list.component.scss │ │ │ │ │ │ │ └── list.component.ts │ │ │ │ │ │ ├── models/ │ │ │ │ │ │ │ └── user.ts │ │ │ │ │ │ ├── users-routing.module.ts │ │ │ │ │ │ ├── users.module.ts │ │ │ │ │ │ └── users.service.ts │ │ │ │ │ ├── assets/ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ ├── custom-theme.scss │ │ │ │ │ ├── environments/ │ │ │ │ │ │ ├── environment.prod.ts │ │ │ │ │ │ └── environment.ts │ │ │ │ │ ├── index.html │ │ │ │ │ ├── main.ts │ │ │ │ │ ├── polyfills.ts │ │ │ │ │ ├── styles/ │ │ │ │ │ │ ├── _variables.scss │ │ │ │ │ │ └── reset.scss │ │ │ │ │ ├── styles.scss │ │ │ │ │ └── test.ts │ │ │ │ ├── tsconfig.app.json │ │ │ │ ├── tsconfig.json │ │ │ │ └── tsconfig.spec.json │ │ │ └── Landing/ │ │ │ ├── .browserslistrc │ │ │ ├── .editorconfig │ │ │ ├── .gitignore │ │ │ ├── README.md │ │ │ ├── angular.json │ │ │ ├── karma.conf.js │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── app/ │ │ │ │ │ ├── app-routing.module.ts │ │ │ │ │ ├── app.component.scss │ │ │ │ │ ├── app.component.ts │ │ │ │ │ ├── app.module.ts │ │ │ │ │ └── views/ │ │ │ │ │ ├── landing/ │ │ │ │ │ │ ├── landing.component.html │ │ │ │ │ │ ├── landing.component.scss │ │ │ │ │ │ └── landing.component.ts │ │ │ │ │ └── register/ │ │ │ │ │ ├── register.component.html │ │ │ │ │ ├── register.component.scss │ │ │ │ │ └── register.component.ts │ │ │ │ ├── assets/ │ │ │ │ │ └── .gitkeep │ │ │ │ ├── custom-theme.scss │ │ │ │ ├── environments/ │ │ │ │ │ ├── environment.prod.ts │ │ │ │ │ └── environment.ts │ │ │ │ ├── index.html │ │ │ │ ├── main.ts │ │ │ │ ├── polyfills.ts │ │ │ │ ├── styles/ │ │ │ │ │ ├── _variables.scss │ │ │ │ │ └── reset.scss │ │ │ │ ├── styles.scss │ │ │ │ └── test.ts │ │ │ ├── tsconfig.app.json │ │ │ ├── tsconfig.json │ │ │ └── tsconfig.spec.json │ │ ├── scripts/ │ │ │ ├── deployment.sh │ │ │ ├── geturl.sh │ │ │ └── test-basic-tier-throttling.sh │ │ └── server/ │ │ ├── .gitignore │ │ ├── OrderService/ │ │ │ ├── order_models.py │ │ │ ├── order_service.py │ │ │ ├── order_service_dal.py │ │ │ └── requirements.txt │ │ ├── ProductService/ │ │ │ ├── product_models.py │ │ │ ├── product_service.py │ │ │ ├── product_service_dal.py │ │ │ └── requirements.txt │ │ ├── README.md │ │ ├── Resources/ │ │ │ ├── requirements.txt │ │ │ ├── shared_service_authorizer.py │ │ │ └── tenant_authorizer.py │ │ ├── TenantManagementService/ │ │ │ ├── events/ │ │ │ │ ├── env.json │ │ │ │ ├── tenant-registration.json │ │ │ │ ├── update_users_apikey_by_tenant.json │ │ │ │ └── user-management.json │ │ │ ├── requirements.txt │ │ │ ├── tenant-management.py │ │ │ ├── tenant-provisioning.py │ │ │ ├── tenant-registration.py │ │ │ └── user-management.py │ │ ├── TenantPipeline/ │ │ │ ├── .gitignore │ │ │ ├── .npmignore │ │ │ ├── README.md │ │ │ ├── bin/ │ │ │ │ └── pipeline.ts │ │ │ ├── cdk.json │ │ │ ├── jest.config.js │ │ │ ├── lib/ │ │ │ │ └── serverless-saas-stack.ts │ │ │ ├── package.json │ │ │ ├── resources/ │ │ │ │ └── lambda-deploy-tenant-stack.py │ │ │ ├── test/ │ │ │ │ └── pipeline.test.ts │ │ │ └── tsconfig.json │ │ ├── custom_resources/ │ │ │ ├── requirements.txt │ │ │ ├── update_settings_table.py │ │ │ ├── update_tenant_apigatewayurl.py │ │ │ ├── update_tenantstackmap_table.py │ │ │ └── update_usage_plan.py │ │ ├── layers/ │ │ │ ├── auth_manager.py │ │ │ ├── logger.py │ │ │ ├── metrics_manager.py │ │ │ ├── requirements.txt │ │ │ └── utils.py │ │ ├── nested_templates/ │ │ │ ├── apigateway.yaml │ │ │ ├── apigateway_lambdapermissions.yaml │ │ │ ├── cognito.yaml │ │ │ ├── custom_resources.yaml │ │ │ ├── lambdafunctions.yaml │ │ │ ├── tables.yaml │ │ │ └── userinterface.yaml │ │ ├── shared-samconfig.toml │ │ ├── shared-template.yaml │ │ ├── tenant-buildspec.yml │ │ ├── tenant-samconfig.toml │ │ └── tenant-template.yaml │ └── Lab7/ │ ├── .aws-sam/ │ │ ├── build/ │ │ │ ├── GetDynamoDBUsageAndCostByTenant/ │ │ │ │ ├── requirements.txt │ │ │ │ └── tenant_usage_and_cost.py │ │ │ ├── GetLambdaUsageAndCostByTenant/ │ │ │ │ ├── requirements.txt │ │ │ │ └── tenant_usage_and_cost.py │ │ │ └── template.yaml │ │ └── build.toml │ ├── SampleCUR/ │ │ ├── 20221011_211731_00058_ff5sr_094c8542-2cfd-459d-96e1-10e3bc2ac7a6 │ │ ├── 20221011_211731_00058_ff5sr_1ded6019-91c5-470a-9533-5a63ff447fa4 │ │ ├── 20221011_211731_00058_ff5sr_265b33b8-c229-4a42-9c51-e54380ec03b0 │ │ ├── 20221011_211731_00058_ff5sr_36154ed1-7420-43dc-9bce-e30ff784b7fc │ │ ├── 20221011_211731_00058_ff5sr_4644e2bd-8b84-42df-bce7-35b29a0d3b83 │ │ ├── 20221011_211731_00058_ff5sr_47129e77-847c-420a-acac-3ce962bad5af │ │ ├── 20221011_211731_00058_ff5sr_4f484d50-53e1-40f6-84d3-1495af1981e7 │ │ ├── 20221011_211731_00058_ff5sr_501fe43e-84a3-4665-8ae6-e81ac0a8c024 │ │ ├── 20221011_211731_00058_ff5sr_586d15f5-4ff9-4231-9693-d601f8a96386 │ │ ├── 20221011_211731_00058_ff5sr_5cf01031-5bec-496a-9003-354edff50dcc │ │ ├── 20221011_211731_00058_ff5sr_74023afa-6ec8-4281-a5ce-b4771aac2ae0 │ │ ├── 20221011_211731_00058_ff5sr_7fb5dd51-6c56-41be-94fc-0cb6fc122cfd │ │ ├── 20221011_211731_00058_ff5sr_93372514-9952-4af6-a6f3-396921248c28 │ │ ├── 20221011_211731_00058_ff5sr_952352a7-a59a-4f6c-b359-aa2251d1f6a8 │ │ ├── 20221011_211731_00058_ff5sr_9ab989ba-acce-479c-bc60-c33acffa4c79 │ │ ├── 20221011_211731_00058_ff5sr_9b9fe19e-b145-49d1-9aed-135fec199529 │ │ ├── 20221011_211731_00058_ff5sr_a35b0a43-ebb6-44e1-949b-14d3e0472842 │ │ ├── 20221011_211731_00058_ff5sr_a6fa2ec0-8151-41a2-b6ef-f0f630ff956f │ │ ├── 20221011_211731_00058_ff5sr_aa65c209-65b9-4c95-873a-7c863ea5e0a7 │ │ ├── 20221011_211731_00058_ff5sr_b0cfe354-83a9-403b-9371-477dc4f4e8ef │ │ ├── 20221011_211731_00058_ff5sr_b6f519bf-0afa-480a-b5ab-5d75bec1490d │ │ ├── 20221011_211731_00058_ff5sr_c0ad9ac0-db23-4466-9eb2-d59b532bf15a │ │ ├── 20221011_211731_00058_ff5sr_c3499311-c8db-4272-875a-280a7473d9ec │ │ ├── 20221011_211731_00058_ff5sr_dc8883cc-c8fd-49e7-acd1-8d08867e157d │ │ ├── 20221011_211731_00058_ff5sr_e02f4092-0266-4104-9978-d5bcb8138da3 │ │ ├── 20221011_211731_00058_ff5sr_e7dfb4a0-e8eb-438b-96c6-16023f5a131b │ │ ├── 20221011_211731_00058_ff5sr_ebfd0670-22dd-40cb-a63d-61ebb593982a │ │ ├── 20221011_211731_00058_ff5sr_ecb0667a-7aa5-4fd0-8e85-8c3a5701dd14 │ │ ├── 20221011_211731_00058_ff5sr_f8c1b718-c6dc-4ee0-874d-3d41f6b12732 │ │ └── 20221011_211731_00058_ff5sr_faaa1338-ae7a-4565-ab3c-3dd6b1d63837 │ ├── TenantUsageAndCost/ │ │ ├── requirements.txt │ │ └── tenant_usage_and_cost.py │ ├── deployment.sh │ ├── lambdaoutput.json │ ├── samconfig.toml │ └── template.yaml ├── THIRD-PARTY-LICENSES.txt ├── event-engine-assets/ │ ├── initialize-module-sam-template.yaml │ ├── lab1-module-sam-template.yaml │ ├── pre-requisites-event-engine.sh │ └── userinterface-module-sam-template.yaml └── scripts/ ├── cleanup.sh ├── create_tenants.sh ├── lab2_updates.py ├── lab3_updates.py ├── lab4_updates.py ├── lab5_updates.py ├── lab6_updates.py ├── replace_function.py ├── run_all_labs.sh └── run_workshop.sh