diff --git a/app/Text/TextController.php b/app/Text/TextController.php deleted file mode 100644 index 500986e..0000000 --- a/app/Text/TextController.php +++ /dev/null @@ -1,53 +0,0 @@ -textRepository->getAll(); - - $data = array_map(fn($text) => [ - 'id' => $text->getId(), - 'name' => $text->getName(), - ], $texts); - - $response->getBody()->write(json_encode($data)); - return $response->withHeader('Content-Type', 'application/json'); - } - - public function createText( - Request $request, - Response $response, - CreateText $createTextUseCase, - ): Response { - $data = $request->getParsedBody(); - $name = $data['name'] ?? ''; - - if (!empty($name)) { - $text = $createTextUseCase->execute(new CreateTextRequest( - name: $name, - )); - - $response->getBody()->write(json_encode([ - 'id' => $text->getId(), - 'name' => $text->getName(), - ])); - return $response->withHeader('Content-Type', 'application/json'); - } - - $response->getBody()->write(json_encode(['error' => 'Name is required'])); - return $response->withStatus(400); - } -} diff --git a/app/View/ViewController.php b/app/View/ViewController.php index 0ee00ea..e6c6196 100644 --- a/app/View/ViewController.php +++ b/app/View/ViewController.php @@ -2,10 +2,19 @@ namespace App\View; +use App\Text\CreateTextDto; +use App\Text\TextRepository; +use App\Text\UseCases\CreateText; +use App\Text\UseCases\CreateTextRequest; use Psr\Http\Message\ResponseInterface as Response; +use Psr\Http\Message\ServerRequestInterface as Request; class ViewController { + public function __construct( + private TextRepository $textRepository, + ) {} + public function admin(Response $response): Response { $html = file_get_contents(__DIR__.'/../../views/templates/admin.php', true); @@ -16,9 +25,34 @@ class ViewController public function texts(Response $response): Response { + $texts = $this->textRepository->getAll(); + + $textsList = ''; + foreach ($texts as $text) { + $textsList .= '
  • ' . htmlspecialchars($text->getName()) . '
  • '; + } + $html = file_get_contents(__DIR__.'/../../views/templates/texts.php', true); + $html = str_replace('{{texts}}', $textsList, $html); $response->getBody()->write($html); return $response; } + + public function createText( + Request $request, + Response $response, + CreateText $createTextUseCase, + ): Response { + $data = $request->getParsedBody(); + $name = $data['name'] ?? ''; + + if (!empty($name)) { + $createTextUseCase->execute(new CreateTextRequest( + name: $name, + )); + } + + return $response->withHeader('Location', '/admin/texts')->withStatus(302); + } } diff --git a/bootstrap/app.php b/bootstrap/app.php index ddc3dcd..3299b05 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -4,7 +4,6 @@ use Psr\Http\Message\ResponseInterface as Response; use Psr\Http\Message\ServerRequestInterface as Request; use DI\Bridge\Slim\Bridge; use App\View\ViewController; -use App\Text\TextController; $container = require __DIR__.'/container.php'; $app = Bridge::create($container); @@ -14,8 +13,6 @@ $app->addErrorMiddleware(true, true, true); $app->get('/admin', [ViewController::class, 'admin']); $app->get('/admin/texts', [ViewController::class, 'texts']); - -$app->get('/api/texts', [TextController::class, 'getTexts']); -$app->post('/api/texts', [TextController::class, 'createText']); +$app->post('/admin/texts', [ViewController::class, 'createText']); return $app; diff --git a/public/js/texts.js b/public/js/texts.js deleted file mode 100644 index 9421c20..0000000 --- a/public/js/texts.js +++ /dev/null @@ -1,28 +0,0 @@ -document.addEventListener('DOMContentLoaded', () => { - const textsList = document.getElementById('texts-list'); - const form = document.getElementById('texts-form'); - - async function loadTexts() { - const res = await fetch('/api/texts'); - const texts = await res.json(); - textsList.innerHTML = texts.map(text => '
  • ' + text.name + '
  • ').join(''); - } - - form.addEventListener('submit', async (e) => { - e.preventDefault(); - const formData = new FormData(form); - const res = await fetch('/api/texts', { - method: 'POST', - body: formData, - }); - if (res.ok) { - const text = await res.json(); - const li = document.createElement('li'); - li.textContent = text.name; - textsList.appendChild(li); - form.reset(); - } - }); - - loadTexts(); -}); diff --git a/views/templates/texts.php b/views/templates/texts.php index f8e8d7d..24c2c92 100644 --- a/views/templates/texts.php +++ b/views/templates/texts.php @@ -7,11 +7,11 @@

    Texts

    Back to Admin -
    +
    - - \ No newline at end of file +