66 lines
2.3 KiB
PHP
Executable File
66 lines
2.3 KiB
PHP
Executable File
<?php
|
|
namespace Zampet\Module\Auth;
|
|
|
|
use DateTime;
|
|
use Exception;
|
|
|
|
// Caminho do manifest.json
|
|
$manifestPath = realpath(path: __DIR__ . "/manifest.json");
|
|
|
|
if (!$manifestPath || !file_exists(filename: $manifestPath)) {
|
|
throw new Exception(message: "Arquivo 'manifest.json' não encontrado.");
|
|
}
|
|
|
|
// Lê e decodifica
|
|
$manifest = json_decode(json: file_get_contents(filename: $manifestPath), associative: true);
|
|
|
|
// Verifica estrutura
|
|
if (!isset($manifest['apis']) || !is_array(value: $manifest['apis'])) {
|
|
throw new Exception(message: "Estrutura de 'apis' inválida no manifest.");
|
|
}
|
|
|
|
$now = (new DateTime())->format(format: 'Y-m-d');
|
|
$newApis = [];
|
|
$updated = false;
|
|
|
|
// Checa se tem versão esperando que começa hoje
|
|
foreach ($manifest['apis'] as $api) {
|
|
if ($api['status'] === 'planned' && $api['start_date'] === $now) {
|
|
// Promote a nova
|
|
$api['status'] = 'active';
|
|
$newApis[] = $api;
|
|
$updated = true;
|
|
} elseif ($api['status'] === 'active' && $api['start_date'] !== $now) {
|
|
// Ignora versão antiga ativa
|
|
continue;
|
|
} else {
|
|
$newApis[] = $api;
|
|
}
|
|
}
|
|
|
|
// Atualiza manifest se tiver mudança
|
|
if ($updated) {
|
|
$manifest['apis'] = $newApis;
|
|
file_put_contents(filename: $manifestPath, data: json_encode(value: $manifest, flags: JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));
|
|
}
|
|
|
|
// Carrega a versão ativa
|
|
$loaded = false;
|
|
foreach ($manifest['apis'] as $api) {
|
|
$startDate = new DateTime(datetime: $api['start_date']);
|
|
if ($api['status'] === 'active' && $startDate <= new DateTime()) {
|
|
$routeFile = MODULE_PATH . "/{$manifest['dirName']}/{$api['version']}/Routes/Routes.php";
|
|
if (file_exists(filename: $routeFile)) {
|
|
require_once realpath(path: $routeFile);
|
|
$loaded = true;
|
|
break;
|
|
} else {
|
|
throw new Exception(message: "Arquivo de rotas não encontrado para a versão '{$api['version']}'.");
|
|
}
|
|
}
|
|
}
|
|
|
|
// Verifica se carregou
|
|
if (!$loaded) {
|
|
throw new Exception(message: "Nenhuma versão ativa da API foi carregada.");
|
|
} |