{"id":22181224,"url":"https://github.com/rafalsalwa/shop","last_synced_at":"2026-05-11T03:06:13.395Z","repository":{"id":153722203,"uuid":"630444050","full_name":"RafalSalwa/Shop","owner":"RafalSalwa","description":"Feature rich Shopping Cart  to show as many features as possible within single App","archived":false,"fork":false,"pushed_at":"2024-04-12T17:09:03.000Z","size":9529,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"1.x","last_synced_at":"2024-04-12T23:06:19.234Z","etag":null,"topics":["docker","doctr","grpc","messenger","oauth2","openapi3","php8","postg","rest-api","symfony6"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/RafalSalwa.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2023-04-20T11:50:57.000Z","updated_at":"2024-04-15T11:39:30.866Z","dependencies_parsed_at":"2024-04-15T11:38:54.621Z","dependency_job_id":"d8ac6e6d-de7e-453e-bbfa-7d601a4eadcf","html_url":"https://github.com/RafalSalwa/Shop","commit_stats":null,"previous_names":["rafalsalwa/shop"],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RafalSalwa%2FShop","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RafalSalwa%2FShop/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RafalSalwa%2FShop/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RafalSalwa%2FShop/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/RafalSalwa","download_url":"https://codeload.github.com/RafalSalwa/Shop/tar.gz/refs/heads/1.x","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245334909,"owners_count":20598389,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","doctr","grpc","messenger","oauth2","openapi3","php8","postg","rest-api","symfony6"],"created_at":"2024-12-02T09:27:16.996Z","updated_at":"2026-05-11T03:06:13.353Z","avatar_url":"https://github.com/RafalSalwa.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Shopping cart\n\nstatic analysis:\n\n[![Psalm lvl 2](https://github.com/RafalSalwa/interview-client-php/actions/workflows/psalm.yml/badge.svg)](https://github.com/RafalSalwa/interview-client-php/actions/workflows/psalm.yml)\n[![Type Coverage](https://shepherd.dev/github/rafalsalwa/shop/coverage.svg)](https://shepherd.dev/github/rafalsalwa/shop)\n[![PHPStan lvl 8](https://github.com/RafalSalwa/interview-client-php/actions/workflows/phpstan.yml/badge.svg)](https://github.com/RafalSalwa/interview-client-php/actions/workflows/phpstan.yml)\n[![PHPMD - Mess Detector](https://github.com/RafalSalwa/interview-client-php/actions/workflows/phpmd.yml/badge.svg)](https://github.com/RafalSalwa/interview-client-php/actions/workflows/phpmd.yml)\n\nCode analysis:\n\n[![PHPCS - Code Sniffer](https://github.com/RafalSalwa/interview-client-php/actions/workflows/phpcs.yml/badge.svg)](https://github.com/RafalSalwa/interview-client-php/actions/workflows/phpcs.yml)\n[![PHPCS-Fixer](https://github.com/RafalSalwa/Shop/actions/workflows/php-cs-fixer.yml/badge.svg)](https://github.com/RafalSalwa/Shop/actions/workflows/php-cs-fixer.yml)\n[![Rector](https://github.com/RafalSalwa/Shop/actions/workflows/rector.yaml/badge.svg)](https://github.com/RafalSalwa/Shop/actions/workflows/rector.yaml)\n[![Architecture \u0026 Dependencies](https://github.com/RafalSalwa/interview-client-php/actions/workflows/architecture_dependencies.yml/badge.svg)](https://github.com/RafalSalwa/interview-client-php/actions/workflows/architecture_dependencies.yml)\n\nExternal services\n[![Build Status](https://jenkins.salwa.com.pl/job/Shop/badge/icon?subject=Jenkins)](https://jenkins.salwa.com.pl/job/Shop/)\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2FRafalSalwa%2Finterview-client-php.svg?type=shield\u0026issueType=license)](https://app.fossa.com/projects/git%2Bgithub.com%2FRafalSalwa%2Finterview-client-php?ref=badge_shield\u0026issueType=license)\n[![codecov](https://codecov.io/gh/RafalSalwa/interview-client-php/graph/badge.svg?token=DOR8PFOKFQ)](https://codecov.io/gh/RafalSalwa/interview-client-php)\n\nCodacy:\n[![Codacy Badge](https://app.codacy.com/project/badge/Grade/7621ab51388d4f4aa5b0528030eb5f57)](https://app.codacy.com/gh/RafalSalwa/interview-client-php/dashboard?utm_source=gh\u0026utm_medium=referral\u0026utm_content=\u0026utm_campaign=Badge_grade)\n\nCode climate:\n[![Maintainability](https://api.codeclimate.com/v1/badges/df1cb2c00a99333d82fd/maintainability)](https://codeclimate.com/github/RafalSalwa/Shop/maintainability)\n\nSonarQube:\n[![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=RafalSalwa_Shop\u0026metric=sqale_rating)](https://sonarcloud.io/summary/new_code?id=RafalSalwa_Shop)\n[![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=RafalSalwa_Shop\u0026metric=reliability_rating)](https://sonarcloud.io/summary/new_code?id=RafalSalwa_Shop)\n[![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=RafalSalwa_Shop\u0026metric=security_rating)](https://sonarcloud.io/summary/new_code?id=RafalSalwa_Shop)\n[![Lines of Code](https://sonarcloud.io/api/project_badges/measure?project=RafalSalwa_Shop\u0026metric=ncloc)](https://sonarcloud.io/summary/new_code?id=RafalSalwa_Shop)\n[![Duplicated Lines (%)](https://sonarcloud.io/api/project_badges/measure?project=RafalSalwa_Shop\u0026metric=duplicated_lines_density)](https://sonarcloud.io/summary/new_code?id=RafalSalwa_Shop)\n[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=RafalSalwa_Shop\u0026metric=coverage)](https://sonarcloud.io/summary/new_code?id=RafalSalwa_Shop)\n\n---\n\nSimple and feature rich Shopping cart based on PHP 8.2, Symfony 6, PostgresSQL, OAuth2, gRPC and custom [grpc\u0026REST Auth api](https://github.com/RafalSalwa/auth-api)\n\nFeatured with Shopping cart, profile management, Order processing flow with abandoned carts and pendings. Features based on subscription tiers.\n\n## ⚙️ Installation\n```bash\nmake up\n```\nor via symfony internal server installed on host:\n```bash\nmake local\n```\n\nthen You can visit [http://127.0.0.1:8001/](http://127.0.0.1:8001/)\n\nAlso, there is a openApi documentation at [http://127.0.0.1:8001/doc](http://127.0.0.1:8001/doc) or postman collection in [docs](docs/RSShop.postman_collection.json) folder\n\n#### Or\nvisit [Demo app](https://cart.salwa.com.pl)\n\n## 🎯 Features\n- Products listings based on subscription tier\n- Flow control with Symfony Workflows and Security Voters\n- cart management via view or REST Api\n- REST communication with Auth-api via JWT Tokens for authentication flow in User Providers and Authenticators\n- OAuth2 server integration for authorization flow\n- Doctrine entities with Inheritance pattern and abstraction for cart and order items\n- GitHub actions, Jenkins, Gitlab integrations\n- gRPC clients for external (golang) [Auth-api](https://github.com/RafalSalwa/auth-api)\n- Clean layered architecture checked by [PHPArkitect and deptrac](.github/workflows/architecture_dependencies.yml)\n- Static analysis with [PHPStan lvl 7](.github/workflows/phpstan.yml), [Psalm lvl 2](.github/workflows/psalm.yml), [PHPMD](.github/workflows/phpmd.yml), [PHPCS](.github/workflows/phpcs.yml), [PHP-CS-Fixer](.github/workflows/php-cs-fixer.yml), [Rector](.github/workflows/rector.yaml)\n- External tools for quality analysis PHPMetrics, PHPInsights, Snyk, SemGrep, SonarQube, Codacy \u0026 codecov\n\n## 👀 Other Apps\n\n---\n\n- [Auth-api](https://github.com/RafalSalwa/auth-api): Golang api with REST, gRPC, MySQL, Mongo, Redis, OTEL, [auth-api.salwa.com.pl](https://auth-api.salwa.com.pl/docs/swagger.json)\n- [Portfolio](https://github.com/RafalSalwa/Portfolio): Symfony UX \u0026 ReactJS with webpack and TS. Site contains details and stacks about all apps [apps.salwa.com.pl](https://apps.salwa.com.pl)\n\n\n## Screenshots:\n![deptrac](docs/deptrack.png)\n![REST](docs/cart.webp)\n![grpc](docs/grpc.webp)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frafalsalwa%2Fshop","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frafalsalwa%2Fshop","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frafalsalwa%2Fshop/lists"}