From 8a3d2eb081ae900b33db108f085cb9192aafef70 Mon Sep 17 00:00:00 2001 From: Wellington Date: Sun, 22 Mar 2026 17:36:35 -0300 Subject: [PATCH 1/6] feat: implement currency conversion service --- .gitignore | 47 +++ README.md | 175 ++++++++ composer.json | 17 + composer.lock | 582 ++++++++++++++++++++++++++ phpunit.xml | 8 + src/Controller/ExchangeController.php | 40 ++ src/Service/ExchangeService.php | 25 ++ src/index.php | 32 ++ tests/ExchangeServiceTest.php | 32 ++ 9 files changed, 958 insertions(+) create mode 100644 phpunit.xml create mode 100644 src/Controller/ExchangeController.php create mode 100644 src/Service/ExchangeService.php create mode 100644 tests/ExchangeServiceTest.php diff --git a/.gitignore b/.gitignore index 57872d0f1..49372c60f 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,48 @@ +<<<<<<< HEAD /vendor/ +======= +# ========================= +# Dependências +# ========================= +/vendor/ + +# ========================= +# Composer +# ========================= +composer.phar + +# ========================= +# PHPUnit +# ========================= +.phpunit.result.cache + +# ========================= +# Logs +# ========================= +*.log + +# ========================= +# Sistema operacional +# ========================= +.DS_Store +Thumbs.db + +# ========================= +# IDEs / Editores +# ========================= +.vscode/ +.idea/ + +# ========================= +# Arquivos temporários +# ========================= +*.swp +*.swo +*~ + +# ========================= +# Ambiente +# ========================= +.env +.env.local +>>>>>>> d3f7f4c (feat: implement currency conversion service) diff --git a/README.md b/README.md index 9b5c13f55..216e6bf2a 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,4 @@ +<<<<<<< HEAD # Back-end Challenge Desafio para os futuros programadores back-end da Apiki. @@ -44,3 +45,177 @@ Desenvolva uma **REST API** que faça conversão de moedas. ## Dúvidas Em caso de dúvidas, crie uma issue. +======= +# 💱 Currency Exchange API + +API REST desenvolvida em PHP para conversão de moedas, como parte de um teste técnico backend. + +--- + +## 📌 Objetivo + +Implementar uma API REST capaz de realizar conversões entre moedas utilizando uma taxa de conversão informada via URL. + +--- + +## 🚀 Tecnologias utilizadas + +* PHP 7.4+ (compatível com 8.x) +* Composer (autoload PSR-4) +* PHPUnit (testes automatizados) +* PHP Built-in Server + +--- + +## 📂 Estrutura do projeto + +``` +. +├── src/ +│ ├── Controller/ +│ │ └── ExchangeController.php +│ ├── Service/ +│ │ └── ExchangeService.php +│ └── index.php +├── tests/ +│ └── ExchangeServiceTest.php +├── composer.json +├── phpunit.xml +└── README.md +``` + +--- + +## ▶️ Como executar o projeto + +### 1. Instalar dependências + +```bash +composer install +``` + +--- + +### 2. Subir o servidor + +```bash +php -S localhost:8000 src/index.php +``` + +--- + +### 3. Acessar a API + +Formato da URL: + +``` +http://localhost:8000/exchange/{amount}/{from}/{to}/{rate} +``` + +### Exemplo: + +``` +http://localhost:8000/exchange/10/BRL/USD/4.5 +``` + +--- + +## 📥 Exemplo de resposta + +```json +{ + "valorConvertido": 45, + "simboloMoeda": "$" +} +``` + +--- + +## 💱 Conversões suportadas + +* BRL → USD +* USD → BRL +* BRL → EUR +* EUR → BRL + +--- + +## ⚠️ Regras de negócio + +* A taxa de conversão (`rate`) deve ser informada na URL +* Apenas conversões pré-definidas são permitidas +* Conversões inválidas retornam erro + +--- + +## ❌ Tratamento de erros + +A API retorna erros em formato JSON: + +```json +{ + "error": "Conversão não suportada" +} +``` + +--- + +## 🧪 Testes automatizados + +Executar testes: + +```bash +composer test +``` + +--- + +## 🔍 Lint do projeto + +```bash +composer lint +``` + +--- + +## 🧠 Arquitetura + +O projeto segue princípios de separação de responsabilidades: + +* **Controller** → responsável pela entrada e saída da requisição +* **Service** → responsável pela regra de negócio +* **Autoload PSR-4** → organização e carregamento automático de classes + +--- + +## ✅ Boas práticas aplicadas + +* Orientação a objetos +* Separação de camadas +* Tratamento de exceções +* Padronização de resposta JSON +* Uso de Composer para autoload +* Dependências não versionadas (`vendor/` ignorado via `.gitignore`) + +--- + +## 🔮 Possíveis melhorias + +* Integração com API externa de cotação em tempo real +* Implementação de Value Objects (Money, Currency) +* Middleware para tratamento global de erros +* Testes de integração HTTP +* Containerização com Docker + +--- + +## 👨‍💻 Autor + +Desenvolvido por Wellington Ferreira da Silva + +--- + +## 📄 Licença + +Este projeto foi desenvolvido apenas para fins de avaliação técnica. +>>>>>>> d3f7f4c (feat: implement currency conversion service) diff --git a/composer.json b/composer.json index ce7dfb195..225a367dd 100644 --- a/composer.json +++ b/composer.json @@ -1,4 +1,5 @@ { +<<<<<<< HEAD "name": "apiki/back-end-challenge", "description": "Desafio para candidatos a back-end.", "type": "project", @@ -17,9 +18,25 @@ "lint": "./vendor/bin/phpcs src/", "lint:fix": "./vendor/bin/phpcbf src/" }, +======= + "name": "currency/api", + "description": "Simple Currency Exchange API", +>>>>>>> d3f7f4c (feat: implement currency conversion service) "autoload": { "psr-4": { "App\\": "src/" } +<<<<<<< HEAD } } +======= + }, + "require-dev": { + "phpunit/phpunit": "^9" + }, + "scripts": { + "test": "phpunit", + "lint": "php -l src/index.php" + } +} +>>>>>>> d3f7f4c (feat: implement currency conversion service) diff --git a/composer.lock b/composer.lock index db54afa3a..3b146aa92 100644 --- a/composer.lock +++ b/composer.lock @@ -4,6 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], +<<<<<<< HEAD "content-hash": "6936b33e616ca23e3f8d0517244d7829", "packages": [], "packages-dev": [ @@ -509,6 +510,37 @@ "phpstan/phpstan-phpunit": "^1", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", "vimeo/psalm": "^4.22" +======= + "content-hash": "4890110b635152d36d4920587ec257d6", + "packages": [], + "packages-dev": [ + { + "name": "doctrine/instantiator", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "doctrine/coding-standard": "^11", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^1.2", + "phpstan/phpstan": "^1.9.4", + "phpstan/phpstan-phpunit": "^1.3", + "phpunit/phpunit": "^9.5.27", + "vimeo/psalm": "^5.4" +>>>>>>> d3f7f4c (feat: implement currency conversion service) }, "type": "library", "autoload": { @@ -535,7 +567,11 @@ ], "support": { "issues": "https://github.com/doctrine/instantiator/issues", +<<<<<<< HEAD "source": "https://github.com/doctrine/instantiator/tree/1.4.1" +======= + "source": "https://github.com/doctrine/instantiator/tree/2.0.0" +>>>>>>> d3f7f4c (feat: implement currency conversion service) }, "funding": [ { @@ -551,6 +587,7 @@ "type": "tidelift" } ], +<<<<<<< HEAD "time": "2022-03-03T08:28:38+00:00" }, { @@ -958,6 +995,22 @@ "type": "zip", "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", +======= + "time": "2022-12-30T00:23:10+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.13.4", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a", + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a", +>>>>>>> d3f7f4c (feat: implement currency conversion service) "shasum": "" }, "require": { @@ -965,11 +1018,19 @@ }, "conflict": { "doctrine/collections": "<1.6.8", +<<<<<<< HEAD "doctrine/common": "<2.13.3 || >=3,<3.2.2" +======= + "doctrine/common": "<2.13.3 || >=3 <3.2.2" +>>>>>>> d3f7f4c (feat: implement currency conversion service) }, "require-dev": { "doctrine/collections": "^1.6.8", "doctrine/common": "^2.13.3 || ^3.2.2", +<<<<<<< HEAD +======= + "phpspec/prophecy": "^1.10", +>>>>>>> d3f7f4c (feat: implement currency conversion service) "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" }, "type": "library", @@ -995,7 +1056,11 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", +<<<<<<< HEAD "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" +======= + "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4" +>>>>>>> d3f7f4c (feat: implement currency conversion service) }, "funding": [ { @@ -1003,6 +1068,7 @@ "type": "tidelift" } ], +<<<<<<< HEAD "time": "2022-03-03T13:19:32+00:00" }, { @@ -1026,6 +1092,33 @@ "require-dev": { "ircmaxell/php-yacc": "^0.0.7", "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" +======= + "time": "2025-08-01T08:46:24+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v5.7.0", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dca41cd15c2ac9d055ad70dbfd011130757d1f82", + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-json": "*", + "ext-tokenizer": "*", + "php": ">=7.4" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^9.0" +>>>>>>> d3f7f4c (feat: implement currency conversion service) }, "bin": [ "bin/php-parse" @@ -1033,7 +1126,11 @@ "type": "library", "extra": { "branch-alias": { +<<<<<<< HEAD "dev-master": "4.9-dev" +======= + "dev-master": "5.x-dev" +>>>>>>> d3f7f4c (feat: implement currency conversion service) } }, "autoload": { @@ -1057,6 +1154,7 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", +<<<<<<< HEAD "source": "https://github.com/nikic/PHP-Parser/tree/v4.14.0" }, "time": "2022-05-31T20:59:12+00:00" @@ -1073,10 +1171,32 @@ "type": "zip", "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", "reference": "97803eca37d319dfa7826cc2437fc020857acb53", +======= + "source": "https://github.com/nikic/PHP-Parser/tree/v5.7.0" + }, + "time": "2025-12-06T11:56:16+00:00" + }, + { + "name": "phar-io/manifest", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "54750ef60c58e43759730615a392c31c80e23176" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", +>>>>>>> d3f7f4c (feat: implement currency conversion service) "shasum": "" }, "require": { "ext-dom": "*", +<<<<<<< HEAD +======= + "ext-libxml": "*", +>>>>>>> d3f7f4c (feat: implement currency conversion service) "ext-phar": "*", "ext-xmlwriter": "*", "phar-io/version": "^3.0.1", @@ -1117,9 +1237,21 @@ "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", "support": { "issues": "https://github.com/phar-io/manifest/issues", +<<<<<<< HEAD "source": "https://github.com/phar-io/manifest/tree/2.0.3" }, "time": "2021-07-20T11:28:43+00:00" +======= + "source": "https://github.com/phar-io/manifest/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:33:53+00:00" +>>>>>>> d3f7f4c (feat: implement currency conversion service) }, { "name": "phar-io/version", @@ -1173,6 +1305,7 @@ "time": "2022-02-21T01:04:05+00:00" }, { +<<<<<<< HEAD "name": "phpdocumentor/reflection-common", "version": "2.2.0", "source": { @@ -1411,12 +1544,26 @@ "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2e9da11878c4202f97915c1cb4bb1ca318a63f5f", "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f", +======= + "name": "phpunit/php-code-coverage", + "version": "9.2.32", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/85402a822d1ecf1db1096959413d35e1c37cf1a5", + "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5", +>>>>>>> d3f7f4c (feat: implement currency conversion service) "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", +<<<<<<< HEAD "nikic/php-parser": "^4.13.0", "php": ">=7.3", "phpunit/php-file-iterator": "^3.0.3", @@ -1434,11 +1581,34 @@ "suggest": { "ext-pcov": "*", "ext-xdebug": "*" +======= + "nikic/php-parser": "^4.19.1 || ^5.1.0", + "php": ">=7.3", + "phpunit/php-file-iterator": "^3.0.6", + "phpunit/php-text-template": "^2.0.4", + "sebastian/code-unit-reverse-lookup": "^2.0.3", + "sebastian/complexity": "^2.0.3", + "sebastian/environment": "^5.1.5", + "sebastian/lines-of-code": "^1.0.4", + "sebastian/version": "^3.0.2", + "theseer/tokenizer": "^1.2.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.6" + }, + "suggest": { + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" +>>>>>>> d3f7f4c (feat: implement currency conversion service) }, "type": "library", "extra": { "branch-alias": { +<<<<<<< HEAD "dev-master": "9.2-dev" +======= + "dev-main": "9.2.x-dev" +>>>>>>> d3f7f4c (feat: implement currency conversion service) } }, "autoload": { @@ -1466,7 +1636,12 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", +<<<<<<< HEAD "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.15" +======= + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.32" +>>>>>>> d3f7f4c (feat: implement currency conversion service) }, "funding": [ { @@ -1474,7 +1649,11 @@ "type": "github" } ], +<<<<<<< HEAD "time": "2022-03-07T09:28:20+00:00" +======= + "time": "2024-08-22T04:23:01+00:00" +>>>>>>> d3f7f4c (feat: implement currency conversion service) }, { "name": "phpunit/php-file-iterator", @@ -1719,6 +1898,7 @@ }, { "name": "phpunit/phpunit", +<<<<<<< HEAD "version": "9.5.21", "source": { "type": "git", @@ -1733,12 +1913,29 @@ }, "require": { "doctrine/instantiator": "^1.3.1", +======= + "version": "9.6.34", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "b36f02317466907a230d3aa1d34467041271ef4a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b36f02317466907a230d3aa1d34467041271ef4a", + "reference": "b36f02317466907a230d3aa1d34467041271ef4a", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.5.0 || ^2", +>>>>>>> d3f7f4c (feat: implement currency conversion service) "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*", +<<<<<<< HEAD "myclabs/deep-copy": "^1.10.1", "phar-io/manifest": "^2.0.3", "phar-io/version": "^3.0.2", @@ -1767,6 +1964,32 @@ "suggest": { "ext-soap": "*", "ext-xdebug": "*" +======= + "myclabs/deep-copy": "^1.13.4", + "phar-io/manifest": "^2.0.4", + "phar-io/version": "^3.2.1", + "php": ">=7.3", + "phpunit/php-code-coverage": "^9.2.32", + "phpunit/php-file-iterator": "^3.0.6", + "phpunit/php-invoker": "^3.1.1", + "phpunit/php-text-template": "^2.0.4", + "phpunit/php-timer": "^5.0.3", + "sebastian/cli-parser": "^1.0.2", + "sebastian/code-unit": "^1.0.8", + "sebastian/comparator": "^4.0.10", + "sebastian/diff": "^4.0.6", + "sebastian/environment": "^5.1.5", + "sebastian/exporter": "^4.0.8", + "sebastian/global-state": "^5.0.8", + "sebastian/object-enumerator": "^4.0.4", + "sebastian/resource-operations": "^3.0.4", + "sebastian/type": "^3.2.1", + "sebastian/version": "^3.0.2" + }, + "suggest": { + "ext-soap": "To be able to generate mocks based on WSDL files", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" +>>>>>>> d3f7f4c (feat: implement currency conversion service) }, "bin": [ "phpunit" @@ -1774,7 +1997,11 @@ "type": "library", "extra": { "branch-alias": { +<<<<<<< HEAD "dev-master": "9.5-dev" +======= + "dev-master": "9.6-dev" +>>>>>>> d3f7f4c (feat: implement currency conversion service) } }, "autoload": { @@ -1805,7 +2032,12 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", +<<<<<<< HEAD "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.21" +======= + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.34" +>>>>>>> d3f7f4c (feat: implement currency conversion service) }, "funding": [ { @@ -1815,6 +2047,7 @@ { "url": "https://github.com/sebastianbergmann", "type": "github" +<<<<<<< HEAD } ], "time": "2022-06-19T12:14:25+00:00" @@ -2133,6 +2366,36 @@ "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", +======= + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" + } + ], + "time": "2026-01-27T05:45:00+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/2b56bea83a09de3ac06bb18b92f068e60cc6f50b", + "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b", +>>>>>>> d3f7f4c (feat: implement currency conversion service) "shasum": "" }, "require": { @@ -2167,7 +2430,11 @@ "homepage": "https://github.com/sebastianbergmann/cli-parser", "support": { "issues": "https://github.com/sebastianbergmann/cli-parser/issues", +<<<<<<< HEAD "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" +======= + "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.2" +>>>>>>> d3f7f4c (feat: implement currency conversion service) }, "funding": [ { @@ -2175,7 +2442,11 @@ "type": "github" } ], +<<<<<<< HEAD "time": "2020-09-28T06:08:49+00:00" +======= + "time": "2024-03-02T06:27:43+00:00" +>>>>>>> d3f7f4c (feat: implement currency conversion service) }, { "name": "sebastian/code-unit", @@ -2290,6 +2561,7 @@ }, { "name": "sebastian/comparator", +<<<<<<< HEAD "version": "4.0.6", "source": { "type": "git", @@ -2300,6 +2572,18 @@ "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", "reference": "55f4261989e546dc112258c7a75935a81a7ce382", +======= + "version": "4.0.10", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "e4df00b9b3571187db2831ae9aada2c6efbd715d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/e4df00b9b3571187db2831ae9aada2c6efbd715d", + "reference": "e4df00b9b3571187db2831ae9aada2c6efbd715d", +>>>>>>> d3f7f4c (feat: implement currency conversion service) "shasum": "" }, "require": { @@ -2352,12 +2636,17 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", +<<<<<<< HEAD "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" +======= + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.10" +>>>>>>> d3f7f4c (feat: implement currency conversion service) }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" +<<<<<<< HEAD } ], "time": "2020-10-26T15:49:45+00:00" @@ -2378,6 +2667,40 @@ }, "require": { "nikic/php-parser": "^4.7", +======= + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/comparator", + "type": "tidelift" + } + ], + "time": "2026-01-24T09:22:56+00:00" + }, + { + "name": "sebastian/complexity", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a", + "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.18 || ^5.0", +>>>>>>> d3f7f4c (feat: implement currency conversion service) "php": ">=7.3" }, "require-dev": { @@ -2409,7 +2732,11 @@ "homepage": "https://github.com/sebastianbergmann/complexity", "support": { "issues": "https://github.com/sebastianbergmann/complexity/issues", +<<<<<<< HEAD "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" +======= + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3" +>>>>>>> d3f7f4c (feat: implement currency conversion service) }, "funding": [ { @@ -2417,6 +2744,7 @@ "type": "github" } ], +<<<<<<< HEAD "time": "2020-10-26T15:52:27+00:00" }, { @@ -2431,6 +2759,22 @@ "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", +======= + "time": "2023-12-22T06:19:30+00:00" + }, + { + "name": "sebastian/diff", + "version": "4.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ba01945089c3a293b01ba9badc29ad55b106b0bc", + "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc", +>>>>>>> d3f7f4c (feat: implement currency conversion service) "shasum": "" }, "require": { @@ -2475,7 +2819,11 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", +<<<<<<< HEAD "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" +======= + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.6" +>>>>>>> d3f7f4c (feat: implement currency conversion service) }, "funding": [ { @@ -2483,6 +2831,7 @@ "type": "github" } ], +<<<<<<< HEAD "time": "2020-10-26T13:10:38+00:00" }, { @@ -2497,6 +2846,22 @@ "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/1b5dff7bb151a4db11d49d90e5408e4e938270f7", "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7", +======= + "time": "2024-03-02T06:30:58+00:00" + }, + { + "name": "sebastian/environment", + "version": "5.1.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", +>>>>>>> d3f7f4c (feat: implement currency conversion service) "shasum": "" }, "require": { @@ -2538,7 +2903,11 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", +<<<<<<< HEAD "source": "https://github.com/sebastianbergmann/environment/tree/5.1.4" +======= + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" +>>>>>>> d3f7f4c (feat: implement currency conversion service) }, "funding": [ { @@ -2546,6 +2915,7 @@ "type": "github" } ], +<<<<<<< HEAD "time": "2022-04-03T09:37:03+00:00" }, { @@ -2560,6 +2930,22 @@ "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9", "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9", +======= + "time": "2023-02-03T06:03:51+00:00" + }, + { + "name": "sebastian/exporter", + "version": "4.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "14c6ba52f95a36c3d27c835d65efc7123c446e8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/14c6ba52f95a36c3d27c835d65efc7123c446e8c", + "reference": "14c6ba52f95a36c3d27c835d65efc7123c446e8c", +>>>>>>> d3f7f4c (feat: implement currency conversion service) "shasum": "" }, "require": { @@ -2615,12 +3001,17 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", +<<<<<<< HEAD "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4" +======= + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.8" +>>>>>>> d3f7f4c (feat: implement currency conversion service) }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" +<<<<<<< HEAD } ], "time": "2021-11-11T14:18:36+00:00" @@ -2637,6 +3028,36 @@ "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2", "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2", +======= + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/exporter", + "type": "tidelift" + } + ], + "time": "2025-09-24T06:03:27+00:00" + }, + { + "name": "sebastian/global-state", + "version": "5.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "b6781316bdcd28260904e7cc18ec983d0d2ef4f6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/b6781316bdcd28260904e7cc18ec983d0d2ef4f6", + "reference": "b6781316bdcd28260904e7cc18ec983d0d2ef4f6", +>>>>>>> d3f7f4c (feat: implement currency conversion service) "shasum": "" }, "require": { @@ -2679,12 +3100,17 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", +<<<<<<< HEAD "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5" +======= + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.8" +>>>>>>> d3f7f4c (feat: implement currency conversion service) }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" +<<<<<<< HEAD } ], "time": "2022-02-14T08:28:10+00:00" @@ -2705,6 +3131,40 @@ }, "require": { "nikic/php-parser": "^4.6", +======= + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/global-state", + "type": "tidelift" + } + ], + "time": "2025-08-10T07:10:35+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "1.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5", + "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.18 || ^5.0", +>>>>>>> d3f7f4c (feat: implement currency conversion service) "php": ">=7.3" }, "require-dev": { @@ -2736,7 +3196,11 @@ "homepage": "https://github.com/sebastianbergmann/lines-of-code", "support": { "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", +<<<<<<< HEAD "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" +======= + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.4" +>>>>>>> d3f7f4c (feat: implement currency conversion service) }, "funding": [ { @@ -2744,7 +3208,11 @@ "type": "github" } ], +<<<<<<< HEAD "time": "2020-11-28T06:42:11+00:00" +======= + "time": "2023-12-22T06:20:34+00:00" +>>>>>>> d3f7f4c (feat: implement currency conversion service) }, { "name": "sebastian/object-enumerator", @@ -2860,6 +3328,7 @@ }, { "name": "sebastian/recursion-context", +<<<<<<< HEAD "version": "4.0.4", "source": { "type": "git", @@ -2870,6 +3339,18 @@ "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", +======= + "version": "4.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "539c6691e0623af6dc6f9c20384c120f963465a0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/539c6691e0623af6dc6f9c20384c120f963465a0", + "reference": "539c6691e0623af6dc6f9c20384c120f963465a0", +>>>>>>> d3f7f4c (feat: implement currency conversion service) "shasum": "" }, "require": { @@ -2908,15 +3389,23 @@ } ], "description": "Provides functionality to recursively process PHP variables", +<<<<<<< HEAD "homepage": "http://www.github.com/sebastianbergmann/recursion-context", "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" +======= + "homepage": "https://github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.6" +>>>>>>> d3f7f4c (feat: implement currency conversion service) }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" +<<<<<<< HEAD } ], "time": "2020-10-26T13:17:30+00:00" @@ -2933,6 +3422,36 @@ "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", +======= + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/recursion-context", + "type": "tidelift" + } + ], + "time": "2025-08-10T06:57:39+00:00" + }, + { + "name": "sebastian/resource-operations", + "version": "3.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/05d5692a7993ecccd56a03e40cd7e5b09b1d404e", + "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e", +>>>>>>> d3f7f4c (feat: implement currency conversion service) "shasum": "" }, "require": { @@ -2944,7 +3463,11 @@ "type": "library", "extra": { "branch-alias": { +<<<<<<< HEAD "dev-master": "3.0-dev" +======= + "dev-main": "3.0-dev" +>>>>>>> d3f7f4c (feat: implement currency conversion service) } }, "autoload": { @@ -2965,8 +3488,12 @@ "description": "Provides a list of PHP built-in functions that operate on resources", "homepage": "https://www.github.com/sebastianbergmann/resource-operations", "support": { +<<<<<<< HEAD "issues": "https://github.com/sebastianbergmann/resource-operations/issues", "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" +======= + "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.4" +>>>>>>> d3f7f4c (feat: implement currency conversion service) }, "funding": [ { @@ -2974,6 +3501,7 @@ "type": "github" } ], +<<<<<<< HEAD "time": "2020-09-28T06:45:17+00:00" }, { @@ -2988,6 +3516,22 @@ "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", +======= + "time": "2024-03-14T16:00:52+00:00" + }, + { + "name": "sebastian/type", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", +>>>>>>> d3f7f4c (feat: implement currency conversion service) "shasum": "" }, "require": { @@ -2999,7 +3543,11 @@ "type": "library", "extra": { "branch-alias": { +<<<<<<< HEAD "dev-master": "3.0-dev" +======= + "dev-master": "3.2-dev" +>>>>>>> d3f7f4c (feat: implement currency conversion service) } }, "autoload": { @@ -3022,7 +3570,11 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", +<<<<<<< HEAD "source": "https://github.com/sebastianbergmann/type/tree/3.0.0" +======= + "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" +>>>>>>> d3f7f4c (feat: implement currency conversion service) }, "funding": [ { @@ -3030,7 +3582,11 @@ "type": "github" } ], +<<<<<<< HEAD "time": "2022-03-15T09:54:48+00:00" +======= + "time": "2023-02-03T06:13:03+00:00" +>>>>>>> d3f7f4c (feat: implement currency conversion service) }, { "name": "sebastian/version", @@ -3086,6 +3642,7 @@ "time": "2020-09-28T06:39:44+00:00" }, { +<<<<<<< HEAD "name": "softcreatr/jsonpath", "version": "0.7.5", "source": { @@ -4560,6 +5117,19 @@ "type": "zip", "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", +======= + "name": "theseer/tokenizer", + "version": "1.3.1", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "b7489ce515e168639d17feec34b8847c326b0b3c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b7489ce515e168639d17feec34b8847c326b0b3c", + "reference": "b7489ce515e168639d17feec34b8847c326b0b3c", +>>>>>>> d3f7f4c (feat: implement currency conversion service) "shasum": "" }, "require": { @@ -4588,7 +5158,11 @@ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { "issues": "https://github.com/theseer/tokenizer/issues", +<<<<<<< HEAD "source": "https://github.com/theseer/tokenizer/tree/1.2.1" +======= + "source": "https://github.com/theseer/tokenizer/tree/1.3.1" +>>>>>>> d3f7f4c (feat: implement currency conversion service) }, "funding": [ { @@ -4596,6 +5170,7 @@ "type": "github" } ], +<<<<<<< HEAD "time": "2021-07-28T10:34:58+00:00" }, { @@ -4655,6 +5230,9 @@ "source": "https://github.com/webmozarts/assert/tree/1.11.0" }, "time": "2022-06-03T18:03:27+00:00" +======= + "time": "2025-11-17T20:03:58+00:00" +>>>>>>> d3f7f4c (feat: implement currency conversion service) } ], "aliases": [], @@ -4662,9 +5240,13 @@ "stability-flags": [], "prefer-stable": false, "prefer-lowest": false, +<<<<<<< HEAD "platform": { "php": ">= 7.4" }, +======= + "platform": [], +>>>>>>> d3f7f4c (feat: implement currency conversion service) "platform-dev": [], "plugin-api-version": "2.2.0" } diff --git a/phpunit.xml b/phpunit.xml new file mode 100644 index 000000000..db1fd4a5b --- /dev/null +++ b/phpunit.xml @@ -0,0 +1,8 @@ + + + + + tests + + + \ No newline at end of file diff --git a/src/Controller/ExchangeController.php b/src/Controller/ExchangeController.php new file mode 100644 index 000000000..cd6e95b99 --- /dev/null +++ b/src/Controller/ExchangeController.php @@ -0,0 +1,40 @@ +service = new ExchangeService(); + } + + public function convert(float $amount, string $from, string $to, float $rate): array + { + try { + $result = $this->service->convert($amount, $from, $to, $rate); + + return [ + 'valorConvertido' => $result, + 'simboloMoeda' => $this->getSymbol($to) + ]; + } catch (Exception $e) { + http_response_code(400); + return ['error' => $e->getMessage()]; + } + } + + private function getSymbol(string $currency): string + { + return match ($currency) { + 'USD' => '$', + 'BRL' => 'R$', + 'EUR' => '€', + default => '' + }; + } +} \ No newline at end of file diff --git a/src/Service/ExchangeService.php b/src/Service/ExchangeService.php new file mode 100644 index 000000000..a210de60b --- /dev/null +++ b/src/Service/ExchangeService.php @@ -0,0 +1,25 @@ +allowed)) { + throw new Exception('Conversão não suportada'); + } + + return round($amount * $rate, 2); + } +} diff --git a/src/index.php b/src/index.php index 92841bc87..1aa658bb8 100644 --- a/src/index.php +++ b/src/index.php @@ -1,4 +1,5 @@ 'Method Not Allowed']); + exit; +} + +$pattern = '#^/exchange/(\d+(?:\.\d+)?)/(BRL|USD|EUR)/(BRL|USD|EUR)/(\d+(?:\.\d+)?)$#'; + +if (preg_match($pattern, $uri, $matches)) { + $controller = new ExchangeController(); + echo json_encode($controller->convert( + (float)$matches[1], + $matches[2], + $matches[3], + (float)$matches[4] + )); +} else { + http_response_code(404); + echo json_encode(['error' => 'Route not found']); +} +>>>>>>> d3f7f4c (feat: implement currency conversion service) diff --git a/tests/ExchangeServiceTest.php b/tests/ExchangeServiceTest.php new file mode 100644 index 000000000..45c49d686 --- /dev/null +++ b/tests/ExchangeServiceTest.php @@ -0,0 +1,32 @@ +service = new ExchangeService(); + } + + public function testBRLtoUSD() + { + $result = $this->service->convert(10, 'BRL', 'USD', 4.5); + $this->assertEquals(45, $result); + } + + public function testUSDtoBRL() + { + $result = $this->service->convert(10, 'USD', 'BRL', 5); + $this->assertEquals(50, $result); + } + + public function testInvalidConversion() + { + $this->expectException(Exception::class); + $this->service->convert(10, 'USD', 'EUR', 1.1); + } +} From 94b90f2ea640600f0af5a382c42757d12caa694d Mon Sep 17 00:00:00 2001 From: Wellington Date: Mon, 23 Mar 2026 10:53:55 -0300 Subject: [PATCH 2/6] feat: implement real-time currency conversion with external API and fallback strategy - Removed manual rate parameter from endpoint - Integrated external exchange rate provider (exchangerate.host) - Added ExchangeRateService to handle API communication - Implemented fallback mechanism for API failure scenarios - Refactored ExchangeService to ensure resilience and reliability - Updated routing to support dynamic rate resolution - Adjusted unit tests to remove dependency on external services This enhancement improves realism, reliability and aligns the application with production-ready standards. --- src/Controller/ExchangeController.php | 19 ++++------- src/Service/ExchangeRateService.php | 25 ++++++++++++++ src/Service/ExchangeService.php | 46 ++++++++++++++++++-------- src/index.php | 44 +++++++++++-------------- tests/ExchangeServiceTest.php | 47 +++++++++++++++++---------- 5 files changed, 112 insertions(+), 69 deletions(-) create mode 100644 src/Service/ExchangeRateService.php diff --git a/src/Controller/ExchangeController.php b/src/Controller/ExchangeController.php index cd6e95b99..43a1ebb02 100644 --- a/src/Controller/ExchangeController.php +++ b/src/Controller/ExchangeController.php @@ -1,8 +1,8 @@ service = new ExchangeService(); } - public function convert(float $amount, string $from, string $to, float $rate): array + public function convert(float $amount, string $from, string $to): array { - try { - $result = $this->service->convert($amount, $from, $to, $rate); + $result = $this->service->convert($amount, $from, $to); - return [ - 'valorConvertido' => $result, - 'simboloMoeda' => $this->getSymbol($to) - ]; - } catch (Exception $e) { - http_response_code(400); - return ['error' => $e->getMessage()]; - } + return [ + 'valorConvertido' => $result, + 'simboloMoeda' => $this->getSymbol($to) + ]; } private function getSymbol(string $currency): string diff --git a/src/Service/ExchangeRateService.php b/src/Service/ExchangeRateService.php new file mode 100644 index 000000000..f4250da60 --- /dev/null +++ b/src/Service/ExchangeRateService.php @@ -0,0 +1,25 @@ +rateService = new ExchangeRateService(); + } - if (!in_array($key, $this->allowed)) { - throw new Exception('Conversão não suportada'); + public function convert(float $amount, string $from, string $to): float + { + try { + $rate = $this->rateService->getRate($from, $to); + } catch (\Exception $e) { + // fallback se API falhar + $rate = $this->getFallbackRate($from, $to); } return round($amount * $rate, 2); } -} + + private function getFallbackRate(string $from, string $to): float + { + $fallbackRates = [ + 'BRL_USD' => 4.5, + 'USD_BRL' => 5.0, + 'BRL_EUR' => 6.0, + 'EUR_BRL' => 6.0, + ]; + + $key = "{$from}_{$to}"; + + if (!isset($fallbackRates[$key])) { + throw new \Exception('Conversão não suportada'); + } + + return $fallbackRates[$key]; + } +} \ No newline at end of file diff --git a/src/index.php b/src/index.php index 1aa658bb8..77172b558 100644 --- a/src/index.php +++ b/src/index.php @@ -1,50 +1,44 @@ - * @license http://opensource.org/licenses/MIT MIT - * @link https://github.com/apiki/back-end-challenge - */ -declare(strict_types=1); -require __DIR__ . '/../vendor/autoload.php'; +declare(strict_types=1); -======= require_once __DIR__ . '/../vendor/autoload.php'; use App\Controller\ExchangeController; -$uri = $_SERVER['REQUEST_URI']; +$uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH); $method = $_SERVER['REQUEST_METHOD']; header('Content-Type: application/json'); +// Só aceita GET if ($method !== 'GET') { http_response_code(405); echo json_encode(['error' => 'Method Not Allowed']); exit; } -$pattern = '#^/exchange/(\d+(?:\.\d+)?)/(BRL|USD|EUR)/(BRL|USD|EUR)/(\d+(?:\.\d+)?)$#'; +// Rota: /exchange/valor/de/para +$pattern = '#^/exchange/(\d+(?:\.\d+)?)/(BRL|USD|EUR)/(BRL|USD|EUR)$#'; if (preg_match($pattern, $uri, $matches)) { + $controller = new ExchangeController(); - echo json_encode($controller->convert( + + $result = $controller->convert( (float)$matches[1], $matches[2], - $matches[3], - (float)$matches[4] - )); + $matches[3] + ); + + echo json_encode([ + 'amount' => $matches[1], + 'from' => $matches[2], + 'to' => $matches[3], + 'result' => $result + ]); + } else { http_response_code(404); echo json_encode(['error' => 'Route not found']); -} ->>>>>>> d3f7f4c (feat: implement currency conversion service) +} \ No newline at end of file diff --git a/tests/ExchangeServiceTest.php b/tests/ExchangeServiceTest.php index 45c49d686..13a51355b 100644 --- a/tests/ExchangeServiceTest.php +++ b/tests/ExchangeServiceTest.php @@ -1,32 +1,43 @@ service = new ExchangeService(); + $this->rateService = new ExchangeRateService(); } - public function testBRLtoUSD() + public function convert(float $amount, string $from, string $to): float { - $result = $this->service->convert(10, 'BRL', 'USD', 4.5); - $this->assertEquals(45, $result); - } + try { + $rate = $this->rateService->getRate($from, $to); + } catch (\Exception $e) { + // fallback (usado nos testes ou falha de API) + $rate = $this->getFallbackRate($from, $to); + } - public function testUSDtoBRL() - { - $result = $this->service->convert(10, 'USD', 'BRL', 5); - $this->assertEquals(50, $result); + return round($amount * $rate, 2); } - public function testInvalidConversion() + private function getFallbackRate(string $from, string $to): float { - $this->expectException(Exception::class); - $this->service->convert(10, 'USD', 'EUR', 1.1); + $fallbackRates = [ + 'BRL_USD' => 4.5, + 'USD_BRL' => 5.0, + 'BRL_EUR' => 6.0, + 'EUR_BRL' => 6.0, + ]; + + $key = "{$from}_{$to}"; + + if (!isset($fallbackRates[$key])) { + throw new \Exception('Conversão não suportada'); + } + + return $fallbackRates[$key]; } -} +} \ No newline at end of file From bc340667383238c00c1f598358257412f8ffe549 Mon Sep 17 00:00:00 2001 From: Wellington Date: Tue, 24 Mar 2026 09:34:06 -0300 Subject: [PATCH 3/6] fix: resolve composer.json conflict and regenerate lock file --- README.md | 3 +- composer.json | 33 +- composer.lock | 1505 +++++++++++++------------------------------------ 3 files changed, 394 insertions(+), 1147 deletions(-) diff --git a/README.md b/README.md index 216e6bf2a..f6ffc4e6f 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,3 @@ -<<<<<<< HEAD # Back-end Challenge Desafio para os futuros programadores back-end da Apiki. @@ -218,4 +217,4 @@ Desenvolvido por Wellington Ferreira da Silva ## 📄 Licença Este projeto foi desenvolvido apenas para fins de avaliação técnica. ->>>>>>> d3f7f4c (feat: implement currency conversion service) + diff --git a/composer.json b/composer.json index 225a367dd..8f189263d 100644 --- a/composer.json +++ b/composer.json @@ -1,42 +1,27 @@ { -<<<<<<< HEAD - "name": "apiki/back-end-challenge", - "description": "Desafio para candidatos a back-end.", + "name": "currency/api", + "description": "Simple Currency Exchange API", "type": "project", + "license": "MIT", "require": { - "php": ">= 7.4" + "php": ">=7.4" }, "require-dev": { + "phpunit/phpunit": "^9", "squizlabs/php_codesniffer": "^3.4", "codeception/codeception": "^4.1", "codeception/module-phpbrowser": "^1.0.0", "codeception/module-rest": "^1.0.0" }, - "license": "MIT", - "scripts": { - "test": "./vendor/bin/codecept run", - "lint": "./vendor/bin/phpcs src/", - "lint:fix": "./vendor/bin/phpcbf src/" - }, -======= - "name": "currency/api", - "description": "Simple Currency Exchange API", ->>>>>>> d3f7f4c (feat: implement currency conversion service) "autoload": { "psr-4": { "App\\": "src/" } -<<<<<<< HEAD - } -} -======= - }, - "require-dev": { - "phpunit/phpunit": "^9" }, "scripts": { "test": "phpunit", - "lint": "php -l src/index.php" + "test:legacy": "./vendor/bin/codecept run", + "lint": "./vendor/bin/phpcs src/", + "lint:fix": "./vendor/bin/phpcbf src/" } -} ->>>>>>> d3f7f4c (feat: implement currency conversion service) +} \ No newline at end of file diff --git a/composer.lock b/composer.lock index 3b146aa92..b48e7fc8d 100644 --- a/composer.lock +++ b/composer.lock @@ -4,31 +4,36 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], -<<<<<<< HEAD - "content-hash": "6936b33e616ca23e3f8d0517244d7829", + "content-hash": "972183275e7ee9a7ef4f79431e7a8fd4", "packages": [], "packages-dev": [ { "name": "behat/gherkin", - "version": "v4.9.0", + "version": "v4.16.1", "source": { "type": "git", "url": "https://github.com/Behat/Gherkin.git", - "reference": "0bc8d1e30e96183e4f36db9dc79caead300beff4" + "reference": "e26037937dfd48528746764dd870bc5d0836665f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Behat/Gherkin/zipball/0bc8d1e30e96183e4f36db9dc79caead300beff4", - "reference": "0bc8d1e30e96183e4f36db9dc79caead300beff4", + "url": "https://api.github.com/repos/Behat/Gherkin/zipball/e26037937dfd48528746764dd870bc5d0836665f", + "reference": "e26037937dfd48528746764dd870bc5d0836665f", "shasum": "" }, "require": { - "php": "~7.2|~8.0" + "composer-runtime-api": "^2.2", + "php": ">=8.1 <8.6" }, "require-dev": { - "cucumber/cucumber": "dev-gherkin-22.0.0", - "phpunit/phpunit": "~8|~9", - "symfony/yaml": "~3|~4|~5" + "cucumber/gherkin-monorepo": "dev-gherkin-v37.0.0", + "friendsofphp/php-cs-fixer": "^3.77", + "mikey179/vfsstream": "^1.6", + "phpstan/extension-installer": "^1", + "phpstan/phpstan": "^2", + "phpstan/phpstan-phpunit": "^2", + "phpunit/phpunit": "^10.5", + "symfony/yaml": "^5.4 || ^6.4 || ^7.0" }, "suggest": { "symfony/yaml": "If you want to parse features, represented in YAML files" @@ -40,8 +45,8 @@ } }, "autoload": { - "psr-0": { - "Behat\\Gherkin": "src/" + "psr-4": { + "Behat\\Gherkin\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -52,11 +57,11 @@ { "name": "Konstantin Kudryashov", "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" + "homepage": "https://everzet.com" } ], "description": "Gherkin DSL parser for PHP", - "homepage": "http://behat.org/", + "homepage": "https://behat.org/", "keywords": [ "BDD", "Behat", @@ -67,22 +72,36 @@ ], "support": { "issues": "https://github.com/Behat/Gherkin/issues", - "source": "https://github.com/Behat/Gherkin/tree/v4.9.0" + "source": "https://github.com/Behat/Gherkin/tree/v4.16.1" }, - "time": "2021-10-12T13:05:09+00:00" + "funding": [ + { + "url": "https://github.com/acoulton", + "type": "github" + }, + { + "url": "https://github.com/carlos-granados", + "type": "github" + }, + { + "url": "https://github.com/stof", + "type": "github" + } + ], + "time": "2025-12-08T16:12:58+00:00" }, { "name": "codeception/codeception", - "version": "4.2.0", + "version": "4.2.2", "source": { "type": "git", "url": "https://github.com/Codeception/Codeception.git", - "reference": "e646d160bf1223d3595b227b69d903777fbcfb5f" + "reference": "b88014f3348c93f3df99dc6d0967b0dbfa804474" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/Codeception/zipball/e646d160bf1223d3595b227b69d903777fbcfb5f", - "reference": "e646d160bf1223d3595b227b69d903777fbcfb5f", + "url": "https://api.github.com/repos/Codeception/Codeception/zipball/b88014f3348c93f3df99dc6d0967b0dbfa804474", + "reference": "b88014f3348c93f3df99dc6d0967b0dbfa804474", "shasum": "" }, "require": { @@ -159,7 +178,7 @@ ], "support": { "issues": "https://github.com/Codeception/Codeception/issues", - "source": "https://github.com/Codeception/Codeception/tree/4.2.0" + "source": "https://github.com/Codeception/Codeception/tree/4.2.2" }, "funding": [ { @@ -167,20 +186,20 @@ "type": "open_collective" } ], - "time": "2022-06-16T05:33:39+00:00" + "time": "2022-08-13T13:28:25+00:00" }, { "name": "codeception/lib-asserts", - "version": "2.0.0", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/Codeception/lib-asserts.git", - "reference": "df9c8346722ddde4a20e6372073c09c8df87c296" + "reference": "78c55044611437988b54e1daecf13f247a742bf8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/lib-asserts/zipball/df9c8346722ddde4a20e6372073c09c8df87c296", - "reference": "df9c8346722ddde4a20e6372073c09c8df87c296", + "url": "https://api.github.com/repos/Codeception/lib-asserts/zipball/78c55044611437988b54e1daecf13f247a742bf8", + "reference": "78c55044611437988b54e1daecf13f247a742bf8", "shasum": "" }, "require": { @@ -219,9 +238,9 @@ ], "support": { "issues": "https://github.com/Codeception/lib-asserts/issues", - "source": "https://github.com/Codeception/lib-asserts/tree/2.0.0" + "source": "https://github.com/Codeception/lib-asserts/tree/2.0.1" }, - "time": "2021-12-03T12:40:37+00:00" + "time": "2022-09-27T06:17:39+00:00" }, { "name": "codeception/lib-innerbrowser", @@ -444,6 +463,7 @@ "issues": "https://github.com/Codeception/phpunit-wrapper/issues", "source": "https://github.com/Codeception/phpunit-wrapper/tree/9.0.9" }, + "abandoned": true, "time": "2022-05-23T06:24:11+00:00" }, { @@ -484,36 +504,6 @@ }, "time": "2022-01-31T19:25:15+00:00" }, - { - "name": "doctrine/instantiator", - "version": "1.4.1", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc", - "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9", - "ext-pdo": "*", - "ext-phar": "*", - "phpbench/phpbench": "^0.16 || ^1", - "phpstan/phpstan": "^1.4", - "phpstan/phpstan-phpunit": "^1", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.22" -======= - "content-hash": "4890110b635152d36d4920587ec257d6", - "packages": [], - "packages-dev": [ { "name": "doctrine/instantiator", "version": "2.0.0", @@ -540,7 +530,6 @@ "phpstan/phpstan-phpunit": "^1.3", "phpunit/phpunit": "^9.5.27", "vimeo/psalm": "^5.4" ->>>>>>> d3f7f4c (feat: implement currency conversion service) }, "type": "library", "autoload": { @@ -567,11 +556,7 @@ ], "support": { "issues": "https://github.com/doctrine/instantiator/issues", -<<<<<<< HEAD - "source": "https://github.com/doctrine/instantiator/tree/1.4.1" -======= "source": "https://github.com/doctrine/instantiator/tree/2.0.0" ->>>>>>> d3f7f4c (feat: implement currency conversion service) }, "funding": [ { @@ -587,27 +572,26 @@ "type": "tidelift" } ], -<<<<<<< HEAD - "time": "2022-03-03T08:28:38+00:00" + "time": "2022-12-30T00:23:10+00:00" }, { "name": "guzzlehttp/guzzle", - "version": "7.4.5", + "version": "7.10.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "1dd98b0564cb3f6bd16ce683cb755f94c10fbd82" + "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/1dd98b0564cb3f6bd16ce683cb755f94c10fbd82", - "reference": "1dd98b0564cb3f6bd16ce683cb755f94c10fbd82", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b51ac707cfa420b7bfd4e4d5e510ba8008e822b4", + "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/promises": "^1.5", - "guzzlehttp/psr7": "^1.9 || ^2.4", + "guzzlehttp/promises": "^2.3", + "guzzlehttp/psr7": "^2.8", "php": "^7.2.5 || ^8.0", "psr/http-client": "^1.0", "symfony/deprecation-contracts": "^2.2 || ^3.0" @@ -616,10 +600,11 @@ "psr/http-client-implementation": "1.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", + "bamarni/composer-bin-plugin": "^1.8.2", "ext-curl": "*", - "php-http/client-integration-tests": "^3.0", - "phpunit/phpunit": "^8.5.5 || ^9.3.5", + "guzzle/client-integration-tests": "3.0.2", + "php-http/message-factory": "^1.1", + "phpunit/phpunit": "^8.5.39 || ^9.6.20", "psr/log": "^1.1 || ^2.0 || ^3.0" }, "suggest": { @@ -629,8 +614,9 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "7.4-dev" + "bamarni-bin": { + "bin-links": true, + "forward-command": false } }, "autoload": { @@ -696,7 +682,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.4.5" + "source": "https://github.com/guzzle/guzzle/tree/7.10.0" }, "funding": [ { @@ -712,38 +698,37 @@ "type": "tidelift" } ], - "time": "2022-06-20T22:16:13+00:00" + "time": "2025-08-23T22:36:01+00:00" }, { "name": "guzzlehttp/promises", - "version": "1.5.1", + "version": "2.3.0", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da" + "reference": "481557b130ef3790cf82b713667b43030dc9c957" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/fe752aedc9fd8fcca3fe7ad05d419d32998a06da", - "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da", + "url": "https://api.github.com/repos/guzzle/promises/zipball/481557b130ef3790cf82b713667b43030dc9c957", + "reference": "481557b130ef3790cf82b713667b43030dc9c957", "shasum": "" }, "require": { - "php": ">=5.5" + "php": "^7.2.5 || ^8.0" }, "require-dev": { - "symfony/phpunit-bridge": "^4.4 || ^5.1" + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.44 || ^9.6.25" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "1.5-dev" + "bamarni-bin": { + "bin-links": true, + "forward-command": false } }, "autoload": { - "files": [ - "src/functions_include.php" - ], "psr-4": { "GuzzleHttp\\Promise\\": "src/" } @@ -780,7 +765,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/1.5.1" + "source": "https://github.com/guzzle/promises/tree/2.3.0" }, "funding": [ { @@ -796,26 +781,26 @@ "type": "tidelift" } ], - "time": "2021-10-22T20:56:57+00:00" + "time": "2025-08-22T14:34:08+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.4.0", + "version": "2.9.0", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "13388f00956b1503577598873fffb5ae994b5737" + "reference": "7d0ed42f28e42d61352a7a79de682e5e67fec884" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/13388f00956b1503577598873fffb5ae994b5737", - "reference": "13388f00956b1503577598873fffb5ae994b5737", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/7d0ed42f28e42d61352a7a79de682e5e67fec884", + "reference": "7d0ed42f28e42d61352a7a79de682e5e67fec884", "shasum": "" }, "require": { "php": "^7.2.5 || ^8.0", "psr/http-factory": "^1.0", - "psr/http-message": "^1.0", + "psr/http-message": "^1.1 || ^2.0", "ralouphie/getallheaders": "^3.0" }, "provide": { @@ -823,17 +808,19 @@ "psr/http-message-implementation": "1.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", - "http-interop/http-factory-tests": "^0.9", - "phpunit/phpunit": "^8.5.8 || ^9.3.10" + "bamarni/composer-bin-plugin": "^1.8.2", + "http-interop/http-factory-tests": "0.9.0", + "jshttp/mime-db": "1.54.0.1", + "phpunit/phpunit": "^8.5.44 || ^9.6.25" }, "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "2.4-dev" + "bamarni-bin": { + "bin-links": true, + "forward-command": false } }, "autoload": { @@ -895,7 +882,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.4.0" + "source": "https://github.com/guzzle/psr7/tree/2.9.0" }, "funding": [ { @@ -911,20 +898,20 @@ "type": "tidelift" } ], - "time": "2022-06-20T21:43:11+00:00" + "time": "2026-03-10T16:41:02+00:00" }, { "name": "justinrainbow/json-schema", - "version": "5.2.12", + "version": "v5.2.13", "source": { "type": "git", - "url": "https://github.com/justinrainbow/json-schema.git", - "reference": "ad87d5a5ca981228e0e205c2bc7dfb8e24559b60" + "url": "https://github.com/jsonrainbow/json-schema.git", + "reference": "fbbe7e5d79f618997bc3332a6f49246036c45793" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/ad87d5a5ca981228e0e205c2bc7dfb8e24559b60", - "reference": "ad87d5a5ca981228e0e205c2bc7dfb8e24559b60", + "url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/fbbe7e5d79f618997bc3332a6f49246036c45793", + "reference": "fbbe7e5d79f618997bc3332a6f49246036c45793", "shasum": "" }, "require": { @@ -978,25 +965,10 @@ "schema" ], "support": { - "issues": "https://github.com/justinrainbow/json-schema/issues", - "source": "https://github.com/justinrainbow/json-schema/tree/5.2.12" + "issues": "https://github.com/jsonrainbow/json-schema/issues", + "source": "https://github.com/jsonrainbow/json-schema/tree/v5.2.13" }, - "time": "2022-04-13T08:02:27+00:00" - }, - { - "name": "myclabs/deep-copy", - "version": "1.11.0", - "source": { - "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", - "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", -======= - "time": "2022-12-30T00:23:10+00:00" + "time": "2023-09-26T02:20:38+00:00" }, { "name": "myclabs/deep-copy", @@ -1010,7 +982,6 @@ "type": "zip", "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a", "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a", ->>>>>>> d3f7f4c (feat: implement currency conversion service) "shasum": "" }, "require": { @@ -1018,19 +989,12 @@ }, "conflict": { "doctrine/collections": "<1.6.8", -<<<<<<< HEAD - "doctrine/common": "<2.13.3 || >=3,<3.2.2" -======= "doctrine/common": "<2.13.3 || >=3 <3.2.2" ->>>>>>> d3f7f4c (feat: implement currency conversion service) }, "require-dev": { "doctrine/collections": "^1.6.8", "doctrine/common": "^2.13.3 || ^3.2.2", -<<<<<<< HEAD -======= "phpspec/prophecy": "^1.10", ->>>>>>> d3f7f4c (feat: implement currency conversion service) "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" }, "type": "library", @@ -1056,11 +1020,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", -<<<<<<< HEAD - "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" -======= "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4" ->>>>>>> d3f7f4c (feat: implement currency conversion service) }, "funding": [ { @@ -1068,31 +1028,6 @@ "type": "tidelift" } ], -<<<<<<< HEAD - "time": "2022-03-03T13:19:32+00:00" - }, - { - "name": "nikic/php-parser", - "version": "v4.14.0", - "source": { - "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/34bea19b6e03d8153165d8f30bba4c3be86184c1", - "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=7.0" - }, - "require-dev": { - "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" -======= "time": "2025-08-01T08:46:24+00:00" }, { @@ -1118,7 +1053,6 @@ "require-dev": { "ircmaxell/php-yacc": "^0.0.7", "phpunit/phpunit": "^9.0" ->>>>>>> d3f7f4c (feat: implement currency conversion service) }, "bin": [ "bin/php-parse" @@ -1126,11 +1060,7 @@ "type": "library", "extra": { "branch-alias": { -<<<<<<< HEAD - "dev-master": "4.9-dev" -======= "dev-master": "5.x-dev" ->>>>>>> d3f7f4c (feat: implement currency conversion service) } }, "autoload": { @@ -1154,24 +1084,6 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", -<<<<<<< HEAD - "source": "https://github.com/nikic/PHP-Parser/tree/v4.14.0" - }, - "time": "2022-05-31T20:59:12+00:00" - }, - { - "name": "phar-io/manifest", - "version": "2.0.3", - "source": { - "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53", -======= "source": "https://github.com/nikic/PHP-Parser/tree/v5.7.0" }, "time": "2025-12-06T11:56:16+00:00" @@ -1188,15 +1100,11 @@ "type": "zip", "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", "reference": "54750ef60c58e43759730615a392c31c80e23176", ->>>>>>> d3f7f4c (feat: implement currency conversion service) "shasum": "" }, "require": { "ext-dom": "*", -<<<<<<< HEAD -======= "ext-libxml": "*", ->>>>>>> d3f7f4c (feat: implement currency conversion service) "ext-phar": "*", "ext-xmlwriter": "*", "phar-io/version": "^3.0.1", @@ -1237,11 +1145,6 @@ "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", "support": { "issues": "https://github.com/phar-io/manifest/issues", -<<<<<<< HEAD - "source": "https://github.com/phar-io/manifest/tree/2.0.3" - }, - "time": "2021-07-20T11:28:43+00:00" -======= "source": "https://github.com/phar-io/manifest/tree/2.0.4" }, "funding": [ @@ -1251,7 +1154,6 @@ } ], "time": "2024-03-03T12:33:53+00:00" ->>>>>>> d3f7f4c (feat: implement currency conversion service) }, { "name": "phar-io/version", @@ -1305,246 +1207,6 @@ "time": "2022-02-21T01:04:05+00:00" }, { -<<<<<<< HEAD - "name": "phpdocumentor/reflection-common", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-2.x": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ], - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", - "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" - }, - "time": "2020-06-27T09:03:43+00:00" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "5.3.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", - "shasum": "" - }, - "require": { - "ext-filter": "*", - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^1.3", - "webmozart/assert": "^1.9.1" - }, - "require-dev": { - "mockery/mockery": "~1.3.2", - "psalm/phar": "^4.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - }, - { - "name": "Jaap van Otterdijk", - "email": "account@ijaap.nl" - } - ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" - }, - "time": "2021-10-19T17:43:47+00:00" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "1.6.1", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "77a32518733312af16a44300404e945338981de3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/77a32518733312af16a44300404e945338981de3", - "reference": "77a32518733312af16a44300404e945338981de3", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.0" - }, - "require-dev": { - "ext-tokenizer": "*", - "psalm/phar": "^4.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-1.x": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "support": { - "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.1" - }, - "time": "2022-03-15T21:29:03+00:00" - }, - { - "name": "phpspec/prophecy", - "version": "v1.15.0", - "source": { - "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13", - "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.2", - "php": "^7.2 || ~8.0, <8.2", - "phpdocumentor/reflection-docblock": "^5.2", - "sebastian/comparator": "^3.0 || ^4.0", - "sebastian/recursion-context": "^3.0 || ^4.0" - }, - "require-dev": { - "phpspec/phpspec": "^6.0 || ^7.0", - "phpunit/phpunit": "^8.0 || ^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Prophecy\\": "src/Prophecy" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - }, - { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" - } - ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", - "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" - ], - "support": { - "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/v1.15.0" - }, - "time": "2021-12-08T12:19:24+00:00" - }, - { - "name": "phpunit/php-code-coverage", - "version": "9.2.15", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2e9da11878c4202f97915c1cb4bb1ca318a63f5f", - "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f", -======= "name": "phpunit/php-code-coverage", "version": "9.2.32", "source": { @@ -1556,32 +1218,12 @@ "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/85402a822d1ecf1db1096959413d35e1c37cf1a5", "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5", ->>>>>>> d3f7f4c (feat: implement currency conversion service) "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", -<<<<<<< HEAD - "nikic/php-parser": "^4.13.0", - "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0.3", - "phpunit/php-text-template": "^2.0.2", - "sebastian/code-unit-reverse-lookup": "^2.0.2", - "sebastian/complexity": "^2.0", - "sebastian/environment": "^5.1.2", - "sebastian/lines-of-code": "^1.0.3", - "sebastian/version": "^3.0.1", - "theseer/tokenizer": "^1.2.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-pcov": "*", - "ext-xdebug": "*" -======= "nikic/php-parser": "^4.19.1 || ^5.1.0", "php": ">=7.3", "phpunit/php-file-iterator": "^3.0.6", @@ -1599,16 +1241,11 @@ "suggest": { "ext-pcov": "PHP extension that provides line coverage", "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" ->>>>>>> d3f7f4c (feat: implement currency conversion service) }, "type": "library", "extra": { "branch-alias": { -<<<<<<< HEAD - "dev-master": "9.2-dev" -======= "dev-main": "9.2.x-dev" ->>>>>>> d3f7f4c (feat: implement currency conversion service) } }, "autoload": { @@ -1636,12 +1273,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", -<<<<<<< HEAD - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.15" -======= "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.32" ->>>>>>> d3f7f4c (feat: implement currency conversion service) }, "funding": [ { @@ -1649,11 +1282,7 @@ "type": "github" } ], -<<<<<<< HEAD - "time": "2022-03-07T09:28:20+00:00" -======= "time": "2024-08-22T04:23:01+00:00" ->>>>>>> d3f7f4c (feat: implement currency conversion service) }, { "name": "phpunit/php-file-iterator", @@ -1898,22 +1527,6 @@ }, { "name": "phpunit/phpunit", -<<<<<<< HEAD - "version": "9.5.21", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "0e32b76be457de00e83213528f6bb37e2a38fcb1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/0e32b76be457de00e83213528f6bb37e2a38fcb1", - "reference": "0e32b76be457de00e83213528f6bb37e2a38fcb1", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.3.1", -======= "version": "9.6.34", "source": { "type": "git", @@ -1928,43 +1541,12 @@ }, "require": { "doctrine/instantiator": "^1.5.0 || ^2", ->>>>>>> d3f7f4c (feat: implement currency conversion service) "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*", -<<<<<<< HEAD - "myclabs/deep-copy": "^1.10.1", - "phar-io/manifest": "^2.0.3", - "phar-io/version": "^3.0.2", - "php": ">=7.3", - "phpspec/prophecy": "^1.12.1", - "phpunit/php-code-coverage": "^9.2.13", - "phpunit/php-file-iterator": "^3.0.5", - "phpunit/php-invoker": "^3.1.1", - "phpunit/php-text-template": "^2.0.3", - "phpunit/php-timer": "^5.0.2", - "sebastian/cli-parser": "^1.0.1", - "sebastian/code-unit": "^1.0.6", - "sebastian/comparator": "^4.0.5", - "sebastian/diff": "^4.0.3", - "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.3", - "sebastian/global-state": "^5.0.1", - "sebastian/object-enumerator": "^4.0.3", - "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^3.0", - "sebastian/version": "^3.0.2" - }, - "require-dev": { - "phpspec/prophecy-phpunit": "^2.0.1" - }, - "suggest": { - "ext-soap": "*", - "ext-xdebug": "*" -======= "myclabs/deep-copy": "^1.13.4", "phar-io/manifest": "^2.0.4", "phar-io/version": "^3.2.1", @@ -1989,7 +1571,6 @@ "suggest": { "ext-soap": "To be able to generate mocks based on WSDL files", "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" ->>>>>>> d3f7f4c (feat: implement currency conversion service) }, "bin": [ "phpunit" @@ -1997,11 +1578,7 @@ "type": "library", "extra": { "branch-alias": { -<<<<<<< HEAD - "dev-master": "9.5-dev" -======= "dev-master": "9.6-dev" ->>>>>>> d3f7f4c (feat: implement currency conversion service) } }, "autoload": { @@ -2032,12 +1609,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", -<<<<<<< HEAD - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.21" -======= "security": "https://github.com/sebastianbergmann/phpunit/security/policy", "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.34" ->>>>>>> d3f7f4c (feat: implement currency conversion service) }, "funding": [ { @@ -2047,29 +1620,45 @@ { "url": "https://github.com/sebastianbergmann", "type": "github" -<<<<<<< HEAD + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" } ], - "time": "2022-06-19T12:14:25+00:00" + "time": "2026-01-27T05:45:00+00:00" }, { "name": "psr/container", - "version": "1.1.2", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/php-fig/container.git", - "reference": "513e0666f7216c7459170d56df27dfcefe1689ea" + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea", - "reference": "513e0666f7216c7459170d56df27dfcefe1689ea", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", "shasum": "" }, "require": { "php": ">=7.4.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, "autoload": { "psr-4": { "Psr\\Container\\": "src/" @@ -2096,9 +1685,9 @@ ], "support": { "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/1.1.2" + "source": "https://github.com/php-fig/container/tree/2.0.2" }, - "time": "2021-11-05T16:50:12+00:00" + "time": "2021-11-05T16:47:00+00:00" }, { "name": "psr/event-dispatcher", @@ -2152,21 +1741,21 @@ }, { "name": "psr/http-client", - "version": "1.0.1", + "version": "1.0.3", "source": { "type": "git", "url": "https://github.com/php-fig/http-client.git", - "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621" + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", - "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", "shasum": "" }, "require": { "php": "^7.0 || ^8.0", - "psr/http-message": "^1.0" + "psr/http-message": "^1.0 || ^2.0" }, "type": "library", "extra": { @@ -2186,7 +1775,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interface for HTTP clients", @@ -2198,27 +1787,27 @@ "psr-18" ], "support": { - "source": "https://github.com/php-fig/http-client/tree/master" + "source": "https://github.com/php-fig/http-client" }, - "time": "2020-06-29T06:28:15+00:00" + "time": "2023-09-23T14:17:50+00:00" }, { "name": "psr/http-factory", - "version": "1.0.1", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/php-fig/http-factory.git", - "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", - "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", "shasum": "" }, "require": { - "php": ">=7.0.0", - "psr/http-message": "^1.0" + "php": ">=7.1", + "psr/http-message": "^1.0 || ^2.0" }, "type": "library", "extra": { @@ -2238,10 +1827,10 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], - "description": "Common interfaces for PSR-7 HTTP message factories", + "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", "keywords": [ "factory", "http", @@ -2253,31 +1842,31 @@ "response" ], "support": { - "source": "https://github.com/php-fig/http-factory/tree/master" + "source": "https://github.com/php-fig/http-factory" }, - "time": "2019-04-30T12:38:16+00:00" + "time": "2024-04-15T12:06:14+00:00" }, { "name": "psr/http-message", - "version": "1.0.1", + "version": "2.0", "source": { "type": "git", "url": "https://github.com/php-fig/http-message.git", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": "^7.2 || ^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -2292,7 +1881,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interface for HTTP messages", @@ -2306,9 +1895,9 @@ "response" ], "support": { - "source": "https://github.com/php-fig/http-message/tree/master" + "source": "https://github.com/php-fig/http-message/tree/2.0" }, - "time": "2016-08-06T14:39:51+00:00" + "time": "2023-04-04T09:54:51+00:00" }, { "name": "ralouphie/getallheaders", @@ -2347,41 +1936,12 @@ "email": "ralph.khattar@gmail.com" } ], - "description": "A polyfill for getallheaders.", - "support": { - "issues": "https://github.com/ralouphie/getallheaders/issues", - "source": "https://github.com/ralouphie/getallheaders/tree/develop" - }, - "time": "2019-03-08T08:55:37+00:00" - }, - { - "name": "sebastian/cli-parser", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", -======= - }, - { - "url": "https://liberapay.com/sebastianbergmann", - "type": "liberapay" - }, - { - "url": "https://thanks.dev/u/gh/sebastianbergmann", - "type": "thanks_dev" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", - "type": "tidelift" - } - ], - "time": "2026-01-27T05:45:00+00:00" + "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, + "time": "2019-03-08T08:55:37+00:00" }, { "name": "sebastian/cli-parser", @@ -2395,7 +1955,6 @@ "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/2b56bea83a09de3ac06bb18b92f068e60cc6f50b", "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b", ->>>>>>> d3f7f4c (feat: implement currency conversion service) "shasum": "" }, "require": { @@ -2430,11 +1989,7 @@ "homepage": "https://github.com/sebastianbergmann/cli-parser", "support": { "issues": "https://github.com/sebastianbergmann/cli-parser/issues", -<<<<<<< HEAD - "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" -======= "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.2" ->>>>>>> d3f7f4c (feat: implement currency conversion service) }, "funding": [ { @@ -2442,11 +1997,7 @@ "type": "github" } ], -<<<<<<< HEAD - "time": "2020-09-28T06:08:49+00:00" -======= "time": "2024-03-02T06:27:43+00:00" ->>>>>>> d3f7f4c (feat: implement currency conversion service) }, { "name": "sebastian/code-unit", @@ -2561,18 +2112,6 @@ }, { "name": "sebastian/comparator", -<<<<<<< HEAD - "version": "4.0.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382", -======= "version": "4.0.10", "source": { "type": "git", @@ -2583,7 +2122,6 @@ "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/e4df00b9b3571187db2831ae9aada2c6efbd715d", "reference": "e4df00b9b3571187db2831ae9aada2c6efbd715d", ->>>>>>> d3f7f4c (feat: implement currency conversion service) "shasum": "" }, "require": { @@ -2636,38 +2174,12 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", -<<<<<<< HEAD - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" -======= "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.10" ->>>>>>> d3f7f4c (feat: implement currency conversion service) }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" -<<<<<<< HEAD - } - ], - "time": "2020-10-26T15:49:45+00:00" - }, - { - "name": "sebastian/complexity", - "version": "2.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.7", -======= }, { "url": "https://liberapay.com/sebastianbergmann", @@ -2700,7 +2212,6 @@ }, "require": { "nikic/php-parser": "^4.18 || ^5.0", ->>>>>>> d3f7f4c (feat: implement currency conversion service) "php": ">=7.3" }, "require-dev": { @@ -2732,11 +2243,7 @@ "homepage": "https://github.com/sebastianbergmann/complexity", "support": { "issues": "https://github.com/sebastianbergmann/complexity/issues", -<<<<<<< HEAD - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" -======= "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3" ->>>>>>> d3f7f4c (feat: implement currency conversion service) }, "funding": [ { @@ -2744,22 +2251,6 @@ "type": "github" } ], -<<<<<<< HEAD - "time": "2020-10-26T15:52:27+00:00" - }, - { - "name": "sebastian/diff", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", -======= "time": "2023-12-22T06:19:30+00:00" }, { @@ -2774,7 +2265,6 @@ "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ba01945089c3a293b01ba9badc29ad55b106b0bc", "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc", ->>>>>>> d3f7f4c (feat: implement currency conversion service) "shasum": "" }, "require": { @@ -2819,11 +2309,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", -<<<<<<< HEAD - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" -======= "source": "https://github.com/sebastianbergmann/diff/tree/4.0.6" ->>>>>>> d3f7f4c (feat: implement currency conversion service) }, "funding": [ { @@ -2831,22 +2317,6 @@ "type": "github" } ], -<<<<<<< HEAD - "time": "2020-10-26T13:10:38+00:00" - }, - { - "name": "sebastian/environment", - "version": "5.1.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/1b5dff7bb151a4db11d49d90e5408e4e938270f7", - "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7", -======= "time": "2024-03-02T06:30:58+00:00" }, { @@ -2861,7 +2331,6 @@ "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", ->>>>>>> d3f7f4c (feat: implement currency conversion service) "shasum": "" }, "require": { @@ -2903,11 +2372,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", -<<<<<<< HEAD - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.4" -======= "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" ->>>>>>> d3f7f4c (feat: implement currency conversion service) }, "funding": [ { @@ -2915,22 +2380,6 @@ "type": "github" } ], -<<<<<<< HEAD - "time": "2022-04-03T09:37:03+00:00" - }, - { - "name": "sebastian/exporter", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9", - "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9", -======= "time": "2023-02-03T06:03:51+00:00" }, { @@ -2945,7 +2394,6 @@ "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/14c6ba52f95a36c3d27c835d65efc7123c446e8c", "reference": "14c6ba52f95a36c3d27c835d65efc7123c446e8c", ->>>>>>> d3f7f4c (feat: implement currency conversion service) "shasum": "" }, "require": { @@ -3001,34 +2449,12 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", -<<<<<<< HEAD - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4" -======= "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.8" ->>>>>>> d3f7f4c (feat: implement currency conversion service) }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" -<<<<<<< HEAD - } - ], - "time": "2021-11-11T14:18:36+00:00" - }, - { - "name": "sebastian/global-state", - "version": "5.0.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2", - "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2", -======= }, { "url": "https://liberapay.com/sebastianbergmann", @@ -3057,7 +2483,6 @@ "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/b6781316bdcd28260904e7cc18ec983d0d2ef4f6", "reference": "b6781316bdcd28260904e7cc18ec983d0d2ef4f6", ->>>>>>> d3f7f4c (feat: implement currency conversion service) "shasum": "" }, "require": { @@ -3100,38 +2525,12 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", -<<<<<<< HEAD - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5" -======= "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.8" ->>>>>>> d3f7f4c (feat: implement currency conversion service) }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" -<<<<<<< HEAD - } - ], - "time": "2022-02-14T08:28:10+00:00" - }, - { - "name": "sebastian/lines-of-code", - "version": "1.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.6", -======= }, { "url": "https://liberapay.com/sebastianbergmann", @@ -3164,7 +2563,6 @@ }, "require": { "nikic/php-parser": "^4.18 || ^5.0", ->>>>>>> d3f7f4c (feat: implement currency conversion service) "php": ">=7.3" }, "require-dev": { @@ -3196,11 +2594,7 @@ "homepage": "https://github.com/sebastianbergmann/lines-of-code", "support": { "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", -<<<<<<< HEAD - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" -======= "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.4" ->>>>>>> d3f7f4c (feat: implement currency conversion service) }, "funding": [ { @@ -3208,11 +2602,7 @@ "type": "github" } ], -<<<<<<< HEAD - "time": "2020-11-28T06:42:11+00:00" -======= "time": "2023-12-22T06:20:34+00:00" ->>>>>>> d3f7f4c (feat: implement currency conversion service) }, { "name": "sebastian/object-enumerator", @@ -3328,18 +2718,6 @@ }, { "name": "sebastian/recursion-context", -<<<<<<< HEAD - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", -======= "version": "4.0.6", "source": { "type": "git", @@ -3350,7 +2728,6 @@ "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/539c6691e0623af6dc6f9c20384c120f963465a0", "reference": "539c6691e0623af6dc6f9c20384c120f963465a0", ->>>>>>> d3f7f4c (feat: implement currency conversion service) "shasum": "" }, "require": { @@ -3389,40 +2766,15 @@ } ], "description": "Provides functionality to recursively process PHP variables", -<<<<<<< HEAD - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "support": { - "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" -======= "homepage": "https://github.com/sebastianbergmann/recursion-context", "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.6" ->>>>>>> d3f7f4c (feat: implement currency conversion service) }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" -<<<<<<< HEAD - } - ], - "time": "2020-10-26T13:17:30+00:00" - }, - { - "name": "sebastian/resource-operations", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", -======= }, { "url": "https://liberapay.com/sebastianbergmann", @@ -3451,7 +2803,6 @@ "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/05d5692a7993ecccd56a03e40cd7e5b09b1d404e", "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e", ->>>>>>> d3f7f4c (feat: implement currency conversion service) "shasum": "" }, "require": { @@ -3463,11 +2814,7 @@ "type": "library", "extra": { "branch-alias": { -<<<<<<< HEAD - "dev-master": "3.0-dev" -======= "dev-main": "3.0-dev" ->>>>>>> d3f7f4c (feat: implement currency conversion service) } }, "autoload": { @@ -3488,12 +2835,7 @@ "description": "Provides a list of PHP built-in functions that operate on resources", "homepage": "https://www.github.com/sebastianbergmann/resource-operations", "support": { -<<<<<<< HEAD - "issues": "https://github.com/sebastianbergmann/resource-operations/issues", - "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" -======= "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.4" ->>>>>>> d3f7f4c (feat: implement currency conversion service) }, "funding": [ { @@ -3501,22 +2843,6 @@ "type": "github" } ], -<<<<<<< HEAD - "time": "2020-09-28T06:45:17+00:00" - }, - { - "name": "sebastian/type", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", - "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", -======= "time": "2024-03-14T16:00:52+00:00" }, { @@ -3531,7 +2857,6 @@ "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", ->>>>>>> d3f7f4c (feat: implement currency conversion service) "shasum": "" }, "require": { @@ -3543,11 +2868,7 @@ "type": "library", "extra": { "branch-alias": { -<<<<<<< HEAD - "dev-master": "3.0-dev" -======= "dev-master": "3.2-dev" ->>>>>>> d3f7f4c (feat: implement currency conversion service) } }, "autoload": { @@ -3570,11 +2891,7 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", -<<<<<<< HEAD - "source": "https://github.com/sebastianbergmann/type/tree/3.0.0" -======= "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" ->>>>>>> d3f7f4c (feat: implement currency conversion service) }, "funding": [ { @@ -3582,11 +2899,7 @@ "type": "github" } ], -<<<<<<< HEAD - "time": "2022-03-15T09:54:48+00:00" -======= "time": "2023-02-03T06:13:03+00:00" ->>>>>>> d3f7f4c (feat: implement currency conversion service) }, { "name": "sebastian/version", @@ -3642,7 +2955,6 @@ "time": "2020-09-28T06:39:44+00:00" }, { -<<<<<<< HEAD "name": "softcreatr/jsonpath", "version": "0.7.5", "source": { @@ -3709,16 +3021,16 @@ }, { "name": "squizlabs/php_codesniffer", - "version": "3.7.1", + "version": "3.13.5", "source": { "type": "git", - "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "1359e176e9307e906dc3d890bcc9603ff6d90619" + "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", + "reference": "0ca86845ce43291e8f5692c7356fccf3bcf02bf4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/1359e176e9307e906dc3d890bcc9603ff6d90619", - "reference": "1359e176e9307e906dc3d890bcc9603ff6d90619", + "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/0ca86845ce43291e8f5692c7356fccf3bcf02bf4", + "reference": "0ca86845ce43291e8f5692c7356fccf3bcf02bf4", "shasum": "" }, "require": { @@ -3728,18 +3040,13 @@ "php": ">=5.4.0" }, "require-dev": { - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.3.4" }, "bin": [ - "bin/phpcs", - "bin/phpcbf" + "bin/phpcbf", + "bin/phpcs" ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } - }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" @@ -3747,34 +3054,62 @@ "authors": [ { "name": "Greg Sherwood", - "role": "lead" + "role": "Former lead" + }, + { + "name": "Juliette Reinders Folmer", + "role": "Current lead" + }, + { + "name": "Contributors", + "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer/graphs/contributors" } ], "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", - "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", + "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer", "keywords": [ "phpcs", - "standards" + "standards", + "static analysis" ], "support": { - "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues", - "source": "https://github.com/squizlabs/PHP_CodeSniffer", - "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" + "issues": "https://github.com/PHPCSStandards/PHP_CodeSniffer/issues", + "security": "https://github.com/PHPCSStandards/PHP_CodeSniffer/security/policy", + "source": "https://github.com/PHPCSStandards/PHP_CodeSniffer", + "wiki": "https://github.com/PHPCSStandards/PHP_CodeSniffer/wiki" }, - "time": "2022-06-18T07:21:10+00:00" + "funding": [ + { + "url": "https://github.com/PHPCSStandards", + "type": "github" + }, + { + "url": "https://github.com/jrfnl", + "type": "github" + }, + { + "url": "https://opencollective.com/php_codesniffer", + "type": "open_collective" + }, + { + "url": "https://thanks.dev/u/gh/phpcsstandards", + "type": "thanks_dev" + } + ], + "time": "2025-11-04T16:30:35+00:00" }, { "name": "symfony/browser-kit", - "version": "v5.4.3", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", - "reference": "18e73179c6a33d520de1b644941eba108dd811ad" + "reference": "03cce39764429e07fbab9b989a1182a24578341d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/18e73179c6a33d520de1b644941eba108dd811ad", - "reference": "18e73179c6a33d520de1b644941eba108dd811ad", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/03cce39764429e07fbab9b989a1182a24578341d", + "reference": "03cce39764429e07fbab9b989a1182a24578341d", "shasum": "" }, "require": { @@ -3817,7 +3152,7 @@ "description": "Simulates the behavior of a web browser, allowing you to make requests, click on links and submit forms programmatically", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/browser-kit/tree/v5.4.3" + "source": "https://github.com/symfony/browser-kit/tree/v5.4.45" }, "funding": [ { @@ -3833,20 +3168,20 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2024-10-22T13:05:35+00:00" }, { "name": "symfony/console", - "version": "v5.4.9", + "version": "v5.4.47", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "829d5d1bf60b2efeb0887b7436873becc71a45eb" + "reference": "c4ba980ca61a9eb18ee6bcc73f28e475852bb1ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/829d5d1bf60b2efeb0887b7436873becc71a45eb", - "reference": "829d5d1bf60b2efeb0887b7436873becc71a45eb", + "url": "https://api.github.com/repos/symfony/console/zipball/c4ba980ca61a9eb18ee6bcc73f28e475852bb1ed", + "reference": "c4ba980ca61a9eb18ee6bcc73f28e475852bb1ed", "shasum": "" }, "require": { @@ -3911,12 +3246,12 @@ "homepage": "https://symfony.com", "keywords": [ "cli", - "command line", + "command-line", "console", "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.4.9" + "source": "https://github.com/symfony/console/tree/v5.4.47" }, "funding": [ { @@ -3932,20 +3267,20 @@ "type": "tidelift" } ], - "time": "2022-05-18T06:17:34+00:00" + "time": "2024-11-06T11:30:55+00:00" }, { "name": "symfony/css-selector", - "version": "v5.4.3", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "b0a190285cd95cb019237851205b8140ef6e368e" + "reference": "4f7f3c35fba88146b56d0025d20ace3f3901f097" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/b0a190285cd95cb019237851205b8140ef6e368e", - "reference": "b0a190285cd95cb019237851205b8140ef6e368e", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/4f7f3c35fba88146b56d0025d20ace3f3901f097", + "reference": "4f7f3c35fba88146b56d0025d20ace3f3901f097", "shasum": "" }, "require": { @@ -3982,7 +3317,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v5.4.3" + "source": "https://github.com/symfony/css-selector/tree/v5.4.45" }, "funding": [ { @@ -3998,33 +3333,33 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2024-09-25T14:11:13+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v2.5.1", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66" + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66", - "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62", + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=8.1" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "2.5-dev" - }, "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" } }, "autoload": { @@ -4049,7 +3384,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.1" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.0" }, "funding": [ { @@ -4065,20 +3400,20 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/dom-crawler", - "version": "v5.4.9", + "version": "v5.4.48", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "a213cbc80382320b0efdccdcdce232f191fafe3a" + "reference": "b57df76f4757a9a8dfbb57ba48d7780cc20776c6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/a213cbc80382320b0efdccdcdce232f191fafe3a", - "reference": "a213cbc80382320b0efdccdcdce232f191fafe3a", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/b57df76f4757a9a8dfbb57ba48d7780cc20776c6", + "reference": "b57df76f4757a9a8dfbb57ba48d7780cc20776c6", "shasum": "" }, "require": { @@ -4124,7 +3459,7 @@ "description": "Eases DOM navigation for HTML and XML documents", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dom-crawler/tree/v5.4.9" + "source": "https://github.com/symfony/dom-crawler/tree/v5.4.48" }, "funding": [ { @@ -4140,20 +3475,20 @@ "type": "tidelift" } ], - "time": "2022-05-04T14:46:32+00:00" + "time": "2024-11-13T14:36:38+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v5.4.9", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc" + "reference": "72982eb416f61003e9bb6e91f8b3213600dcf9e9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc", - "reference": "8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/72982eb416f61003e9bb6e91f8b3213600dcf9e9", + "reference": "72982eb416f61003e9bb6e91f8b3213600dcf9e9", "shasum": "" }, "require": { @@ -4209,7 +3544,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.9" + "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.45" }, "funding": [ { @@ -4225,37 +3560,34 @@ "type": "tidelift" } ], - "time": "2022-05-05T16:45:39+00:00" + "time": "2024-09-25T14:11:13+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v2.5.1", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1" + "reference": "59eb412e93815df44f05f342958efa9f46b1e586" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/f98b54df6ad059855739db6fcbc2d36995283fe1", - "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/59eb412e93815df44f05f342958efa9f46b1e586", + "reference": "59eb412e93815df44f05f342958efa9f46b1e586", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.1", "psr/event-dispatcher": "^1" }, - "suggest": { - "symfony/event-dispatcher-implementation": "" - }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "2.5-dev" - }, "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" } }, "autoload": { @@ -4288,7 +3620,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.5.1" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.6.0" }, "funding": [ { @@ -4304,20 +3636,20 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/finder", - "version": "v5.4.8", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "9b630f3427f3ebe7cd346c277a1408b00249dad9" + "reference": "63741784cd7b9967975eec610b256eed3ede022b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/9b630f3427f3ebe7cd346c277a1408b00249dad9", - "reference": "9b630f3427f3ebe7cd346c277a1408b00249dad9", + "url": "https://api.github.com/repos/symfony/finder/zipball/63741784cd7b9967975eec610b256eed3ede022b", + "reference": "63741784cd7b9967975eec610b256eed3ede022b", "shasum": "" }, "require": { @@ -4351,7 +3683,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v5.4.8" + "source": "https://github.com/symfony/finder/tree/v5.4.45" }, "funding": [ { @@ -4367,24 +3699,24 @@ "type": "tidelift" } ], - "time": "2022-04-15T08:07:45+00:00" + "time": "2024-09-28T13:32:08+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.26.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4" + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", - "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-ctype": "*" @@ -4394,12 +3726,9 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -4433,7 +3762,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.33.0" }, "funding": [ { @@ -4444,41 +3773,42 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.26.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "433d05519ce6990bf3530fba6957499d327395c2" + "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/433d05519ce6990bf3530fba6957499d327395c2", - "reference": "433d05519ce6990bf3530fba6957499d327395c2", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/380872130d3a5dd3ace2f4010d95125fde5d5c70", + "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "suggest": { "ext-intl": "For best performance" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -4514,7 +3844,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.33.0" }, "funding": [ { @@ -4525,41 +3855,42 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2025-06-27T09:58:17+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.26.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "219aa369ceff116e673852dce47c3a41794c14bd" + "reference": "3833d7255cc303546435cb650316bff708a1c75c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/219aa369ceff116e673852dce47c3a41794c14bd", - "reference": "219aa369ceff116e673852dce47c3a41794c14bd", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", + "reference": "3833d7255cc303546435cb650316bff708a1c75c", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "suggest": { "ext-intl": "For best performance" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -4598,7 +3929,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.33.0" }, "funding": [ { @@ -4609,29 +3940,34 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.26.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e" + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", - "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493", + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493", "shasum": "" }, "require": { - "php": ">=7.1" + "ext-iconv": "*", + "php": ">=7.2" }, "provide": { "ext-mbstring": "*" @@ -4641,12 +3977,9 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -4681,7 +4014,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0" }, "funding": [ { @@ -4692,38 +4025,39 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2024-12-23T08:48:59+00:00" }, { "name": "symfony/polyfill-php73", - "version": "v1.26.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85" + "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/e440d35fa0286f77fb45b79a03fedbeda9307e85", - "reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f68c03565dcaaf25a890667542e8bd75fe7e5bb", + "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -4760,7 +4094,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.33.0" }, "funding": [ { @@ -4771,38 +4105,39 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.26.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace" + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/cfa0ae98841b9e461207c13ab093d76b0fa7bace", - "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608", + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -4843,7 +4178,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.33.0" }, "funding": [ { @@ -4854,52 +4189,56 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2022-05-10T07:21:04+00:00" + "time": "2025-01-02T08:10:11+00:00" }, { "name": "symfony/service-contracts", - "version": "v2.5.1", + "version": "v3.6.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "24d9dc654b83e91aa59f9d167b131bc3b5bea24c" + "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/24d9dc654b83e91aa59f9d167b131bc3b5bea24c", - "reference": "24d9dc654b83e91aa59f9d167b131bc3b5bea24c", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/45112560a3ba2d715666a509a0bc9521d10b6c43", + "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/container": "^1.1", - "symfony/deprecation-contracts": "^2.1|^3" + "php": ">=8.1", + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3" }, "conflict": { "ext-psr": "<1.1|>=2" }, - "suggest": { - "symfony/service-implementation": "" - }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "2.5-dev" - }, "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" } }, "autoload": { "psr-4": { "Symfony\\Contracts\\Service\\": "" - } + }, + "exclude-from-classmap": [ + "/Test/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4926,7 +4265,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v2.5.1" + "source": "https://github.com/symfony/service-contracts/tree/v3.6.1" }, "funding": [ { @@ -4937,43 +4276,46 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2022-03-13T20:07:29+00:00" + "time": "2025-07-15T11:30:57+00:00" }, { "name": "symfony/string", - "version": "v5.4.9", + "version": "v6.4.34", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "985e6a9703ef5ce32ba617c9c7d97873bb7b2a99" + "reference": "2adaf4106f2ef4c67271971bde6d3fe0a6936432" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/985e6a9703ef5ce32ba617c9c7d97873bb7b2a99", - "reference": "985e6a9703ef5ce32ba617c9c7d97873bb7b2a99", + "url": "https://api.github.com/repos/symfony/string/zipball/2adaf4106f2ef4c67271971bde6d3fe0a6936432", + "reference": "2adaf4106f2ef4c67271971bde6d3fe0a6936432", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.1", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "~1.15" + "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "symfony/translation-contracts": ">=3.0" + "symfony/translation-contracts": "<2.5" }, "require-dev": { - "symfony/error-handler": "^4.4|^5.0|^6.0", - "symfony/http-client": "^4.4|^5.0|^6.0", - "symfony/translation-contracts": "^1.1|^2", - "symfony/var-exporter": "^4.4|^5.0|^6.0" + "symfony/http-client": "^5.4|^6.0|^7.0", + "symfony/intl": "^6.2|^7.0", + "symfony/translation-contracts": "^2.5|^3.0", + "symfony/var-exporter": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -5012,7 +4354,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v5.4.9" + "source": "https://github.com/symfony/string/tree/v6.4.34" }, "funding": [ { @@ -5023,25 +4365,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2022-04-19T10:40:37+00:00" + "time": "2026-02-08T20:44:54+00:00" }, { "name": "symfony/yaml", - "version": "v5.4.3", + "version": "v5.4.45", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "e80f87d2c9495966768310fc531b487ce64237a2" + "reference": "a454d47278cc16a5db371fe73ae66a78a633371e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/e80f87d2c9495966768310fc531b487ce64237a2", - "reference": "e80f87d2c9495966768310fc531b487ce64237a2", + "url": "https://api.github.com/repos/symfony/yaml/zipball/a454d47278cc16a5db371fe73ae66a78a633371e", + "reference": "a454d47278cc16a5db371fe73ae66a78a633371e", "shasum": "" }, "require": { @@ -5087,7 +4433,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v5.4.3" + "source": "https://github.com/symfony/yaml/tree/v5.4.45" }, "funding": [ { @@ -5103,21 +4449,9 @@ "type": "tidelift" } ], - "time": "2022-01-26T16:32:32+00:00" + "time": "2024-09-25T14:11:13+00:00" }, { - "name": "theseer/tokenizer", - "version": "1.2.1", - "source": { - "type": "git", - "url": "https://github.com/theseer/tokenizer.git", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", -======= "name": "theseer/tokenizer", "version": "1.3.1", "source": { @@ -5129,7 +4463,6 @@ "type": "zip", "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b7489ce515e168639d17feec34b8847c326b0b3c", "reference": "b7489ce515e168639d17feec34b8847c326b0b3c", ->>>>>>> d3f7f4c (feat: implement currency conversion service) "shasum": "" }, "require": { @@ -5158,11 +4491,7 @@ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { "issues": "https://github.com/theseer/tokenizer/issues", -<<<<<<< HEAD - "source": "https://github.com/theseer/tokenizer/tree/1.2.1" -======= "source": "https://github.com/theseer/tokenizer/tree/1.3.1" ->>>>>>> d3f7f4c (feat: implement currency conversion service) }, "funding": [ { @@ -5170,69 +4499,7 @@ "type": "github" } ], -<<<<<<< HEAD - "time": "2021-07-28T10:34:58+00:00" - }, - { - "name": "webmozart/assert", - "version": "1.11.0", - "source": { - "type": "git", - "url": "https://github.com/webmozarts/assert.git", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "php": "^7.2 || ^8.0" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.13" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.10-dev" - } - }, - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "support": { - "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.11.0" - }, - "time": "2022-06-03T18:03:27+00:00" -======= "time": "2025-11-17T20:03:58+00:00" ->>>>>>> d3f7f4c (feat: implement currency conversion service) } ], "aliases": [], @@ -5240,13 +4507,9 @@ "stability-flags": [], "prefer-stable": false, "prefer-lowest": false, -<<<<<<< HEAD "platform": { - "php": ">= 7.4" + "php": ">=7.4" }, -======= - "platform": [], ->>>>>>> d3f7f4c (feat: implement currency conversion service) "platform-dev": [], "plugin-api-version": "2.2.0" } From 4dd98e7de3fab3389b56a550fe272af6949e0567 Mon Sep 17 00:00:00 2001 From: Wellington Date: Tue, 24 Mar 2026 09:57:03 -0300 Subject: [PATCH 4/6] fix: resolve composer.json conflict and restore valid structure --- composer.json | 14 ++++++-------- composer.lock | 2 +- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/composer.json b/composer.json index 8f189263d..5eaa96c87 100644 --- a/composer.json +++ b/composer.json @@ -1,18 +1,18 @@ { - "name": "currency/api", - "description": "Simple Currency Exchange API", + "name": "apiki/back-end-challenge", + "description": "Desafio para candidatos a back-end.", "type": "project", - "license": "MIT", "require": { "php": ">=7.4" }, "require-dev": { - "phpunit/phpunit": "^9", "squizlabs/php_codesniffer": "^3.4", "codeception/codeception": "^4.1", "codeception/module-phpbrowser": "^1.0.0", - "codeception/module-rest": "^1.0.0" + "codeception/module-rest": "^1.0.0", + "phpunit/phpunit": "^9" }, + "license": "MIT", "autoload": { "psr-4": { "App\\": "src/" @@ -20,8 +20,6 @@ }, "scripts": { "test": "phpunit", - "test:legacy": "./vendor/bin/codecept run", - "lint": "./vendor/bin/phpcs src/", - "lint:fix": "./vendor/bin/phpcbf src/" + "lint": "php -l src/index.php" } } \ No newline at end of file diff --git a/composer.lock b/composer.lock index b48e7fc8d..32bb87461 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "972183275e7ee9a7ef4f79431e7a8fd4", + "content-hash": "2c4296c3439734e1853738f9af46f73d", "packages": [], "packages-dev": [ { From df1b389fc3a816acb26360d440931b8b82cc430d Mon Sep 17 00:00:00 2001 From: Wellington Date: Tue, 24 Mar 2026 15:37:25 -0300 Subject: [PATCH 5/6] "chore: add phpstan to fix CI pipeline" --- composer.json | 5 +++-- composer.lock | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 57 insertions(+), 3 deletions(-) diff --git a/composer.json b/composer.json index 5eaa96c87..75aaa4774 100644 --- a/composer.json +++ b/composer.json @@ -10,7 +10,8 @@ "codeception/codeception": "^4.1", "codeception/module-phpbrowser": "^1.0.0", "codeception/module-rest": "^1.0.0", - "phpunit/phpunit": "^9" + "phpunit/phpunit": "^9", + "phpstan/phpstan": "^2.1" }, "license": "MIT", "autoload": { @@ -22,4 +23,4 @@ "test": "phpunit", "lint": "php -l src/index.php" } -} \ No newline at end of file +} diff --git a/composer.lock b/composer.lock index 32bb87461..ae5fd7f54 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "2c4296c3439734e1853738f9af46f73d", + "content-hash": "f2a07ccfc079cb99f76a1735b8447bec", "packages": [], "packages-dev": [ { @@ -1206,6 +1206,59 @@ }, "time": "2022-02-21T01:04:05+00:00" }, + { + "name": "phpstan/phpstan", + "version": "2.1.42", + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/1279e1ce86ba768f0780c9d889852b4e02ff40d0", + "reference": "1279e1ce86ba768f0780c9d889852b4e02ff40d0", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0" + }, + "conflict": { + "phpstan/phpstan-shim": "*" + }, + "bin": [ + "phpstan", + "phpstan.phar" + ], + "type": "library", + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPStan - PHP Static Analysis Tool", + "keywords": [ + "dev", + "static analysis" + ], + "support": { + "docs": "https://phpstan.org/user-guide/getting-started", + "forum": "https://github.com/phpstan/phpstan/discussions", + "issues": "https://github.com/phpstan/phpstan/issues", + "security": "https://github.com/phpstan/phpstan/security/policy", + "source": "https://github.com/phpstan/phpstan-src" + }, + "funding": [ + { + "url": "https://github.com/ondrejmirtes", + "type": "github" + }, + { + "url": "https://github.com/phpstan", + "type": "github" + } + ], + "time": "2026-03-17T14:58:32+00:00" + }, { "name": "phpunit/php-code-coverage", "version": "9.2.32", From 33f929b4d013704bbb70363446b07b4f32f630db Mon Sep 17 00:00:00 2001 From: Wellington Ferreira <43445780+wellnerds@users.noreply.github.com> Date: Tue, 24 Mar 2026 16:06:13 -0300 Subject: [PATCH 6/6] Update README.md --- README.md | 47 ----------------------------------------------- 1 file changed, 47 deletions(-) diff --git a/README.md b/README.md index f6ffc4e6f..27ec42602 100644 --- a/README.md +++ b/README.md @@ -1,50 +1,3 @@ -# Back-end Challenge - -Desafio para os futuros programadores back-end da Apiki. - -## Introdução - -Desenvolva uma **REST API** que faça conversão de moedas. - -**Especifícações**: - -* A URL da requisição deve seguir o seguinte formato: - * http://localhost:8000/exchange/{amount}/{from}/{to}/{rate} - * http://localhost:8000/exchange/10/BRL/USD/4.50 -* A resposta deve seguir o seguinte formato: - ```json - { - "valorConvertido": 45, - "simboloMoeda": "$" - } - ``` -* Conversões: - * De Real para Dólar; - * De Dólar para Real; - * De Real para Euro; - * De Euro para Real; -* Serão executados testes automatizados para validação dos requisitos: - * Levantar servidor embutido do PHP: `php -S localhost:8000 src/index.php`; - * Executando testes: `composer test`; - * Executando lint: `composer lint`; - -## Instruções - -1. Efetue o fork deste repositório e crie um branch com o seu nome e sobrenome. (exemplo: fulano-dasilva) -2. Após finalizar o desafio, crie um Pull Request. -3. Aguarde algum contribuidor realizar o code review. - -*Obs.: Não esqueça de executar o `composer test` e `composer lint` localmente.* - -## Pré-requisitos - -* PHP => 7.4 -* Orientado a objetos - -## Dúvidas - -Em caso de dúvidas, crie uma issue. -======= # 💱 Currency Exchange API API REST desenvolvida em PHP para conversão de moedas, como parte de um teste técnico backend.