done. going to bed now.

This commit is contained in:
2025-05-05 19:27:09 -04:00
commit f7567db1b9
40 changed files with 6775 additions and 0 deletions

View File

@@ -0,0 +1,47 @@
<?php
declare(strict_types=1);
namespace Siteworxpro\App\Controllers;
use League\Route\Http\Exception\NotFoundException;
use Nyholm\Psr7\ServerRequest;
use Psr\Http\Message\ResponseInterface;
abstract class Controller implements ControllerInterface
{
/**
* @param ServerRequest $request
* @return ResponseInterface
* @throws NotFoundException
*/
public function get(ServerRequest $request): ResponseInterface
{
throw new NotFoundException("not found");
}
/**
* @throws NotFoundException
*/
public function post(ServerRequest $request): ResponseInterface
{
throw new NotFoundException("not found");
}
/**
* @throws NotFoundException
*/
public function delete(ServerRequest $request): ResponseInterface
{
throw new NotFoundException("not found");
}
/**
* @throws NotFoundException
*/
public function patch(ServerRequest $request): ResponseInterface
{
throw new NotFoundException("not found");
}
}

View File

@@ -0,0 +1,43 @@
<?php
declare(strict_types=1);
namespace Siteworxpro\App\Controllers;
use Nyholm\Psr7\ServerRequest;
use Psr\Http\Message\ResponseInterface;
interface ControllerInterface
{
/**
* Handle the request and return a response.
*
* @param ServerRequest $request The request data.
* @return mixed The response data.
*/
public function get(ServerRequest $request): ResponseInterface;
/**
* Handle the request and return a response.
*
* @param ServerRequest $request The request data.
* @return mixed The response data.
*/
public function post(ServerRequest $request): ResponseInterface;
/**
* Handle the request and return a response.
*
* @param ServerRequest $request The request data.
* @return mixed The response data.
*/
public function delete(ServerRequest $request): ResponseInterface;
/**
* Handle the request and return a response.
*
* @param ServerRequest $request The request data.
* @return mixed The response data.
*/
public function patch(ServerRequest $request): ResponseInterface;
}

View File

@@ -0,0 +1,63 @@
<?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\Traefik\RedisClient;
class MiddlewaresController extends Controller
{
/**
* @throws \JsonException
*/
public function get(ServerRequest $request): ResponseInterface
{
if ($request->getAttribute('id') !== null) {
$name = $request->getAttribute('id');
return JsonResponseFactory::createJsonResponse(RedisClient::getMiddleware($name));
}
return JsonResponseFactory::createJsonResponse(RedisClient::getAllMiddlewares());
}
/**
* @throws \JsonException
*/
public function post(ServerRequest $request): ResponseInterface
{
$name = $request->getAttribute('id');
$data = $request->getParsedBody();
if (empty($data)) {
return JsonResponseFactory::createJsonResponse(['error' => 'Middleware is invalid'], 400);
}
RedisClient::createOrReplace($name, $data, EntityEnum::MIDDLEWARE);
return JsonResponseFactory::createJsonResponse(['message' => 'Middleware added successfully']);
}
/**
* @throws \JsonException
*/
public function delete(ServerRequest $request): ResponseInterface
{
$name = $request->getAttribute('id');
if (empty($name)) {
return JsonResponseFactory::createJsonResponse(['error' => 'Middleware is invalid'], 400);
}
RedisClient::deleteAllKeys($name, EntityEnum::MIDDLEWARE);
return JsonResponseFactory::createJsonResponse(['message' => 'Middleware deleted successfully']);
}
}

View File

@@ -0,0 +1,81 @@
<?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\Traefik\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));
}
return JsonResponseFactory::createJsonResponse(RedisClient::getAllRouters());
}
/**
* @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);
return JsonResponseFactory::createJsonResponse(['message' => 'Router created successfully']);
}
/**
* @throws \JsonException
*/
public function delete(ServerRequest $request): ResponseInterface
{
$name = $request->getAttribute('id');
RedisClient::deleteAllKeys($name, EntityEnum::ROUTER);
return JsonResponseFactory::createJsonResponse(['message' => 'Router deleted successfully']);
}
/**
* @throws \JsonException
*/
public function patch(ServerRequest $request): ResponseInterface
{
$name = $request->getAttribute('id');
$data = $request->getParsedBody();
try {
RedisClient::patchEntity($name, $data, EntityEnum::ROUTER);
} catch (\InvalidArgumentException) {
return JsonResponseFactory::createJsonResponse(['error' => 'Router not found'], 404);
}
return JsonResponseFactory::createJsonResponse(['message' => 'Router updated successfully']);
}
}

View File

@@ -0,0 +1,63 @@
<?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\Traefik\RedisClient;
class ServicesController extends Controller
{
/**
* @throws \JsonException
*/
public function get(ServerRequest $request): ResponseInterface
{
if ($request->getAttribute('id') !== null) {
$name = $request->getAttribute('id');
return JsonResponseFactory::createJsonResponse(RedisClient::getService($name));
}
return JsonResponseFactory::createJsonResponse(RedisClient::getAllServices());
}
/**
* @throws \JsonException
*/
public function post(ServerRequest $request): ResponseInterface
{
$data = $request->getParsedBody();
$name = $request->getAttribute('id');
if (empty($data['loadbalancer'])) {
return JsonResponseFactory::createJsonResponse(['error' => 'loadbalancer is required'], 400);
}
RedisClient::createOrReplace($name, $data, EntityEnum::SERVICE);
return JsonResponseFactory::createJsonResponse(['message' => 'Service updated successfully']);
}
/**
* @throws \JsonException
*/
public function delete(ServerRequest $request): ResponseInterface
{
$name = $request->getAttribute('id');
if (empty($name)) {
return JsonResponseFactory::createJsonResponse(['error' => 'Service name is required'], 400);
}
RedisClient::deleteAllKeys($name, EntityEnum::SERVICE);
return JsonResponseFactory::createJsonResponse(['message' => 'Service deleted successfully']);
}
}