{"id":23916716,"url":"https://github.com/lukasbecvar/product-vault","last_synced_at":"2026-06-30T14:30:18.213Z","repository":{"id":270841686,"uuid":"897809010","full_name":"lukasbecvar/product-vault","owner":"lukasbecvar","description":"A modern and secure RESTful API system for product data management and simple e-shop integration.","archived":false,"fork":false,"pushed_at":"2025-02-04T14:43:46.000Z","size":1943,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-04T15:38:10.180Z","etag":null,"topics":["api","database","managment","mysql","php","product","rest","symfony","system"],"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/lukasbecvar.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,"publiccode":null,"codemeta":null}},"created_at":"2024-12-03T09:24:50.000Z","updated_at":"2025-02-04T14:41:41.000Z","dependencies_parsed_at":null,"dependency_job_id":"3dcb2fb8-e748-437b-9391-64cef8e94796","html_url":"https://github.com/lukasbecvar/product-vault","commit_stats":null,"previous_names":["lukasbecvar/product-vault"],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lukasbecvar%2Fproduct-vault","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lukasbecvar%2Fproduct-vault/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lukasbecvar%2Fproduct-vault/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lukasbecvar%2Fproduct-vault/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lukasbecvar","download_url":"https://codeload.github.com/lukasbecvar/product-vault/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240371750,"owners_count":19790888,"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":["api","database","managment","mysql","php","product","rest","symfony","system"],"created_at":"2025-01-05T12:13:28.056Z","updated_at":"2026-06-30T14:30:18.112Z","avatar_url":"https://github.com/lukasbecvar.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Product Vault\nOpen-source API system for managing product databases, designed with a focus on simplicity, flexibility, and security with efficient storage organization and manipulation of product data through a RESTful API, ensuring seamless integration with your e-shop or other applications that require product lists or product details.\n\n## Index\n* [Features](#features)\n* [API documentation](#api-documentation)\n* [Installation](#installation)\n* [File system](#file-system)\n* [Database](#database)\n* [CLI commands](#cli-commands)\n* [Environment configuration variables](#environment-configuration-variables)\n* [Dependencies](#dependencies--requirements)\n* [License](#license)\n\n## Features\n* Product data management\n* RESTful API (main interface for communication with the system)\n* Security user authentication and authorization system (Using JWT)\n* CLI commands (for managing products)\n\n# API documentation\n#### Nelmio UI\nThe documentation for API endpoints can be found at the route `/api/doc`, with Nelmio UI complete documentation and also allows testing requests directly in the web browser. Alternatively, you can find documentation in JSON format at `/api/doc.json` (You can use this JSON response to import the configuration into Postman).\n\n## Installation\n#### Docker compose\nExample of stack deployment ([docker-compose-stack-configuration](.github/examples/docker-compose-example.yml)).\n#### Kubernetes\nExample of deployment on Kubernetes ([minikube-k8s-deploy.yml](.github/examples/minikube-k8s-deploy-example.yml)).\n\n## File system\n#### Internal symfony cache\nThe internal Symfony cache is stored in the project root in directory ``/var/www/var``. You don't need to worry about this, but you can mount this cache if needed.\n#### Products assets storage\nThe products assets storage is stored in the project root in directory ``/var/www/storage``. If you run the application in a container, you need to create a storage volume and mount it to this directory to ensure data persistence.\n\n## Database\n#### MySQL - long term storage\nMySQL database is used for products data storage, with access configured through environment variables. It stores product data, administrator user accounts, and some logs.\n#### Redis - cache storage\nRedis is used for caching data and store invalidated user tokens and some runtime data.\n\n## CLI commands\nThe application is primarily designed as a REST API but also includes console commands for managing products, logs, and users. These commands allow easy automation of various processes, for example, using cron jobs. This eliminates the need to send cURL requests, as actions can be executed directly via the Symfony console.\n\n## Environment configuration variables\n| Variable | Description | Example value |\n| --- | --- | --- |\n| `APP_ENV` | Specific environment name | `dev` |\n| `APP_SECRET` | Session \u0026 token encryption key | `369af56dccfce490cb9325e8b4b59a90` |\n| `API_TOKEN` | API access token for authentication | `1234` |\n| `APP_VERSION` | App version identifier | `1.0` |\n| `TRUSTED_HOSTS` | Trusted domain names | `^.*$` |\n| `ALLOWED_IP_ADDRESSES` | Allowed ip addresses (use % for all IP addresses) | `%` |\n| `SSL_ONLY` | Enable only SSL traffic (true/false) | `false` |\n| `MAINTENANCE_MODE` | Enable maintenance mode (true/false) | `false` |\n| `LIMIT_CONTENT_PER_PAGE` | Pagination config (int value) | `10` |\n| `REGISTRATION_WITH_API_ENDPOINT_ENABLED` | Enable registration API endpoint (true/false) | `true` |\n| `DATABASE_LOGGING` | Log manager config | `true` |\n| `LOG_LEVEL` | Log level (1: CRITICAL, 2: WARNING, 3: NOTICE, 4: INFO) | `4` |\n| `EXCHANGE_RATE_API_ENDPOINT` | Currency converter API config | `https://open.er-api.com/v6/latest` |\n| `CACHE_PRODUCT_DATA` | Enable caching for product data | `true` |\n| `PRODUCT_CACHE_TTL` | Cache expiration for product data | `43200` (12 hours) |\n| `EXCHANGE_DATA_CACHE_TTL` | Currency convertor API config | `86400` (1 day cache expiration) |\n| `DATABASE_DRIVER` | Database driver | `pdo_mysql` |\n| `DATABASE_HOST` | Database host | `127.0.0.1` |\n| `DATABASE_PORT` | Database port | `3306` |\n| `DATABASE_NAME` | Database name | `product_vault` |\n| `DATABASE_USERNAME` | Database username | `root` |\n| `DATABASE_PASSWORD` | Database password | `root` |\n| `REDIS_SCHEME` | Redis scheme | `redis` |\n| `REDIS_HOST` | Redis host | `127.0.0.1` |\n| `REDIS_PORT` | Redis port | `6379` |\n| `REDIS_USER` | Redis user | `default` |\n| `REDIS_PASSWORD` | Redis password | `redis_test_password` |\n| `JWT_TOKEN_TTL` | JWT token TTL (in seconds) | `2629536` (1 month token expiration) |\n| `JWT_SECRET_KEY` | JWT secret key | `%kernel.project_dir%/config/jwt/private.pem` |\n| `JWT_PUBLIC_KEY` | JWT public key | `%kernel.project_dir%/config/jwt/public.pem` |\n| `JWT_PASSPHRASE` | JWT passphrase | `f82fdd5f4644df4ba8fe9df82fdd5f4644df4ba8fe9d` |\n| `MAILER_ENABLED` | Enable mailer | `false` |\n| `MAILER_HOST` | Mailer host | `smtp.seznam.cz` |\n| `MAILER_PORT` | Mailer port | `465` |\n| `MAILER_USERNAME` | Mailer username | `service@becvar.xyz` |\n| `MAILER_PASSWORD` | Mailer password | `password` |\n\n## Dependencies \u0026 requirements\nBased on [api-base](https://github.com/lukasbecvar/api-base)\n* PHP 8.3\n    * [Website](https://php.net)\n* Redis\n    * [Website](https://redis.io)\n* MySQL\n    * [Website](https://www.mysql.com)\n* Symfony framework\n    * [Website](https://symfony.com)\n* Doctrine ORM\n    * [Github](https://github.com/doctrine/orm)\n* Lexik JWT Authentication Bundle\n    * [Github](https://github.com/lexik/LexikJWTAuthenticationBundle)\n* PHPSpreadsheet\n    * [Github](https://github.com/PHPOffice/PhpSpreadsheet)\n* PHPUnit\n    * [Github](https://github.com/sebastianbergmann/phpunit)\n* Better PHPUnit CLI output\n    * [Github](https://github.com/robiningelbrecht/phpunit-pretty-print)\n* PHPStan\n    * [Github](https://github.com/phpstan/phpstan)\n\n## License\nThis software is licensed under the [MIT license](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flukasbecvar%2Fproduct-vault","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flukasbecvar%2Fproduct-vault","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flukasbecvar%2Fproduct-vault/lists"}