addItem = $addItem; $this->getItem = $getItem; $this->listItems = $listItems; $this->deleteItem = $deleteItem; } public function addItem(Request $request, Response $response): Response { try { $userId = $request->getAttribute('userId'); $data = $request->getParsedBody(); if (!isset($data['name'], $data['expirationDate'], $data['orderUrl'])) { return $this->createErrorResponse($response, 'Missing required fields', 400); } $itemId = $this->addItem->execute( $data['name'], $data['expirationDate'], $data['orderUrl'], $userId ); return $this->createSuccessResponse($response, ['id' => $itemId], 201); } catch (ApplicationException $e) { return $this->createErrorResponse($response, $e->getMessage(), 400); } catch (\Exception $e) { return $this->createErrorResponse($response, 'Internal server error', 500); } } public function getItem(Request $request, Response $response, array $args): Response { try { $userId = $request->getAttribute('userId'); $itemId = $args['id'] ?? ''; if (empty($itemId)) { return $this->createErrorResponse($response, 'Item ID is required', 400); } $itemData = $this->getItem->execute($itemId, $userId); return $this->createSuccessResponse($response, $itemData); } catch (ApplicationException $e) { return $this->createErrorResponse($response, $e->getMessage(), 404); } catch (\Exception $e) { return $this->createErrorResponse($response, 'Internal server error', 500); } } public function listItems(Request $request, Response $response): Response { try { $userId = $request->getAttribute('userId'); $items = $this->listItems->execute($userId); return $this->createSuccessResponse($response, $items); } catch (ApplicationException $e) { return $this->createErrorResponse($response, $e->getMessage(), 400); } catch (\Exception $e) { return $this->createErrorResponse($response, 'Internal server error', 500); } } public function deleteItem(Request $request, Response $response, array $args): Response { try { $userId = $request->getAttribute('userId'); $itemId = $args['id'] ?? ''; if (empty($itemId)) { return $this->createErrorResponse($response, 'Item ID is required', 400); } $this->deleteItem->execute($itemId, $userId); return $this->createSuccessResponse($response, null, 204); } catch (ApplicationException $e) { return $this->createErrorResponse($response, $e->getMessage(), 404); } catch (\Exception $e) { return $this->createErrorResponse($response, 'Internal server error', 500); } } }