textRepository->getAll(); $data = array_map(function ($text) { return [ 'id' => $text->getId(), 'name' => $text->getName(), ]; }, $texts); $response->getBody()->write(json_encode($data)); return $response->withHeader('Content-Type', 'application/json'); } public function getMyTexts( Request $request, Response $response, ): Response { $user = $request->getAttribute('user'); if (!$user instanceof User) { return $this->errorResponse( $response, 401, 'unauthenticated' ); } $texts = $this->textRepository->findByUser($user); $data = array_map(function ($text) { return [ 'id' => $text->getId(), 'name' => $text->getName(), ]; }, $texts); $response->getBody()->write(json_encode($data)); return $response->withHeader('Content-Type', 'application/json'); } public function getText( Request $request, Response $response, int $textId, ): Response { $user = $request->getAttribute('user'); if (!$user instanceof User) { return $this->errorResponse( $response, 401, 'unauthenticated' ); } $text = $this->textRepository->find($textId); if ($text === null) { return $response->withStatus(404); } if ( $text->getUser()->getId() !== $user->getId() && !$user->isAdmin() ) { return $this->errorResponse( $response, 403, 'forbidden' ); } $response->getBody()->write(json_encode([ 'id' => $text->getId(), 'name' => $text->getName(), ])); return $response->withHeader('Content-Type', 'application/json'); } public function createText( Request $request, Response $response, CreateText $createTextUseCase, ): Response { $data = $request->getParsedBody(); $name = $data['name'] ?? null; $user = $request->getAttribute('user'); if (!$user instanceof User) { return $this->errorResponse( $response, 401, 'unauthenticated' ); } try { $text = $createTextUseCase->execute(new CreateTextRequest( name: $name, user: $user, )); } catch (BadRequestException $e) { $response->getBody()->write(json_encode(['error' => $e->getMessage()])); return $response->withStatus(400)->withHeader('Content-Type', 'application/json'); } $response->getBody()->write(json_encode([ 'id' => $text->getId(), 'name' => $text->getName(), ])); return $response->withHeader('Content-Type', 'application/json'); } private function errorResponse( Response $response, int $status, string $message, ): Response { $response->getBody()->write( json_encode(['error' => $message]) ); return $response->withStatus($status) ->withHeader('Content-Type', 'application/json'); } }