From 8597d48e41d16f600e99cc42e157af6aadc835a5 Mon Sep 17 00:00:00 2001 From: ArnabChatterjee20k Date: Thu, 30 Apr 2026 17:47:31 +0530 Subject: [PATCH] added additonal property key to rename on the sdk generator --- .../SDK/Specification/Format/OpenAPI3.php | 7 +++++++ .../SDK/Specification/Format/Swagger2.php | 7 +++++++ src/Appwrite/Utopia/Response/Model/Any.php | 20 +++++++++++++++++++ .../Utopia/Response/Model/Presence.php | 14 ++++++------- 4 files changed, 40 insertions(+), 8 deletions(-) diff --git a/src/Appwrite/SDK/Specification/Format/OpenAPI3.php b/src/Appwrite/SDK/Specification/Format/OpenAPI3.php index 66c2cd7c1c..2817569037 100644 --- a/src/Appwrite/SDK/Specification/Format/OpenAPI3.php +++ b/src/Appwrite/SDK/Specification/Format/OpenAPI3.php @@ -825,6 +825,13 @@ class OpenAPI3 extends Format if ($model->isAny()) { $output['components']['schemas'][$model->getType()]['additionalProperties'] = true; + + $additionalKey = \method_exists($model, 'getAdditionalPropertiesKey') + ? $model->getAdditionalPropertiesKey() + : null; + if ($additionalKey !== null) { + $output['components']['schemas'][$model->getType()]['x-additional-properties-key'] = $additionalKey; + } } if (!empty($required)) { diff --git a/src/Appwrite/SDK/Specification/Format/Swagger2.php b/src/Appwrite/SDK/Specification/Format/Swagger2.php index d07d957577..30833378a9 100644 --- a/src/Appwrite/SDK/Specification/Format/Swagger2.php +++ b/src/Appwrite/SDK/Specification/Format/Swagger2.php @@ -807,6 +807,13 @@ class Swagger2 extends Format if ($model->isAny()) { $output['definitions'][$model->getType()]['additionalProperties'] = true; + + $additionalKey = \method_exists($model, 'getAdditionalPropertiesKey') + ? $model->getAdditionalPropertiesKey() + : null; + if ($additionalKey !== null) { + $output['definitions'][$model->getType()]['x-additional-properties-key'] = $additionalKey; + } } if (!empty($required)) { diff --git a/src/Appwrite/Utopia/Response/Model/Any.php b/src/Appwrite/Utopia/Response/Model/Any.php index 6863748ac8..0ae3040a1d 100644 --- a/src/Appwrite/Utopia/Response/Model/Any.php +++ b/src/Appwrite/Utopia/Response/Model/Any.php @@ -12,6 +12,26 @@ class Any extends Model */ protected bool $any = true; + /** + * JSON wire-format key under which extra/dynamic attributes are exposed in + * generated SDK models (e.g. Document's `data` slot). Default null means + * SDK templates fall back to their hardcoded "data" key. Set this on + * subclasses (via setAdditionalPropertiesKey) to use a custom key like + * "metadata" while still benefiting from the generic `Model` mapping. + */ + protected ?string $additionalPropertiesKey = null; + + public function setAdditionalPropertiesKey(string $key): self + { + $this->additionalPropertiesKey = $key; + return $this; + } + + public function getAdditionalPropertiesKey(): ?string + { + return $this->additionalPropertiesKey; + } + /** * Get Name * diff --git a/src/Appwrite/Utopia/Response/Model/Presence.php b/src/Appwrite/Utopia/Response/Model/Presence.php index 4140cdb9d9..ea4092cff1 100644 --- a/src/Appwrite/Utopia/Response/Model/Presence.php +++ b/src/Appwrite/Utopia/Response/Model/Presence.php @@ -19,6 +19,9 @@ class Presence extends Any public function __construct() { + // Expose user-defined extras under "metadata" instead of the SDK default "data" + $this->setAdditionalPropertiesKey('metadata'); + $this ->addRule('$id', [ 'type' => self::TYPE_STRING, @@ -83,15 +86,10 @@ class Presence extends Any 'required' => false, 'default' => null, 'example' => self::TYPE_DATETIME_EXAMPLE, - ]) - // not adding hostname here in the response model - ->addRule('metadata', [ - 'type' => self::TYPE_STRING, - 'description' => 'Presence metadata.', - 'required' => false, - 'default' => [], - 'example' => ['device' => 'web'], ]); + // `hostname` is intentionally not exposed. + // User-defined extras flow through Any's generic mapping, surfaced under + // the "metadata" key declared via setAdditionalPropertiesKey() above. } public function filter(DatabaseDocument $document): DatabaseDocument