Files
Traefik-Redis-Api/src/Controllers/RoutesController.php

75 lines
2.0 KiB
PHP

<?php
declare(strict_types=1);
namespace Siteworxpro\App\Controllers;
use Nyholm\Psr7\ServerRequest;
use Psr\Http\Message\ResponseInterface;
use Siteworxpro\App\Http\JsonResponseFactory;
use Siteworxpro\App\Traefik\EntityEnum;
use Siteworxpro\App\Facades\RedisClient;
class RoutesController extends Controller
{
/**
* @throws \JsonException
*/
public function get(ServerRequest $request): ResponseInterface
{
if ($request->getAttribute('id') !== null) {
$name = $request->getAttribute('id');
return JsonResponseFactory::createJsonResponse(
RedisClient::getRouter($name, $this->protocolEnumFromRequest($request))
);
}
return JsonResponseFactory::createJsonResponse(
RedisClient::getAllRouters($this->protocolEnumFromRequest($request))
);
}
/**
* @throws \JsonException
*/
public function post(ServerRequest $request): ResponseInterface
{
$data = $request->getParsedBody();
$name = $request->getAttribute('id');
if (empty($data['service'])) {
return JsonResponseFactory::createJsonResponse(['error' => 'Service is required'], 400);
}
if (empty($data['rule'])) {
return JsonResponseFactory::createJsonResponse(['error' => 'Rule is required'], 400);
}
RedisClient::createOrReplace(
$name,
$data,
EntityEnum::ROUTER,
$this->protocolEnumFromRequest($request)
);
return JsonResponseFactory::createJsonResponse(['message' => 'Router created successfully']);
}
/**
* @throws \JsonException
*/
public function delete(ServerRequest $request): ResponseInterface
{
$name = $request->getAttribute('id');
RedisClient::deleteAllKeys(
$name,
EntityEnum::ROUTER,
$this->protocolEnumFromRequest($request)
);
return JsonResponseFactory::createJsonResponse(['message' => 'Router deleted successfully']);
}
}