FONDLED THE CODE

This commit is contained in:
2025-05-06 10:36:07 -04:00
parent 9f91737781
commit c09fb31e34
8 changed files with 162 additions and 48 deletions

View File

@@ -4,12 +4,28 @@ declare(strict_types=1);
namespace Siteworxpro\App\Controllers;
use Illuminate\Support\Facades\Log;
use League\Route\Http\Exception\NotFoundException;
use Nyholm\Psr7\ServerRequest;
use Psr\Http\Message\ResponseInterface;
use Siteworxpro\App\Traefik\ProtocolEnum;
abstract class Controller implements ControllerInterface
{
protected function protocolEnumFromRequest(ServerRequest $request): ProtocolEnum
{
$protocol = $request->getAttribute('protocol');
try {
return ProtocolEnum::fromString($protocol);
} catch (\InvalidArgumentException $e) {
Log::error($e->getMessage());
return ProtocolEnum::HTTP;
}
}
/**
* @param ServerRequest $request
* @return ResponseInterface

View File

@@ -20,10 +20,14 @@ class MiddlewaresController extends Controller
if ($request->getAttribute('id') !== null) {
$name = $request->getAttribute('id');
return JsonResponseFactory::createJsonResponse(RedisClient::getMiddleware($name));
return JsonResponseFactory::createJsonResponse(
RedisClient::getMiddleware($name, $this->protocolEnumFromRequest($request))
);
}
return JsonResponseFactory::createJsonResponse(RedisClient::getAllMiddlewares());
return JsonResponseFactory::createJsonResponse(
RedisClient::getAllMiddlewares($this->protocolEnumFromRequest($request))
);
}
/**
@@ -39,7 +43,7 @@ class MiddlewaresController extends Controller
return JsonResponseFactory::createJsonResponse(['error' => 'Middleware is invalid'], 400);
}
RedisClient::createOrReplace($name, $data, EntityEnum::MIDDLEWARE);
RedisClient::createOrReplace($name, $data, EntityEnum::MIDDLEWARE, $this->protocolEnumFromRequest($request));
return JsonResponseFactory::createJsonResponse(['message' => 'Middleware added successfully']);
}
@@ -55,7 +59,7 @@ class MiddlewaresController extends Controller
return JsonResponseFactory::createJsonResponse(['error' => 'Middleware is invalid'], 400);
}
RedisClient::deleteAllKeys($name, EntityEnum::MIDDLEWARE);
RedisClient::deleteAllKeys($name, EntityEnum::MIDDLEWARE , $this->protocolEnumFromRequest($request));
return JsonResponseFactory::createJsonResponse(['message' => 'Middleware deleted successfully']);
}

View File

@@ -20,10 +20,14 @@ class RoutesController extends Controller
if ($request->getAttribute('id') !== null) {
$name = $request->getAttribute('id');
return JsonResponseFactory::createJsonResponse(RedisClient::getRouter($name));
return JsonResponseFactory::createJsonResponse(
RedisClient::getRouter($name, $this->protocolEnumFromRequest($request))
);
}
return JsonResponseFactory::createJsonResponse(RedisClient::getAllRouters());
return JsonResponseFactory::createJsonResponse(
RedisClient::getAllRouters($this->protocolEnumFromRequest($request))
);
}
/**
@@ -43,7 +47,12 @@ class RoutesController extends Controller
return JsonResponseFactory::createJsonResponse(['error' => 'Rule is required'], 400);
}
RedisClient::createOrReplace($name, $data, EntityEnum::ROUTER);
RedisClient::createOrReplace(
$name,
$data,
EntityEnum::ROUTER,
$this->protocolEnumFromRequest($request)
);
return JsonResponseFactory::createJsonResponse(['message' => 'Router created successfully']);
}
@@ -55,7 +64,11 @@ class RoutesController extends Controller
{
$name = $request->getAttribute('id');
RedisClient::deleteAllKeys($name, EntityEnum::ROUTER);
RedisClient::deleteAllKeys(
$name,
EntityEnum::ROUTER,
$this->protocolEnumFromRequest($request)
);
return JsonResponseFactory::createJsonResponse(['message' => 'Router deleted successfully']);
}
@@ -70,7 +83,7 @@ class RoutesController extends Controller
$data = $request->getParsedBody();
try {
RedisClient::patchEntity($name, $data, EntityEnum::ROUTER);
RedisClient::patchEntity($name, $data, EntityEnum::ROUTER, $this->protocolEnumFromRequest($request));
} catch (\InvalidArgumentException) {
return JsonResponseFactory::createJsonResponse(['error' => 'Router not found'], 404);
}

View File

@@ -20,10 +20,14 @@ class ServicesController extends Controller
if ($request->getAttribute('id') !== null) {
$name = $request->getAttribute('id');
return JsonResponseFactory::createJsonResponse(RedisClient::getService($name));
return JsonResponseFactory::createJsonResponse(
RedisClient::getService($name, $this->protocolEnumFromRequest($request))
);
}
return JsonResponseFactory::createJsonResponse(RedisClient::getAllServices());
return JsonResponseFactory::createJsonResponse(
RedisClient::getAllServices($this->protocolEnumFromRequest($request))
);
}
/**
@@ -39,7 +43,7 @@ class ServicesController extends Controller
return JsonResponseFactory::createJsonResponse(['error' => 'loadbalancer is required'], 400);
}
RedisClient::createOrReplace($name, $data, EntityEnum::SERVICE);
RedisClient::createOrReplace($name, $data, EntityEnum::SERVICE, $this->protocolEnumFromRequest($request));
return JsonResponseFactory::createJsonResponse(['message' => 'Service updated successfully']);
}
@@ -55,7 +59,7 @@ class ServicesController extends Controller
return JsonResponseFactory::createJsonResponse(['error' => 'Service name is required'], 400);
}
RedisClient::deleteAllKeys($name, EntityEnum::SERVICE);
RedisClient::deleteAllKeys($name, EntityEnum::SERVICE, $this->protocolEnumFromRequest($request));
return JsonResponseFactory::createJsonResponse(['message' => 'Service deleted successfully']);
}

View File

@@ -120,7 +120,10 @@ class Server
*/
protected function registerRoutes(): void
{
$this->router->group('/http/routes', function (RouteGroup $router) {
$this->router->addPatternMatcher('protocolEnums', 'http|tcp|udp');
$this->router->addPatternMatcher('protocolEnumsMiddleware', 'http|tcp');
$this->router->group('/{protocol:protocolEnums}/routes', function (RouteGroup $router) {
$router->get('/', RoutesController::class . '::get');
$router->get('/{id}', RoutesController::class . '::get');
$router->post('/{id}', RoutesController::class . '::post');
@@ -128,14 +131,14 @@ class Server
$router->delete('/{id}', RoutesController::class . '::delete');
});
$this->router->group('/http/services', function (RouteGroup $router) {
$this->router->group('/{protocol:protocolEnums}/services', function (RouteGroup $router) {
$router->get('/', ServicesController::class . '::get');
$router->get('/{id}', ServicesController::class . '::get');
$router->post('/{id}', ServicesController::class . '::post');
$router->delete('/{id}', ServicesController::class . '::delete');
});
$this->router->group('/http/middlewares', function (RouteGroup $router) {
$this->router->group('/{protocol:protocolEnumsMiddleware}/middlewares', function (RouteGroup $router) {
$router->get('/', MiddlewaresController::class . '::get');
$router->get('/{id}', MiddlewaresController::class . '::get');
$router->post('/{id}', MiddlewaresController::class . '::post');

View File

@@ -18,4 +18,14 @@ enum ProtocolEnum
self::UDP => 'udp',
};
}
public static function fromString(string $value): self
{
return match ($value) {
'http' => self::HTTP,
'tcp' => self::TCP,
'udp' => self::UDP,
default => throw new \InvalidArgumentException("Invalid protocol: $value"),
};
}
}