From dd64934de2ff29de1b233487d367bfe7f2cb61de Mon Sep 17 00:00:00 2001 From: Awilum Date: Sat, 14 Aug 2021 15:25:35 +0300 Subject: [PATCH] feat(endpoints): add Tokens endpoints #565 --- src/flextype/core/Endpoints/Tokens.php | 238 +++++++++++++++++++++++ src/flextype/routes/endpoints/tokens.php | 106 ++++++++++ 2 files changed, 344 insertions(+) create mode 100644 src/flextype/core/Endpoints/Tokens.php create mode 100644 src/flextype/routes/endpoints/tokens.php diff --git a/src/flextype/core/Endpoints/Tokens.php b/src/flextype/core/Endpoints/Tokens.php new file mode 100644 index 00000000..0bfefa0d --- /dev/null +++ b/src/flextype/core/Endpoints/Tokens.php @@ -0,0 +1,238 @@ +getQueryParams(); + + // Validate Api Request + if ( + count($result = $this->validateApiRequest([ + 'request' => $request, + 'api' => 'tokens', + 'params' => ['token', 'id'], + ])) > 0 + ) { + return $this->getApiResponse($response, $this->getStatusCodeMessage($result['http_status_code']), $result['http_status_code']); + } + + // Get token data + $contentData = tokens()->fetch($requestQueryParams['id'], $requestQueryParams['options'] ?? [])->toArray(); + + if (count($contentData) > 0) { + return $this->getApiResponse($response, $contentData, 200); + } + + return $this->getApiResponse($response, $this->getStatusCodeMessage(404), 404); + } + + /** + * Create token. + * + * @param ServerRequestInterface $request PSR7 request. + * @param ResponseInterface $response PSR7 response. + * + * @return ResponseInterface Response. + */ + public function create(ServerRequestInterface $request, ResponseInterface $response): ResponseInterface + { + // Get Request Parsed Body + $requestParsedBody = $request->getParsedBody(); + + // Validate Api Request + if ( + count($result = $this->validateApiRequest([ + 'request' => $request, + 'api' => 'tokens', + 'params' => ['token', 'id', 'access_token'], + ])) > 0 + ) { + return $this->getApiResponse($response, $this->getStatusCodeMessage($result['http_status_code']), $result['http_status_code']); + } + + // Create new token + tokens()->create($requestParsedBody['id'], $requestParsedBody['data'] ?? []); + + // Fetch token + $contentData = tokens()->fetch($requestParsedBody['id'])->toArray(); + + // Return response + if (count($contentData) > 0) { + return $this->getApiResponse($response, $contentData, 200); + } + + return $this->getApiResponse($response, [], 404); + } + + /** + * Update token. + * + * @param ServerRequestInterface $request PSR7 request. + * @param ResponseInterface $response PSR7 response. + * + * @return ResponseInterface Response. + */ + public function update(ServerRequestInterface $request, ResponseInterface $response): ResponseInterface + { + // Get Request Parsed Body + $requestParsedBody = $request->getParsedBody(); + + // Validate Api Request + if ( + count($result = $this->validateApiRequest([ + 'request' => $request, + 'api' => 'tokens', + 'params' => ['token', 'id', 'access_token'], + ])) > 0 + ) { + return $this->getApiResponse($response, $this->getStatusCodeMessage($result['http_status_code']), $result['http_status_code']); + } + + // Update token + tokens()->update($requestParsedBody['id'], $requestParsedBody['data'] ?? []); + + // Fetch token + $contentData = tokens()->fetch($requestParsedBody['id'])->toArray(); + + // Return response + if (count($contentData) > 0) { + return $this->getApiResponse($response, $contentData, 200); + } + + return $this->getApiResponse($response, [], 404); + } + + /** + * Move token. + * + * @param ServerRequestInterface $request PSR7 request. + * @param ResponseInterface $response PSR7 response. + * + * @return ResponseInterface Response. + */ + public function move(ServerRequestInterface $request, ResponseInterface $response): ResponseInterface + { + // Get Request Parsed Body + $requestParsedBody = $request->getParsedBody(); + + // Validate Api Request + if ( + count($result = $this->validateApiRequest([ + 'request' => $request, + 'api' => 'tokens', + 'params' => ['token', 'id', 'new_id', 'access_token'], + ])) > 0 + ) { + return $this->getApiResponse($response, $this->getStatusCodeMessage($result['http_status_code']), $result['http_status_code']); + } + + // Move token + tokens()->move($requestParsedBody['id'], $requestParsedBody['new_id']); + + // Fetch token + $contentData = tokens()->fetch($requestParsedBody['new_id'])->toArray(); + + // Return response + if (count($contentData) > 0) { + return $this->getApiResponse($response, $contentData, 200); + } + + return $this->getApiResponse($response, [], 404); + } + + /** + * Copy token. + * + * @param ServerRequestInterface $request PSR7 request. + * @param ResponseInterface $response PSR7 response. + * + * @return ResponseInterface Response. + */ + public function copy(ServerRequestInterface $request, ResponseInterface $response): ResponseInterface + { + // Get Request Parsed Body + $requestParsedBody = $request->getParsedBody(); + + // Validate Api Request + if ( + count($result = $this->validateApiRequest([ + 'request' => $request, + 'api' => 'tokens', + 'params' => ['token', 'id', 'new_id', 'access_token'], + ])) > 0 + ) { + return $this->getApiResponse($response, $this->getStatusCodeMessage($result['http_status_code']), $result['http_status_code']); + } + + // Copy token + tokens()->copy($requestParsedBody['id'], $requestParsedBody['new_id']); + + // Fetch token + $contentData = tokens()->fetch($requestParsedBody['new_id'])->toArray(); + + // Return response + if (count($contentData) > 0) { + return $this->getApiResponse($response, $contentData, 200); + } + + return $this->getApiResponse($response, [], 404); + } + + /** + * Delete token. + * + * @param ServerRequestInterface $request PSR7 request. + * @param ResponseInterface $response PSR7 response. + * + * @return ResponseInterface Response. + */ + public function delete(ServerRequestInterface $request, ResponseInterface $response): ResponseInterface + { + // Get Request Parsed Body + $requestParsedBody = $request->getParsedBody(); + + // Validate Api Request + if ( + count($result = $this->validateApiRequest([ + 'request' => $request, + 'api' => 'tokens', + 'params' => ['token', 'id', 'access_token'], + ])) > 0 + ) { + return $this->getApiResponse($response, $this->getStatusCodeMessage($result['http_status_code']), $result['http_status_code']); + } + + // Copy token + tokens()->delete($requestParsedBody['id']); + + // Return success response + return $this->getApiResponse($response, [], 204); + } +} diff --git a/src/flextype/routes/endpoints/tokens.php b/src/flextype/routes/endpoints/tokens.php new file mode 100644 index 00000000..6f59830c --- /dev/null +++ b/src/flextype/routes/endpoints/tokens.php @@ -0,0 +1,106 @@ +get('/api/tokens', [Tokens::class, 'fetch']); + +/** + * Create token + * + * endpoint: POST /api/tokens + * + * Body: + * id - [REQUIRED] - Unique identifier of the token. + * token - [REQUIRED] - Valid public token. + * access_token - [REQUIRED] - Valid access token. + * data - [REQUIRED] - Data to store for the token. + * + * Returns: + * Returns the token object for the token that was just created. + */ +app()->post('/api/tokens', [Tokens::class, 'create']); + +/** + * Update token + * + * endpoint: PATCH /api/tokens + * + * Body: + * id - [REQUIRED] - Unique identifier of the token. + * token - [REQUIRED] - Valid public token. + * access_token - [REQUIRED] - Valid access token. + * data - [REQUIRED] - Data to update for the token. + * + * Returns: + * Returns the token object for the token that was just updated. + */ +app()->patch('/api/tokens', [Tokens::class, 'update']); + +/** + * Move token + * + * endpoint: PUT /api/tokens + * + * Body: + * id - [REQUIRED] - Unique identifier of the token. + * new_id - [REQUIRED] - New Unique identifier of the token. + * token - [REQUIRED] - Valid public token. + * access_token - [REQUIRED] - Valid access token. + * + * Returns: + * Returns the token object for the token that was just moved. + */ +app()->put('/api/tokens', [Tokens::class, 'move']); + +/** + * Copy token + * + * endpoint: PUT /api/tokens/copy + * + * Body: + * id - [REQUIRED] - Unique identifier of the token. + * new_id - [REQUIRED] - New Unique identifier of the token. + * token - [REQUIRED] - Valid public token. + * access_token - [REQUIRED] - Valid access token. + * + * Returns: + * Returns the token object for the token that was just copied. + */ +app()->put('/api/tokens/copy', [Tokens::class, 'copy']); + +/** + * Delete token + * + * endpoint: DELETE /api/tokens + * + * Body: + * id - [REQUIRED] - Unique identifier of the token. + * token - [REQUIRED] - Valid pulbic token. + * access_token - [REQUIRED] - Valid access token. + * + * Returns: + * Returns an empty body with HTTP status 204 + */ +app()->delete('/api/tokens', [Tokens::class, 'delete']);