awaki/src/AwakiContext.php

61 lines
1.8 KiB
PHP

<?php
namespace Awaki;
use Index\Data\IDbConnection;
use Index\Data\Migration\{IDbMigrationRepo,DbMigrationManager,FsDbMigrationRepo};
use Index\Http\Routing\{HttpRouter,IRouter};
use Syokuhou\IConfig;
// theme colours: #99403d, #592824, #d18c83
// totally didn't just eyedrop musujime
class AwakiContext {
private const DB_INIT = 'SET SESSION time_zone = \'+00:00\', sql_mode = \'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION\';';
private IDbConnection $dbConn;
private HttpRouter $router;
private IConfig $urls;
public function __construct(IDbConnection $dbConn, IConfig $urls) {
$this->dbConn = $dbConn;
$this->urls = $urls;
$dbConn->execute(self::DB_INIT);
}
public function getDbQueryCount(): int {
$result = $this->dbConn->query('SHOW SESSION STATUS LIKE "Questions"');
return $result->next() ? $result->getInteger(0) : 0;
}
public function createMigrationManager(): DbMigrationManager {
return new DbMigrationManager($this->dbConn, 'awk_' . DbMigrationManager::DEFAULT_TABLE);
}
public function createMigrationRepo(): IDbMigrationRepo {
return new FsDbMigrationRepo(AWK_DIR_DBM);
}
public function getRouter(): IRouter {
return $this->router->getRouter();
}
public function setUpHttp(): void {
$this->router = new HttpRouter(
errorHandler: new RouterErrorHandler,
);
$this->router->use('/', function($response) {
$response->setPoweredBy('Awaki');
});
$this->registerHttpRoutes();
}
public function dispatchHttp(): void {
$this->router->dispatch();
}
private function registerHttpRoutes(): void {
new RedirectorRoutes($this->router, $this->dbConn, $this->urls);
}
}