diff --git a/app/controllers/general.php b/app/controllers/general.php index bd05fea04..620f16f1c 100644 --- a/app/controllers/general.php +++ b/app/controllers/general.php @@ -19,6 +19,7 @@ use Appwrite\Network\Validator\Origin; use Appwrite\Utopia\Response\Filters\V11 as ResponseV11; use Appwrite\Utopia\Response\Filters\V12 as ResponseV12; use Appwrite\Utopia\Response\Filters\V13 as ResponseV13; +use Appwrite\Utopia\Response\Filters\V14 as ResponseV14; use Utopia\CLI\Console; use Utopia\Database\Database; use Utopia\Database\Document; @@ -177,6 +178,9 @@ App::init(function (App $utopia, Request $request, Response $response, Document case version_compare($responseFormat, '0.13.4', '<='): Response::setFilter(new ResponseV13()); break; + case version_compare($responseFormat, '0.14.0', '<='): + Response::setFilter(new ResponseV14()); + break; default: Response::setFilter(null); } diff --git a/src/Appwrite/Utopia/Response/Filters/V14.php b/src/Appwrite/Utopia/Response/Filters/V14.php new file mode 100644 index 000000000..200823f37 --- /dev/null +++ b/src/Appwrite/Utopia/Response/Filters/V14.php @@ -0,0 +1,176 @@ +parseRemoveAttributes($content, ['$createdAt']); + + break; + case Response::MODEL_SESSION_LIST: + $parsedResponse = $this->parseRemoveAttributesList($content, 'domains', ['$createdAt']); + + break; + case Response::MODEL_DOCUMENT: + case Response::MODEL_DOMAIN: + case Response::MODEL_FUNCTION: + case Response::MODEL_TEAM: + case Response::MODEL_MEMBERSHIP: + case Response::MODEL_PLATFORM: + case Response::MODEL_PROJECT: + case Response::MODEL_USER: + case Response::MODEL_WEBHOOK: + $parsedResponse = $this->parseRemoveAttributes($content, ['$createdAt', '$updatedAt']); + + break; + case Response::MODEL_DOCUMENT_LIST: + $parsedResponse = $this->parseRemoveAttributesList($content, 'documents', ['$createdAt', '$updatedAt']); + + break; + case Response::MODEL_DOMAIN_LIST: + $parsedResponse = $this->parseRemoveAttributesList($content, 'domains', ['$createdAt', '$updatedAt']); + + break; + case Response::MODEL_FUNCTION_LIST: + $parsedResponse = $this->parseRemoveAttributesList($content, 'functions', ['$createdAt', '$updatedAt']); + + break; + case Response::MODEL_TEAM_LIST: + $parsedResponse = $this->parseRemoveAttributesList($content, 'teams', ['$createdAt', '$updatedAt']); + + break; + case Response::MODEL_MEMBERSHIP_LIST: + $parsedResponse = $this->parseRemoveAttributesList($content, 'memberships', ['$createdAt', '$updatedAt']); + + break; + case Response::MODEL_PLATFORM_LIST: + $parsedResponse = $this->parseRemoveAttributesList($content, 'platforms', ['$createdAt', '$updatedAt']); + + break; + case Response::MODEL_PROJECT_LIST: + $parsedResponse = $this->parseRemoveAttributesList($content, 'projects', ['$createdAt', '$updatedAt']); + + break; + case Response::MODEL_USER_LIST: + $parsedResponse = $this->parseRemoveAttributesList($content, 'users', ['$createdAt', '$updatedAt']); + + break; + case Response::MODEL_WEBHOOK_LIST: + $parsedResponse = $this->parseRemoveAttributesList($content, 'webhooks', ['$createdAt', '$updatedAt']); + + break; + case Response::MODEL_TEAM: + case Response::MODEL_EXECUTION: + case Response::MODEL_FILE: + $parsedResponse = $this->parseCreatedAt($content); + break; + + case Response::MODEL_TEAM_LIST: + $parsedResponse = $this->parseCreatedAtList($content, 'teams'); + break; + + case Response::MODEL_EXECUTION_LIST: + $parsedResponse = $this->parseCreatedAtList($content, 'executions'); + break; + + case Response::MODEL_FILE_LIST: + $parsedResponse = $this->parseCreatedAtList($content, 'files'); + break; + + case Response::MODEL_FUNCTION: + case Response::MODEL_DEPLOYMENT: + case Response::MODEL_BUCKET: + $parsedResponse = $this->parseCreatedAtAndUpdatedAt($content); + break; + + case Response::MODEL_FUNCTION_LIST: + $parsedResponse = $this->parseCreatedAtAndUpdatedAtList($content, 'functions'); + break; + + case Response::MODEL_DEPLOYMENT_LIST: + $parsedResponse = $this->parseCreatedAtAndUpdatedAtList($content, 'deployments'); + break; + + case Response::MODEL_BUCKET_LIST: + $parsedResponse = $this->parseCreatedAtAndUpdatedAtList($content, 'buckets'); + break; + } + + return $parsedResponse; + } + + protected function parseRemoveAttributes(array $content, array $attributes) + { + foreach ($attributes as $attribute) { + unset($content[$attribute]); + } + + return $content; + } + + protected function parseRemoveAttributesList(array $content, string $property, array $attributes) + { + $documents = $content[$property]; + $parsedResponse = []; + foreach ($documents as $document) { + $parsedResponse[] = $this->parseRemoveAttributes($document, $attributes); + } + $content[$property] = $parsedResponse; + + return $content; + } + + protected function parseCreatedAt(array $content) + { + $content['dateCreated'] = $content['$createdAt']; + unset($content['$createdAt']); + unset($content['$updatedAt']); + + return $content; + } + + protected function parseCreatedAtList(array $content, string $property) + { + $documents = $content[$property]; + $parsedResponse = []; + foreach ($documents as $document) { + $parsedResponse[] = $this->parseCreatedAt($document); + } + $content[$property] = $parsedResponse; + + return $content; + } + + protected function parseCreatedAtAndUpdatedAt(array $content) + { + $content['dateCreated'] = $content['$createdAt']; + $content['dateUpdated'] = $content['$updatedAt']; + unset($content['$createdAt']); + unset($content['$updatedAt']); + + return $content; + } + + protected function parseCreatedAtAndUpdatedAtList(array $content, string $property) + { + $documents = $content[$property]; + $parsedResponse = []; + foreach ($documents as $document) { + $parsedResponse[] = $this->parseCreatedAtAndUpdatedAt($document); + } + $content[$property] = $parsedResponse; + + return $content; + } +}