diff --git a/src/Appwrite/Utopia/Response/Filters/V15.php b/src/Appwrite/Utopia/Response/Filters/V15.php index 19000c9567..57c8bce4ca 100644 --- a/src/Appwrite/Utopia/Response/Filters/V15.php +++ b/src/Appwrite/Utopia/Response/Filters/V15.php @@ -25,20 +25,27 @@ class V15 extends Filter $parsedResponse = $this->handleDatetimeAttributes($content, ['startTime', 'endTime']); break; case Response::MODEL_BUCKET: + $parsedResponse = $this->handleBucketAttributes($content); + break; case Response::MODEL_COLLECTION: + $parsedResponse = $this->handleCollectionAttributes($content); + break; case Response::MODEL_DEPLOYMENT: case Response::MODEL_DOCUMENT: case Response::MODEL_EXECUTION: + $parsedResponse = $this->handleExecutionAttributes($content); + break; case Response::MODEL_PLATFORM: case Response::MODEL_PROJECT: case Response::MODEL_TEAM: case Response::MODEL_FILE: case Response::MODEL_WEBHOOK: case Response::MODEL_DOMAIN: + case Response::MODEL_DATABASE: $parsedResponse = $this->handleDatetimeAttributes($content, ['$createdAt', '$updatedAt']); break; case Response::MODEL_FUNCTION: - $parsedResponse = $this->handleDatetimeAttributes($content, ['$createdAt', '$updatedAt', 'scheduleNext', 'schedulePrevious']); + $parsedResponse = $this->handleFunctionAttribtues($content); break; case Response::MODEL_KEY: $parsedResponse = $this->handleDatetimeAttributes($content, ['$createdAt', '$updatedAt', 'expire']); @@ -55,6 +62,8 @@ class V15 extends Filter case Response::MODEL_TOKEN: $parsedResponse = $this->handleDatetimeAttributes($content, ['$createdAt', 'expire']); break; + case Response::MODEL_USAGE_FUNCTIONS: + $parsedResponse = $this->handleModelUsageFuncAttributes($content); } // Downgrade Permissions for all models @@ -63,6 +72,20 @@ class V15 extends Filter return $parsedResponse; } + protected function handleBucketAttributes(array $content) + { + if ($content['fileSecurity']) { + $content['permssion'] = 'file'; + } else { + $content['permssion'] = 'bucket'; + } + + unset($content['fileSecurity']); + unset($content['compression']); + + $content = $this->handleDatetimeAttributes($content, ['$createdAt', '$updatedAt']); + } + protected function handleDatetimeAttributes(array $content, array $attributes): array { foreach ($attributes as $attribute) { @@ -76,6 +99,10 @@ class V15 extends Filter protected function handleUser(array $content): array { unset($content['password']); + unset($content['hash']); + unset($content['hashOptions']); + + $content = $this->handleDatetimeAttributes($content, ['registration', 'passwordUpdate', '$createdAt', '$updatedAt']); return $content; } @@ -149,4 +176,61 @@ class V15 extends Filter unset($model['$permissions']); return array_merge($model, $result); } + + protected function handleCollectionAttributes(array $content) + { + $content['permission'] = $content['documentSecurity']; + + unset($content['documentSecurity']); + $content = $this->handleDatetimeAttributes($content, ['$createdAt', '$updatedAt']); + return $content; + } + + private function handleExecutionAttributes($content) + { + unset($content['stdout']); + + $content = $this->handleDatetimeAttributes($content, ['$createdAt', '$updatedAt']); + return $content; + } + + private function handleFunctionAttribtues($content) + { + $content['execute'] = array_map($this->downgradePermissionSelector, $content['execute']); + + $content = $this->handleDatetimeAttributes($content, ['$createdAt', '$updatedAt', 'scheduleNext', 'schedulePrevious']); + return $content; + } + + private function handleModelUsageFuncAttributes($content) + { + $content['functiosnExecutions'] = $content['executionsTotal']; + $content['functionsFailures'] = $content['executionsFailure']; + $content['functionsCompute'] = $content['executionsTime']; + unset($content['functionExecutions']); + unset($content['functionFailure']); + unset($content['executionsTime']); + unset($content['buildsTotal']); + unset($content['executionsSuccess']); + unset($content['buildsFailure']); + unset($content['buildsSuccess']); + unset($content['buildsTime']); + + return $content; + } + + private function handleUsageProjectAttributes($content) + { + $content['functions'] = $content['executions']; + unset($content['executions']); + + return $content; + } + + private function handleUsageStorageAttribtues($content) + { + $content['filesStorage'] = $content['storage']; + $content['tagsStorage'] = []; + unset($content['storage']); + } }