Merge branch 'develop'

This commit is contained in:
2021-10-13 22:46:59 -03:00
4 changed files with 97 additions and 0 deletions

8
common/Define/Engine.php Normal file
View File

@ -0,0 +1,8 @@
<?php
namespace ProVM\Common\Define;
interface Engine {
public function __construct(string $host, string $name, ?int $port = null);
public function dsn(): string;
public function hasLogin(): bool;
}

View File

@ -0,0 +1,36 @@
<?php
namespace ProVM\Common\Service;
use \Model;
class Database {
protected $settings;
public function __construct($settings) {
$this->settings = $settings;
}
public function load() {
foreach ($this->settings->databases as $name => $settings) {
$engine = $this->getEngine($settings);
$configs = ['connection_string' => $engine->dsn()];
if ($engine->hasLogin()) {
$configs['username'] = $settings->user->name;
$configs['password'] = $settings->user->password;
}
Model::configure($configs, null, $name);
}
if (isset($this->settings->short_names)) {
Model::$short_table_names = $this->settings->short_names;
}
}
protected function getEngine($settings): \ProVM\Common\Define\Engine {
$name = match($settings->engine) {
'mysql' => 'MySQL'
};
$class = implode("\\", [
'ProVM',
'Database',
$name
]);
return new $class($settings->host->name, $settings->name, $settings->host->port ?? null);
}
}

21
composer.json Normal file
View File

@ -0,0 +1,21 @@
{
"name": "provm/database",
"description": "Database loader for j4mie/paris",
"type": "library",
"require": {
"j4mie/paris": "^1.5"
},
"license": "MIT",
"autoload": {
"psr-4": {
"ProVM\\Database\\": "src/",
"ProVM\\Common\\": "common/"
}
},
"authors": [
{
"name": "Aldarien",
"email": "aldarien85@gmail.com"
}
]
}

32
src/MySQL.php Normal file
View File

@ -0,0 +1,32 @@
<?php
namespace ProVM\Database;
use ProVM\Common\Define\Engine;
class MySQL implements Engine {
protected $host;
protected $name;
public function __construct(string $host, string $name, ?int $port = null) {
$host_arr = [
'name' => $host
];
if ($port !== null) {
$host_arr['port'] = $port;
}
$this->host = (object) $host_arr;
$this->name = $name;
}
public function dsn(): string {
$dsn = [
'host=' . $this->host->name
];
if (isset($this->host->port)) {
$dsn []= 'port=' . $this->host->port;
}
$dsn []= 'dbname=' . $this->name;
return 'mysql:' . implode(';', $dsn);
}
public function hasLogin(): bool {
return true;
}
}