This commit is contained in:
2021-08-10 15:48:33 -04:00
parent a1519752cd
commit 2d4f48f3a9
39 changed files with 864 additions and 0 deletions

44
api/setup/app.php Normal file
View File

@ -0,0 +1,44 @@
<?php
use DI\ContainerBuilder as Builder;
use DI\Bridge\Slim\Bridge;
include_once 'composer.php';
$builder = new Builder();
$folders = [
'settings',
'setups'
];
foreach ($folders as $folder) {
$name = implode(DIRECTORY_SEPARATOR, [__DIR__, $folder]);
if (!file_exists($name)) {
continue;
}
$files = new DirectoryIterator($name);
foreach ($files as $file) {
if ($file->isDir()) {
continue;
}
$builder->addDefinitions($file->getRealPath());
}
}
$container = $builder->build();
#!d($container->getKnownEntryNames());
$app = Bridge::create($container);
$app->addBodyParsingMiddleware();
$folder = implode(DIRECTORY_SEPARATOR, [__DIR__, 'middlewares']);
if (file_exists($folder)) {
$files = new DirectoryIterator($folder);
foreach ($files as $file) {
if ($file->isDir()) {
continue;
}
include_once $file->getRealPath();
}
}
include_once 'databases.php';
include_once 'router.php';

6
api/setup/composer.php Normal file
View File

@ -0,0 +1,6 @@
<?php
require_once implode(DIRECTORY_SEPARATOR, [
dirname(__DIR__),
'vendor',
'autoload.php'
]);

30
api/setup/databases.php Normal file
View File

@ -0,0 +1,30 @@
<?php
$databases = $app->getContainer()->get('databases');
foreach ($databases->databases as $name => $settings) {
switch ($settings->engine) {
case 'mysql': {
$dsn = ["mysql:host={$settings->host->name}"];
if (isset($settings->host->port)) {
$dsn []= "port={$settings->host->port}";
}
$dsn []= "dbname={$settings->name}";
$dsn = implode(';', $dsn);
$config = [
'connection_string' => $dsn,
'username' => $settings->user->name,
'password' => $settings->user->password
];
Model::configure($config, null, $name);
Model::set_db(new PDO($dsn, $settings->user->name, $settings->user->password), $name);
break;
}
case 'sqlite': {
$dsn = "sqlite:{$settings->database}";
Model::configure($dsn, null, $name);
break;
}
}
}
if (isset($databases->short_names) and $databases->short_names) {
Model::$short_table_names = true;
}

View File

@ -0,0 +1,3 @@
<?php
$app->add(new Incoviba\Common\Middleware\Cors());
$app->addRoutingMiddleware();

View File

@ -0,0 +1,2 @@
<?php
$app->add(new Zeuxisoo\Whoops\Slim\WhoopsMiddleware());

9
api/setup/router.php Normal file
View File

@ -0,0 +1,9 @@
<?php
$folder = $app->getContainer()->get('folders')->routes;
$files = new DirectoryIterator($folder);
foreach ($files as $file) {
if ($file->isDir() or $file->getExtension() !== 'php') {
continue;
}
include_once $file->getRealPath();
}

View File

@ -0,0 +1,34 @@
<?php
return [
'databases' => function() {
$arr = [
'databases' => [
ORM::DEFAULT_CONNECTION => (object) [
'engine' => 'mysql',
'name' => $_ENV['MYSQL_DATABASE'],
'host' => (object) [
'name' => 'db'
],
'user' => (object) [
'name' => $_ENV['MYSQL_USER'],
'password' => $_ENV['MYSQL_PASSWORD']
]
]
],
'short_names' => true
];
return (object) $arr;
},
'folders' => function() {
$arr = ['base' => dirname(__DIR__, 2)];
$arr['resources'] = implode(DIRECTORY_SEPARATOR, [
$arr['base'],
'resources'
]);
$arr['routes'] = implode(DIRECTORY_SEPARATOR, [
$arr['resources'],
'routes'
]);
return (object) $arr;
}
];