Newer
Older
smart-home-server / server / console.php
<?php

require_once __DIR__ . "/vendor/autoload.php";
include_once "Fury/fury.php";
$app = fury_init("SHServ");

function console() {
	global $argv;

	switch($argv[1]) {
		case "get.config":
			echo json_encode(FCONF);
		break;

		case "migrate":
			$tb = app()->thin_builder;
			$migrationsDir = __DIR__ . "/database/migrations";

			$tb->query("
				CREATE TABLE IF NOT EXISTS shserv_migrations (
					file_name VARCHAR(255) PRIMARY KEY,
					applied_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
				) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
			");

			$appliedRows = $tb->select("shserv_migrations", ["file_name"]);
			$applied = array_column($appliedRows, "file_name");
			$files = glob($migrationsDir . "/*.php");
			sort($files);

			foreach($files as $file) {
				$baseName = basename($file);
				if(in_array($baseName, $applied)) {
					echo "[SKIP] {$baseName}\n";
					continue;
				}
				$migration = include $file;
				if(is_callable($migration)) {
					$result = $migration($tb);
					if($result) {
						$tb->insert("shserv_migrations", ["file_name" => $baseName]);
						echo "[OK]   {$baseName}\n";
					} else {
						echo "[FAIL] {$baseName}\n";
					}
				} else {
					echo "[SKIP] {$baseName} (not callable)\n";
				}
			}
			echo "\nDone.\n";
		break;

		default: echo "\nNo command";
	}

	echo "\n";
}

console();