From 0116adac44c1cd5999327e961f3a372e512a0218 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladislavs=20Pozn=CC=A7aks?= Date: Wed, 4 Nov 2020 13:25:37 +0200 Subject: [PATCH 1/3] Currencies project files added --- 11.04/currencies/.gitignore | 3 + .../app/Controllers/HomeController.php | 27 + 11.04/currencies/app/Models/Currency.php | 41 + .../app/Services/CurrencyService.php | 90 ++ 11.04/currencies/app/Views/FooterView.php | 3 + 11.04/currencies/app/Views/HeaderView.php | 12 + 11.04/currencies/app/Views/HomeIndexView.php | 15 + 11.04/currencies/composer.json | 17 + 11.04/currencies/composer.lock | 1074 +++++++++++++++++ 11.04/currencies/index.php | 69 ++ 10 files changed, 1351 insertions(+) create mode 100644 11.04/currencies/.gitignore create mode 100644 11.04/currencies/app/Controllers/HomeController.php create mode 100644 11.04/currencies/app/Models/Currency.php create mode 100644 11.04/currencies/app/Services/CurrencyService.php create mode 100644 11.04/currencies/app/Views/FooterView.php create mode 100644 11.04/currencies/app/Views/HeaderView.php create mode 100644 11.04/currencies/app/Views/HomeIndexView.php create mode 100644 11.04/currencies/composer.json create mode 100644 11.04/currencies/composer.lock create mode 100644 11.04/currencies/index.php diff --git a/11.04/currencies/.gitignore b/11.04/currencies/.gitignore new file mode 100644 index 0000000..e882070 --- /dev/null +++ b/11.04/currencies/.gitignore @@ -0,0 +1,3 @@ +.idea/ +vendor/ +.env \ No newline at end of file diff --git a/11.04/currencies/app/Controllers/HomeController.php b/11.04/currencies/app/Controllers/HomeController.php new file mode 100644 index 0000000..bea8479 --- /dev/null +++ b/11.04/currencies/app/Controllers/HomeController.php @@ -0,0 +1,27 @@ +createDB(); + + $currencies = $service->getAll(); + + return require_once __DIR__ . '/../Views/HomeIndexView.php'; + } + + public function update() + { + $service = new CurrencyService(); + $service->updateDB(); + + return header('Location: /'); + } +} \ No newline at end of file diff --git a/11.04/currencies/app/Models/Currency.php b/11.04/currencies/app/Models/Currency.php new file mode 100644 index 0000000..abb5aee --- /dev/null +++ b/11.04/currencies/app/Models/Currency.php @@ -0,0 +1,41 @@ +currency = $currency; + $this->rate = $rate; + } + + public function getCurrency(): string + { + return $this->currency; + } + + public function getRate(): float + { + return $this->rate; + } + + public static function createFromXML(array $data): Currency + { + return new self( + $data['value'][0]['value'], + (float) $data['value'][1]['value'] + ); + } + + public static function create(array $data): Currency + { + return new self( + $data['currency'], + (float) $data['rate'] + ); + } +} \ No newline at end of file diff --git a/11.04/currencies/app/Services/CurrencyService.php b/11.04/currencies/app/Services/CurrencyService.php new file mode 100644 index 0000000..02942b6 --- /dev/null +++ b/11.04/currencies/app/Services/CurrencyService.php @@ -0,0 +1,90 @@ +parse($xml); + + $currenciesData = $result[1]['value']; + + $currencies = []; + + foreach ($currenciesData as $currency) { + $currencies[] = Currency::createFromXML($currency); + } + + return $currencies; + } + + public function createDB(): void + { + $currenciesQuery = query() + ->select('*') + ->from('currencies') + ->execute() + ->fetchAllAssociative(); + + if (count($currenciesQuery) === 0) { + $currencies = $this->getFromBank(); + /** + * @var Currency $currency + */ + foreach ($currencies as $currency) { + query() + ->insert('currencies') + ->values([ + 'currency' => ':currency', + 'rate' => ':rate' + ]) + ->setParameters([ + 'currency' => $currency->getCurrency(), + 'rate' => $currency->getRate(), + ]) + ->execute(); + } + } + } + + public function updateDB(): void + { + $currencies = $this->getFromBank(); + + /** + * @var Currency $currency + */ + foreach ($currencies as $currency) { + query() + ->update('currencies') + ->set('rate', $currency->getRate()) + ->where('currency = :currency') + ->setParameter('currency', $currency->getCurrency()) + ->execute(); + } + } + + public function getAll(): array + { + $currencies = []; + + $currenciesQuery = query() + ->select('*') + ->from('currencies') + ->execute() + ->fetchAllAssociative(); + + foreach ($currenciesQuery as $currency) { + $currencies[] = Currency::create($currency); + } + + return $currencies; + } +} \ No newline at end of file diff --git a/11.04/currencies/app/Views/FooterView.php b/11.04/currencies/app/Views/FooterView.php new file mode 100644 index 0000000..a57a3db --- /dev/null +++ b/11.04/currencies/app/Views/FooterView.php @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/11.04/currencies/app/Views/HeaderView.php b/11.04/currencies/app/Views/HeaderView.php new file mode 100644 index 0000000..63abed1 --- /dev/null +++ b/11.04/currencies/app/Views/HeaderView.php @@ -0,0 +1,12 @@ + + + + + +
+ +
diff --git a/11.04/currencies/app/Views/HomeIndexView.php b/11.04/currencies/app/Views/HomeIndexView.php new file mode 100644 index 0000000..244e19c --- /dev/null +++ b/11.04/currencies/app/Views/HomeIndexView.php @@ -0,0 +1,15 @@ + + +

Currencies

+ +
+ +
+ + +

+ getCurrency() . ': ' . $currency->getRate(); ?> +

+ + + diff --git a/11.04/currencies/composer.json b/11.04/currencies/composer.json new file mode 100644 index 0000000..288f59e --- /dev/null +++ b/11.04/currencies/composer.json @@ -0,0 +1,17 @@ +{ + "name": "kem4/codelex", + "autoload": { + "psr-4": { + "App\\": "app/" + } + }, + "require": { + "nikic/fast-route": "^1.3", + "doctrine/dbal": "^2.12", + "vlucas/phpdotenv": "^5.2", + "respect/validation": "^2.1", + "imangazaliev/didom": "^1.16", + "sabre/xml": "^2.2" + }, + "minimum-stability": "stable" +} diff --git a/11.04/currencies/composer.lock b/11.04/currencies/composer.lock new file mode 100644 index 0000000..4d26111 --- /dev/null +++ b/11.04/currencies/composer.lock @@ -0,0 +1,1074 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "e210c202642d9eed98f8eaf0de027002", + "packages": [ + { + "name": "doctrine/cache", + "version": "1.10.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/cache.git", + "reference": "13e3381b25847283a91948d04640543941309727" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/cache/zipball/13e3381b25847283a91948d04640543941309727", + "reference": "13e3381b25847283a91948d04640543941309727", + "shasum": "" + }, + "require": { + "php": "~7.1 || ^8.0" + }, + "conflict": { + "doctrine/common": ">2.2,<2.4" + }, + "require-dev": { + "alcaeus/mongo-php-adapter": "^1.1", + "doctrine/coding-standard": "^6.0", + "mongodb/mongodb": "^1.1", + "phpunit/phpunit": "^7.0", + "predis/predis": "~1.0" + }, + "suggest": { + "alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.", + "homepage": "https://www.doctrine-project.org/projects/cache.html", + "keywords": [ + "abstraction", + "apcu", + "cache", + "caching", + "couchdb", + "memcached", + "php", + "redis", + "xcache" + ], + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcache", + "type": "tidelift" + } + ], + "time": "2020-07-07T18:54:01+00:00" + }, + { + "name": "doctrine/dbal", + "version": "2.12.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/dbal.git", + "reference": "c6d37b4c42aaa3c3ee175f05eca68056f4185646" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/c6d37b4c42aaa3c3ee175f05eca68056f4185646", + "reference": "c6d37b4c42aaa3c3ee175f05eca68056f4185646", + "shasum": "" + }, + "require": { + "doctrine/cache": "^1.0", + "doctrine/event-manager": "^1.0", + "ext-pdo": "*", + "php": "^7.3 || ^8" + }, + "require-dev": { + "doctrine/coding-standard": "^8.1", + "jetbrains/phpstorm-stubs": "^2019.1", + "phpstan/phpstan": "^0.12.40", + "phpunit/phpunit": "^9.4", + "psalm/plugin-phpunit": "^0.10.0", + "symfony/console": "^2.0.5|^3.0|^4.0|^5.0", + "vimeo/psalm": "^3.17.2" + }, + "suggest": { + "symfony/console": "For helpful console commands such as SQL execution and import of files." + }, + "bin": [ + "bin/doctrine-dbal" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\DBAL\\": "lib/Doctrine/DBAL" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + } + ], + "description": "Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.", + "homepage": "https://www.doctrine-project.org/projects/dbal.html", + "keywords": [ + "abstraction", + "database", + "db2", + "dbal", + "mariadb", + "mssql", + "mysql", + "oci8", + "oracle", + "pdo", + "pgsql", + "postgresql", + "queryobject", + "sasql", + "sql", + "sqlanywhere", + "sqlite", + "sqlserver", + "sqlsrv" + ], + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdbal", + "type": "tidelift" + } + ], + "time": "2020-10-22T17:26:24+00:00" + }, + { + "name": "doctrine/event-manager", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/event-manager.git", + "reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/event-manager/zipball/41370af6a30faa9dc0368c4a6814d596e81aba7f", + "reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/common": "<2.9@dev" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0", + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\": "lib/Doctrine/Common" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + } + ], + "description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.", + "homepage": "https://www.doctrine-project.org/projects/event-manager.html", + "keywords": [ + "event", + "event dispatcher", + "event manager", + "event system", + "events" + ], + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fevent-manager", + "type": "tidelift" + } + ], + "time": "2020-05-29T18:28:51+00:00" + }, + { + "name": "graham-campbell/result-type", + "version": "v1.0.1", + "source": { + "type": "git", + "url": "https://github.com/GrahamCampbell/Result-Type.git", + "reference": "7e279d2cd5d7fbb156ce46daada972355cea27bb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/7e279d2cd5d7fbb156ce46daada972355cea27bb", + "reference": "7e279d2cd5d7fbb156ce46daada972355cea27bb", + "shasum": "" + }, + "require": { + "php": "^7.0|^8.0", + "phpoption/phpoption": "^1.7.3" + }, + "require-dev": { + "phpunit/phpunit": "^6.5|^7.5|^8.5|^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-4": { + "GrahamCampbell\\ResultType\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "graham@alt-three.com" + } + ], + "description": "An Implementation Of The Result Type", + "keywords": [ + "Graham Campbell", + "GrahamCampbell", + "Result Type", + "Result-Type", + "result" + ], + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type", + "type": "tidelift" + } + ], + "time": "2020-04-13T13:17:36+00:00" + }, + { + "name": "imangazaliev/didom", + "version": "1.16", + "source": { + "type": "git", + "url": "https://github.com/Imangazaliev/DiDOM.git", + "reference": "c2a8bd08679d2eec856782277267a48553322c7e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Imangazaliev/DiDOM/zipball/c2a8bd08679d2eec856782277267a48553322c7e", + "reference": "c2a8bd08679d2eec856782277267a48553322c7e", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-iconv": "*", + "php": ">=5.4" + }, + "require-dev": { + "phpunit/phpunit": "^4.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "DiDom\\": "src/DiDom/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Imangazaliev Muhammad", + "email": "imangazalievm@gmail.com" + } + ], + "description": "Simple and fast HTML parser", + "homepage": "https://github.com/Imangazaliev/DiDOM", + "keywords": [ + "didom", + "html", + "parser", + "xml" + ], + "time": "2020-05-12T21:04:30+00:00" + }, + { + "name": "nikic/fast-route", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/nikic/FastRoute.git", + "reference": "181d480e08d9476e61381e04a71b34dc0432e812" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/FastRoute/zipball/181d480e08d9476e61381e04a71b34dc0432e812", + "reference": "181d480e08d9476e61381e04a71b34dc0432e812", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35|~5.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "FastRoute\\": "src/" + }, + "files": [ + "src/functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov", + "email": "nikic@php.net" + } + ], + "description": "Fast request router for PHP", + "keywords": [ + "router", + "routing" + ], + "time": "2018-02-13T20:26:39+00:00" + }, + { + "name": "phpoption/phpoption", + "version": "1.7.5", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "994ecccd8f3283ecf5ac33254543eb0ac946d525" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/994ecccd8f3283ecf5ac33254543eb0ac946d525", + "reference": "994ecccd8f3283ecf5ac33254543eb0ac946d525", + "shasum": "" + }, + "require": { + "php": "^5.5.9 || ^7.0 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "phpunit/phpunit": "^4.8.35 || ^5.7.27 || ^6.5.6 || ^7.0 || ^8.0 || ^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.7-dev" + } + }, + "autoload": { + "psr-4": { + "PhpOption\\": "src/PhpOption/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" + }, + { + "name": "Graham Campbell", + "email": "graham@alt-three.com" + } + ], + "description": "Option Type for PHP", + "keywords": [ + "language", + "option", + "php", + "type" + ], + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", + "type": "tidelift" + } + ], + "time": "2020-07-20T17:29:33+00:00" + }, + { + "name": "respect/stringifier", + "version": "0.2.0", + "source": { + "type": "git", + "url": "https://github.com/Respect/Stringifier.git", + "reference": "e55af3c8aeaeaa2abb5fa47a58a8e9688cc23b59" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Respect/Stringifier/zipball/e55af3c8aeaeaa2abb5fa47a58a8e9688cc23b59", + "reference": "e55af3c8aeaeaa2abb5fa47a58a8e9688cc23b59", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.8", + "malukenho/docheader": "^0.1.7", + "phpunit/phpunit": "^6.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Respect\\Stringifier\\": "src/" + }, + "files": [ + "src/stringify.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Respect/Stringifier Contributors", + "homepage": "https://github.com/Respect/Stringifier/graphs/contributors" + } + ], + "description": "Converts any value to a string", + "homepage": "http://respect.github.io/Stringifier/", + "keywords": [ + "respect", + "stringifier", + "stringify" + ], + "time": "2017-12-29T19:39:25+00:00" + }, + { + "name": "respect/validation", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/Respect/Validation.git", + "reference": "6c3aed92137836788c8ce654b9c35763c5e98b54" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Respect/Validation/zipball/6c3aed92137836788c8ce654b9c35763c5e98b54", + "reference": "6c3aed92137836788c8ce654b9c35763c5e98b54", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0", + "respect/stringifier": "^0.2.0", + "symfony/polyfill-mbstring": "^1.2" + }, + "require-dev": { + "egulias/email-validator": "^2.1", + "malukenho/docheader": "^0.1", + "mikey179/vfsstream": "^1.6", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-deprecation-rules": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpunit/phpunit": "^9.3", + "psr/http-message": "^1.0", + "respect/coding-standard": "^3.0", + "squizlabs/php_codesniffer": "^3.5", + "symfony/validator": "^3.0||^4.0", + "zendframework/zend-validator": "^2.1" + }, + "suggest": { + "egulias/email-validator": "Strict (RFC compliant) email validation", + "ext-bcmath": "Arbitrary Precision Mathematics", + "ext-fileinfo": "File Information", + "ext-mbstring": "Multibyte String Functions", + "symfony/validator": "Use Symfony validator through Respect\\Validation", + "zendframework/zend-validator": "Use Zend Framework validator through Respect\\Validation" + }, + "type": "library", + "autoload": { + "psr-4": { + "Respect\\Validation\\": "library/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Respect/Validation Contributors", + "homepage": "https://github.com/Respect/Validation/graphs/contributors" + } + ], + "description": "The most awesome validation engine ever created for PHP", + "homepage": "http://respect.github.io/Validation/", + "keywords": [ + "respect", + "validation", + "validator" + ], + "time": "2020-10-04T12:09:34+00:00" + }, + { + "name": "sabre/uri", + "version": "2.2.1", + "source": { + "type": "git", + "url": "https://github.com/sabre-io/uri.git", + "reference": "f502edffafea8d746825bd5f0b923a60fd2715ff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sabre-io/uri/zipball/f502edffafea8d746825bd5f0b923a60fd2715ff", + "reference": "f502edffafea8d746825bd5f0b923a60fd2715ff", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "~2.16.1", + "phpstan/phpstan": "^0.12", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.0" + }, + "type": "library", + "autoload": { + "files": [ + "lib/functions.php" + ], + "psr-4": { + "Sabre\\Uri\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Evert Pot", + "email": "me@evertpot.com", + "homepage": "http://evertpot.com/", + "role": "Developer" + } + ], + "description": "Functions for making sense out of URIs.", + "homepage": "http://sabre.io/uri/", + "keywords": [ + "rfc3986", + "uri", + "url" + ], + "time": "2020-10-03T10:33:23+00:00" + }, + { + "name": "sabre/xml", + "version": "2.2.3", + "source": { + "type": "git", + "url": "https://github.com/sabre-io/xml.git", + "reference": "c3b959f821c19b36952ec4a595edd695c216bfc6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sabre-io/xml/zipball/c3b959f821c19b36952ec4a595edd695c216bfc6", + "reference": "c3b959f821c19b36952ec4a595edd695c216bfc6", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-xmlreader": "*", + "ext-xmlwriter": "*", + "lib-libxml": ">=2.6.20", + "php": "^7.1 || ^8.0", + "sabre/uri": ">=1.0,<3.0.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "~2.16.1", + "phpstan/phpstan": "^0.12", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Sabre\\Xml\\": "lib/" + }, + "files": [ + "lib/Deserializer/functions.php", + "lib/Serializer/functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Evert Pot", + "email": "me@evertpot.com", + "homepage": "http://evertpot.com/", + "role": "Developer" + }, + { + "name": "Markus Staab", + "email": "markus.staab@redaxo.de", + "role": "Developer" + } + ], + "description": "sabre/xml is an XML library that you may not hate.", + "homepage": "https://sabre.io/xml/", + "keywords": [ + "XMLReader", + "XMLWriter", + "dom", + "xml" + ], + "time": "2020-10-03T10:08:14+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.20.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "f4ba089a5b6366e453971d3aad5fe8e897b37f41" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/f4ba089a5b6366e453971d3aad5fe8e897b37f41", + "reference": "f4ba089a5b6366e453971d3aad5fe8e897b37f41", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.20-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-10-23T14:02:19+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.20.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "39d483bdf39be819deabf04ec872eb0b2410b531" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/39d483bdf39be819deabf04ec872eb0b2410b531", + "reference": "39d483bdf39be819deabf04ec872eb0b2410b531", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.20-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-10-23T14:02:19+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.20.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "e70aa8b064c5b72d3df2abd5ab1e90464ad009de" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/e70aa8b064c5b72d3df2abd5ab1e90464ad009de", + "reference": "e70aa8b064c5b72d3df2abd5ab1e90464ad009de", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.20-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-10-23T14:02:19+00:00" + }, + { + "name": "vlucas/phpdotenv", + "version": "v5.2.0", + "source": { + "type": "git", + "url": "https://github.com/vlucas/phpdotenv.git", + "reference": "fba64139db67123c7a57072e5f8d3db10d160b66" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/fba64139db67123c7a57072e5f8d3db10d160b66", + "reference": "fba64139db67123c7a57072e5f8d3db10d160b66", + "shasum": "" + }, + "require": { + "ext-pcre": "*", + "graham-campbell/result-type": "^1.0.1", + "php": "^7.1.3 || ^8.0", + "phpoption/phpoption": "^1.7.4", + "symfony/polyfill-ctype": "^1.17", + "symfony/polyfill-mbstring": "^1.17", + "symfony/polyfill-php80": "^1.17" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "ext-filter": "*", + "phpunit/phpunit": "^7.5.20 || ^8.5.2 || ^9.0" + }, + "suggest": { + "ext-filter": "Required to use the boolean validator." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.2-dev" + } + }, + "autoload": { + "psr-4": { + "Dotenv\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "graham@alt-three.com", + "homepage": "https://gjcampbell.co.uk/" + }, + { + "name": "Vance Lucas", + "email": "vance@vancelucas.com", + "homepage": "https://vancelucas.com/" + } + ], + "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", + "type": "tidelift" + } + ], + "time": "2020-09-14T15:57:31+00:00" + } + ], + "packages-dev": [], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": [], + "platform-dev": [], + "plugin-api-version": "1.1.0" +} diff --git a/11.04/currencies/index.php b/11.04/currencies/index.php new file mode 100644 index 0000000..10f458a --- /dev/null +++ b/11.04/currencies/index.php @@ -0,0 +1,69 @@ +load(); + +function database(): Connection +{ + $connectionParams = [ + 'dbname' => $_ENV['DB_DATABASE'], + 'user' => $_ENV['DB_USER'], + 'password' => $_ENV['DB_PASSWORD'], + 'host' => $_ENV['DB_HOST'], + 'driver' => 'pdo_mysql', + ]; + + $connection = DriverManager::getConnection($connectionParams); + $connection->connect(); + + return $connection; +} + +function query(): QueryBuilder +{ + return database()->createQueryBuilder(); +} + +$dispatcher = FastRoute\simpleDispatcher(function(FastRoute\RouteCollector $r) { + $namespace = '\App\Controllers\\'; + + $r->addRoute('GET', '/', $namespace . 'HomeController@index'); + $r->addRoute('POST', '/currencies', $namespace . 'HomeController@update'); + +}); + +// Fetch method and URI from somewhere +$httpMethod = $_POST['_method'] ?? $_SERVER['REQUEST_METHOD']; +$uri = $_SERVER['REQUEST_URI']; + +// Strip query string (?foo=bar) and decode URI +if (false !== $pos = strpos($uri, '?')) { + $uri = substr($uri, 0, $pos); +} +$uri = rawurldecode($uri); + +$routeInfo = $dispatcher->dispatch($httpMethod, $uri); +switch ($routeInfo[0]) { + case FastRoute\Dispatcher::NOT_FOUND: + echo '404 PAGE NOT FOUND'; + break; + case FastRoute\Dispatcher::METHOD_NOT_ALLOWED: + $allowedMethods = $routeInfo[1]; + echo 'METHOD NOT ALLOWED'; + break; + case FastRoute\Dispatcher::FOUND: + [$controller, $method] = explode('@', $routeInfo[1]); + $vars = $routeInfo[2]; + + (new $controller)->$method($vars); + + break; +} \ No newline at end of file From bbf1ac2fa5966f6436700efb05cf22eda69e732e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladislavs=20Pozn=CC=A7aks?= Date: Wed, 4 Nov 2020 19:42:42 +0200 Subject: [PATCH 2/3] added Collections, Repository & refactored --- .../app/Controllers/HomeController.php | 5 +- 11.04/currencies/app/Models/Collection.php | 38 +++ 11.04/currencies/app/Models/Currency.php | 10 +- .../app/Models/CurrencyCollection.php | 8 + .../currencies/app/Models/ModelInterface.php | 8 + .../app/Repositories/CurrencyRepository.php | 88 ++++++ .../app/Services/CurrencyService.php | 83 +----- 11.04/currencies/app/Views/HeaderView.php | 7 - 11.04/currencies/app/Views/HomeIndexView.php | 2 +- 11.04/currencies/composer.json | 3 +- 11.04/currencies/composer.lock | 253 +++++++++++++++++- 11 files changed, 407 insertions(+), 98 deletions(-) create mode 100644 11.04/currencies/app/Models/Collection.php create mode 100644 11.04/currencies/app/Models/CurrencyCollection.php create mode 100644 11.04/currencies/app/Models/ModelInterface.php create mode 100644 11.04/currencies/app/Repositories/CurrencyRepository.php diff --git a/11.04/currencies/app/Controllers/HomeController.php b/11.04/currencies/app/Controllers/HomeController.php index bea8479..b48bdcb 100644 --- a/11.04/currencies/app/Controllers/HomeController.php +++ b/11.04/currencies/app/Controllers/HomeController.php @@ -8,10 +8,7 @@ class HomeController { public function index() { - $service = new CurrencyService(); - $service->createDB(); - $currencies = $service->getAll(); return require_once __DIR__ . '/../Views/HomeIndexView.php'; @@ -20,7 +17,7 @@ public function index() public function update() { $service = new CurrencyService(); - $service->updateDB(); + $service->updateAll(); return header('Location: /'); } diff --git a/11.04/currencies/app/Models/Collection.php b/11.04/currencies/app/Models/Collection.php new file mode 100644 index 0000000..51bbdf7 --- /dev/null +++ b/11.04/currencies/app/Models/Collection.php @@ -0,0 +1,38 @@ +add($this->model::create($model)); + } + } + + public function all(): array + { + return $this->models; + } + + public function add(ModelInterface $model): void + { + $this->models[] = $model; + } + + public function pluck(string $parameter): array + { + $parameters = []; + + foreach ($this->all() as $model) { + $parameters[] = $model->$parameter(); + } + + return $parameters; + } + +} \ No newline at end of file diff --git a/11.04/currencies/app/Models/Currency.php b/11.04/currencies/app/Models/Currency.php index abb5aee..d7e447c 100644 --- a/11.04/currencies/app/Models/Currency.php +++ b/11.04/currencies/app/Models/Currency.php @@ -2,7 +2,7 @@ namespace App\Models; -class Currency +class Currency implements ModelInterface { private string $currency; private float $rate; @@ -23,14 +23,6 @@ public function getRate(): float return $this->rate; } - public static function createFromXML(array $data): Currency - { - return new self( - $data['value'][0]['value'], - (float) $data['value'][1]['value'] - ); - } - public static function create(array $data): Currency { return new self( diff --git a/11.04/currencies/app/Models/CurrencyCollection.php b/11.04/currencies/app/Models/CurrencyCollection.php new file mode 100644 index 0000000..88b9b3d --- /dev/null +++ b/11.04/currencies/app/Models/CurrencyCollection.php @@ -0,0 +1,8 @@ +isEmpty()) $this->createDB($this->getCurrenciesFromBank()); + + $query = query() + ->select('*') + ->from('currencies') + ->execute() + ->fetchAllAssociative(); + + return new CurrencyCollection($query); + } + + public function updateCurrencies(): void + { + $currencies = $this->getCurrenciesFromBank(); + + /** @var Currency $currency */ + foreach ($currencies->all() as $currency) { + query() + ->update('currencies') + ->set('rate', $currency->getRate()) + ->where('currency = :currency') + ->setParameter('currency', $currency->getCurrency()) + ->execute(); + } + } + + private function getCurrenciesFromBank(): CurrencyCollection + { + $xml = file_get_contents('https://www.bank.lv/vk/ecb.xml'); + + $service = new Service(); + $result = $service->parse($xml); + + $currenciesRaw = $result[1]['value']; + + $data = []; + + foreach ($currenciesRaw as $currencyRaw) { + $data[] = [ + 'currency' => $currencyRaw['value'][0]['value'], + 'rate' => (float) $currencyRaw['value'][1]['value'] + ]; + } + + return new CurrencyCollection($data); + } + + private function isEmpty(): bool + { + $query = query() + ->select('*') + ->from('currencies') + ->execute() + ->fetchAllAssociative(); + + return count($query) === 0; + } + + private function createDB(CurrencyCollection $currencies): void + { + /** @var Currency $currency */ + foreach ($currencies->all() as $currency) { + query() + ->insert('currencies') + ->values([ + 'currency' => ':currency', + 'rate' => ':rate' + ]) + ->setParameters([ + 'currency' => $currency->getCurrency(), + 'rate' => $currency->getRate(), + ]) + ->execute(); + } + } +} \ No newline at end of file diff --git a/11.04/currencies/app/Services/CurrencyService.php b/11.04/currencies/app/Services/CurrencyService.php index 02942b6..12e3147 100644 --- a/11.04/currencies/app/Services/CurrencyService.php +++ b/11.04/currencies/app/Services/CurrencyService.php @@ -2,89 +2,22 @@ namespace App\Services; -use App\Models\Currency; -use Sabre\Xml\Service; +use App\Models\CurrencyCollection; +use App\Repositories\CurrencyRepository; class CurrencyService { - public function getFromBank() + public function getAll(): CurrencyCollection { - $xml = file_get_contents('https://www.bank.lv/vk/ecb.xml'); + $repository = new CurrencyRepository(); - $service = new Service(); - $result = $service->parse($xml); - - $currenciesData = $result[1]['value']; - - $currencies = []; - - foreach ($currenciesData as $currency) { - $currencies[] = Currency::createFromXML($currency); - } - - return $currencies; - } - - public function createDB(): void - { - $currenciesQuery = query() - ->select('*') - ->from('currencies') - ->execute() - ->fetchAllAssociative(); - - if (count($currenciesQuery) === 0) { - $currencies = $this->getFromBank(); - /** - * @var Currency $currency - */ - foreach ($currencies as $currency) { - query() - ->insert('currencies') - ->values([ - 'currency' => ':currency', - 'rate' => ':rate' - ]) - ->setParameters([ - 'currency' => $currency->getCurrency(), - 'rate' => $currency->getRate(), - ]) - ->execute(); - } - } + return $repository->getCurrencies(); } - public function updateDB(): void + public function updateAll(): void { - $currencies = $this->getFromBank(); - - /** - * @var Currency $currency - */ - foreach ($currencies as $currency) { - query() - ->update('currencies') - ->set('rate', $currency->getRate()) - ->where('currency = :currency') - ->setParameter('currency', $currency->getCurrency()) - ->execute(); - } - } - - public function getAll(): array - { - $currencies = []; - - $currenciesQuery = query() - ->select('*') - ->from('currencies') - ->execute() - ->fetchAllAssociative(); - - foreach ($currenciesQuery as $currency) { - $currencies[] = Currency::create($currency); - } + $repository = new CurrencyRepository(); - return $currencies; + $repository->updateCurrencies(); } } \ No newline at end of file diff --git a/11.04/currencies/app/Views/HeaderView.php b/11.04/currencies/app/Views/HeaderView.php index 63abed1..8c58185 100644 --- a/11.04/currencies/app/Views/HeaderView.php +++ b/11.04/currencies/app/Views/HeaderView.php @@ -3,10 +3,3 @@ -
- -
diff --git a/11.04/currencies/app/Views/HomeIndexView.php b/11.04/currencies/app/Views/HomeIndexView.php index 244e19c..385f57a 100644 --- a/11.04/currencies/app/Views/HomeIndexView.php +++ b/11.04/currencies/app/Views/HomeIndexView.php @@ -6,7 +6,7 @@ - +all() as $currency): ?>

getCurrency() . ': ' . $currency->getRate(); ?>

diff --git a/11.04/currencies/composer.json b/11.04/currencies/composer.json index 288f59e..deeb534 100644 --- a/11.04/currencies/composer.json +++ b/11.04/currencies/composer.json @@ -11,7 +11,8 @@ "vlucas/phpdotenv": "^5.2", "respect/validation": "^2.1", "imangazaliev/didom": "^1.16", - "sabre/xml": "^2.2" + "sabre/xml": "^2.2", + "nesbot/carbon": "^2.41" }, "minimum-stability": "stable" } diff --git a/11.04/currencies/composer.lock b/11.04/currencies/composer.lock index 4d26111..d7e8f2a 100644 --- a/11.04/currencies/composer.lock +++ b/11.04/currencies/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": "e210c202642d9eed98f8eaf0de027002", + "content-hash": "251e5b7a669af0ba6922bd4ab00607c8", "packages": [ { "name": "doctrine/cache", @@ -409,6 +409,95 @@ ], "time": "2020-05-12T21:04:30+00:00" }, + { + "name": "nesbot/carbon", + "version": "2.41.5", + "source": { + "type": "git", + "url": "https://github.com/briannesbitt/Carbon.git", + "reference": "c4a9caf97cfc53adfc219043bcecf42bc663acee" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/c4a9caf97cfc53adfc219043bcecf42bc663acee", + "reference": "c4a9caf97cfc53adfc219043bcecf42bc663acee", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.1.8 || ^8.0", + "symfony/polyfill-mbstring": "^1.0", + "symfony/translation": "^3.4 || ^4.0 || ^5.0" + }, + "require-dev": { + "doctrine/orm": "^2.7", + "friendsofphp/php-cs-fixer": "^2.14 || ^3.0", + "kylekatarnls/multi-tester": "^2.0", + "phpmd/phpmd": "^2.9", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12.35", + "phpunit/phpunit": "^7.5 || ^8.0", + "squizlabs/php_codesniffer": "^3.4" + }, + "bin": [ + "bin/carbon" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev", + "dev-3.x": "3.x-dev" + }, + "laravel": { + "providers": [ + "Carbon\\Laravel\\ServiceProvider" + ] + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + } + }, + "autoload": { + "psr-4": { + "Carbon\\": "src/Carbon/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brian Nesbitt", + "email": "brian@nesbot.com", + "homepage": "http://nesbot.com" + }, + { + "name": "kylekatarnls", + "homepage": "http://github.com/kylekatarnls" + } + ], + "description": "An API extension for DateTime that supports 281 different languages.", + "homepage": "http://carbon.nesbot.com", + "keywords": [ + "date", + "datetime", + "time" + ], + "funding": [ + { + "url": "https://opencollective.com/Carbon", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon", + "type": "tidelift" + } + ], + "time": "2020-10-23T06:02:30+00:00" + }, { "name": "nikic/fast-route", "version": "v1.3.0", @@ -985,6 +1074,168 @@ ], "time": "2020-10-23T14:02:19+00:00" }, + { + "name": "symfony/translation", + "version": "v5.1.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "27980838fd261e04379fa91e94e81e662fe5a1b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/27980838fd261e04379fa91e94e81e662fe5a1b6", + "reference": "27980838fd261e04379fa91e94e81e662fe5a1b6", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.15", + "symfony/translation-contracts": "^2" + }, + "conflict": { + "symfony/config": "<4.4", + "symfony/dependency-injection": "<5.0", + "symfony/http-kernel": "<5.0", + "symfony/twig-bundle": "<5.0", + "symfony/yaml": "<4.4" + }, + "provide": { + "symfony/translation-implementation": "2.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "^4.4|^5.0", + "symfony/console": "^4.4|^5.0", + "symfony/dependency-injection": "^5.0", + "symfony/finder": "^4.4|^5.0", + "symfony/http-kernel": "^5.0", + "symfony/intl": "^4.4|^5.0", + "symfony/service-contracts": "^1.1.2|^2", + "symfony/yaml": "^4.4|^5.0" + }, + "suggest": { + "psr/log-implementation": "To use logging capability in translator", + "symfony/config": "", + "symfony/yaml": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Translation Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-10-24T12:01:57+00:00" + }, + { + "name": "symfony/translation-contracts", + "version": "v2.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "e2eaa60b558f26a4b0354e1bbb25636efaaad105" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/e2eaa60b558f26a4b0354e1bbb25636efaaad105", + "reference": "e2eaa60b558f26a4b0354e1bbb25636efaaad105", + "shasum": "" + }, + "require": { + "php": ">=7.2.5" + }, + "suggest": { + "symfony/translation-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-09-28T13:05:58+00:00" + }, { "name": "vlucas/phpdotenv", "version": "v5.2.0", From 08ff1db0db40fd10c3796bce0b2a32ff9a2f761f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladislavs=20Pozn=CC=A7aks?= Date: Wed, 4 Nov 2020 19:45:51 +0200 Subject: [PATCH 3/3] minor tweak --- 11.04/currencies/app/Models/Currency.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/11.04/currencies/app/Models/Currency.php b/11.04/currencies/app/Models/Currency.php index d7e447c..0d33b50 100644 --- a/11.04/currencies/app/Models/Currency.php +++ b/11.04/currencies/app/Models/Currency.php @@ -13,12 +13,12 @@ public function __construct(string $currency, float $rate) $this->rate = $rate; } - public function getCurrency(): string + public function currency(): string { return $this->currency; } - public function getRate(): float + public function rate(): float { return $this->rate; }