From 048718b5528cf7ab427d84d6e8e8d54853e97928 Mon Sep 17 00:00:00 2001 From: Aldarien Date: Mon, 15 Mar 2021 17:42:56 -0300 Subject: [PATCH] App 0.1.0 --- app/common/Controller/API.php | 17 ++++++ app/common/Controller/Currencies.php | 80 ++++++++++++++++++++++++++++ app/composer.json | 39 ++++++++++++++ app/public/index.php | 7 +++ app/resources/routes/api.php | 6 +++ app/resources/routes/currencies.php | 11 ++++ app/setup/api/settings.php | 18 +++++++ app/setup/app.php | 64 ++++++++++++++++++++++ app/setup/composer.php | 6 +++ app/setup/databases.php | 36 +++++++++++++ app/setup/router.php | 5 ++ 11 files changed, 289 insertions(+) create mode 100644 app/common/Controller/API.php create mode 100644 app/common/Controller/Currencies.php create mode 100644 app/composer.json create mode 100644 app/public/index.php create mode 100644 app/resources/routes/api.php create mode 100644 app/resources/routes/currencies.php create mode 100644 app/setup/api/settings.php create mode 100644 app/setup/app.php create mode 100644 app/setup/composer.php create mode 100644 app/setup/databases.php create mode 100644 app/setup/router.php diff --git a/app/common/Controller/API.php b/app/common/Controller/API.php new file mode 100644 index 0000000..df38875 --- /dev/null +++ b/app/common/Controller/API.php @@ -0,0 +1,17 @@ + '1.0.0' + ]; + return $this->withJson($response, $output); + } +} diff --git a/app/common/Controller/Currencies.php b/app/common/Controller/Currencies.php new file mode 100644 index 0000000..1fa4bca --- /dev/null +++ b/app/common/Controller/Currencies.php @@ -0,0 +1,80 @@ +find(Currency::class)->order('name')->array(); + $output = compact('currencies'); + return $this->withJson($response, $output); + } + public function show(Request $request, Response $response, ModelFactory $factory, $currency_id): Response { + $currency = $factory->find(Currency::class)->one($currency_id); + $output = [ + 'currency' => $currency->asArray() + ]; + return $this->withJson($response, $output); + } + public function add(Request $request, Response $response, ModelFactory $factory): Response { + $fields = [ + 'code', + 'name' + ]; + $post = json_decode($request->getBody()->getContents()); + $data = array_intersect_key((array) $post, array_combine($fields, $fields)); + $currency = $factory->find(Currency::class)->where([['code', $data['code']]])->one(); + if (!$currency) { + $currency = $factory->create(Currency::class, $data); + $currency->save(); + } + $output = [ + 'post_data' => $post, + 'input' => $data, + 'currency' => $currency->asArray() + ]; + return $this->withJson($response, $output); + } + public function edit(Request $request, Response $response, ModelFactory $factory, $currency_id): Response { + $currency = $factory->find(Currency::class)->one($currency_id); + $fields = [ + 'code', + 'name' + ]; + $post = json_decode($request->getBody()->getContents()); + $data = array_intersect_key((array) $post, array_combine($fields, $fields)); + $edited = false; + foreach ($data as $field => $value) { + if ($currency->{$field} != $value) { + $currency->{$field} = $value; + $edited = true; + } + } + if ($edited) { + $currency->save(); + } + $output = [ + 'get_data' => compact('currency_id'), + 'post_data' => $post, + 'input' => $data, + 'currency' => $currency->asArray() + ]; + return $this->withJson($response, $output); + } + public function delete(Request $request, Response $response, ModelFactory $factory, $currency_id): Response { + $currency = $factory->find(Currency::class)->one($currency_id); + $output = [ + 'get_data' => compact('currency_id'), + 'currency' => $currency->asArray() + ]; + $status = $currency->delete(); + $output['deleted'] = $status; + return $this->withJson($response, $output); + } +} diff --git a/app/composer.json b/app/composer.json new file mode 100644 index 0000000..5ab5f95 --- /dev/null +++ b/app/composer.json @@ -0,0 +1,39 @@ +{ + "name": "provm/money", + "description": "Aplicacion web que revisa los valores de distintas monedas", + "type": "project", + "require": { + "slim/slim": "^4.7", + "nyholm/psr7": "^1.4", + "nyholm/psr7-server": "^1.0", + "php-di/slim-bridge": "^3.1", + "provm/models": "dev-master", + "vlucas/phpdotenv": "^5.3" + }, + "license": "MIT", + "authors": [ + { + "name": "Aldarien", + "email": "aldarien85@gmail.com" + } + ], + "require-dev": { + "phpunit/phpunit": "^8.5" + }, + "autoload": { + "psr-4": { + "ProVM\\Money\\Common\\": "common", + "ProVM\\Common\\": "../provm/common", + "ProVM\\Money\\": "../src" + } + }, + "repositories": [ + { + "type": "git", + "url": "http://git.provm.cl/ProVM/models.git" + } + ], + "config": { + "secure-http": false + } +} diff --git a/app/public/index.php b/app/public/index.php new file mode 100644 index 0000000..da7da19 --- /dev/null +++ b/app/public/index.php @@ -0,0 +1,7 @@ +run(); diff --git a/app/resources/routes/api.php b/app/resources/routes/api.php new file mode 100644 index 0000000..a38b556 --- /dev/null +++ b/app/resources/routes/api.php @@ -0,0 +1,6 @@ +get('/', API::class); diff --git a/app/resources/routes/currencies.php b/app/resources/routes/currencies.php new file mode 100644 index 0000000..837717c --- /dev/null +++ b/app/resources/routes/currencies.php @@ -0,0 +1,11 @@ +group('/currencies', function($app) { + $app->post('/add[/]', [Currencies::class, 'add']); + $app->get('[/]', Currencies::class); +}); + +$app->group('/currency/{currency_id}', function($app) { + $app->get('[/]', [Currencies::class, 'show']); +}); diff --git a/app/setup/api/settings.php b/app/setup/api/settings.php new file mode 100644 index 0000000..ba3a6e0 --- /dev/null +++ b/app/setup/api/settings.php @@ -0,0 +1,18 @@ + DI\decorate(function($prev, Container $container) { + $arr = (array) $prev; + $arr['base'] = dirname(__DIR__, 2); + $arr['resources'] = implode(DIRECTORY_SEPARATOR, [ + $arr['base'], + 'resources' + ]); + $arr['routes'] = implode(DIRECTORY_SEPARATOR, [ + $arr['resources'], + 'routes' + ]); + return (object) $arr; + }) +]; diff --git a/app/setup/app.php b/app/setup/app.php new file mode 100644 index 0000000..86b394f --- /dev/null +++ b/app/setup/app.php @@ -0,0 +1,64 @@ +addDefinitions($filename); + } +} + +$container = $builder->build(); +$app = Bridge::create($container); +include_once 'databases.php'; + +if ($container->has('base_url')) { + $app->setBasePath($container->get('base_url')); +} +$app->addRoutingMiddleware(); + +foreach ($folders as $folder) { + $filename = implode(DIRECTORY_SEPARATOR, [ + $folder, + 'middleware.php' + ]); + if (!file_exists($filename)) { + continue; + } + include_once $filename; +} + +include_once 'router.php'; +$app->addErrorMiddleware(true, true, true); diff --git a/app/setup/composer.php b/app/setup/composer.php new file mode 100644 index 0000000..2d27ee1 --- /dev/null +++ b/app/setup/composer.php @@ -0,0 +1,6 @@ +getContainer()->get('databases'); +foreach ($databases as $name => $settings) { + switch($settings->system) { + case 'mysql': + $dsn = implode(':', [ + 'mysql', + implode(';', [ + implode('=', [ + 'host', + $settings->host->name + ]), + implode('=', [ + 'dbname', + $settings->name + ]) + ]) + ]); + if (isset($settings->host->port)) { + $dsn .= ';' . implode('=', [ + 'port', + $settings->host->port + ]); + } + break; + } + ORM::configure($dsn, null, $name); + switch ($settings->system) { + case 'mysql': + ORM::configure('username', $settings->user->name, $name); + ORM::configure('password', $settings->user->password, $name); + } +} +if (isset($databases->short_names)) { + Model::$short_table_names = $databases->short_names; +} diff --git a/app/setup/router.php b/app/setup/router.php new file mode 100644 index 0000000..d1d0372 --- /dev/null +++ b/app/setup/router.php @@ -0,0 +1,5 @@ +getContainer()->get('locations')->routes, + 'api.php' +]);