From 902642d9fe79a1c5173adcf3315ffef1d67ffc8c Mon Sep 17 00:00:00 2001 From: Chirag Aggarwal Date: Thu, 2 Apr 2026 23:31:06 +0530 Subject: [PATCH] Use allOf wrapping for nested model $ref in spec output Direct $ref with sibling properties is not valid OpenAPI 3 / Swagger 2. Wrap in allOf so SDK generators correctly resolve the referenced schema. --- src/Appwrite/SDK/Specification/Format/OpenAPI3.php | 7 ++++--- src/Appwrite/SDK/Specification/Format/Swagger2.php | 7 ++++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/Appwrite/SDK/Specification/Format/OpenAPI3.php b/src/Appwrite/SDK/Specification/Format/OpenAPI3.php index 4bee70f848..ad384f0dd3 100644 --- a/src/Appwrite/SDK/Specification/Format/OpenAPI3.php +++ b/src/Appwrite/SDK/Specification/Format/OpenAPI3.php @@ -932,10 +932,11 @@ class OpenAPI3 extends Format } if ($items) { if (!empty($rule['nestedModel']) && !$rule['array']) { - unset($output['components']['schemas'][$model->getType()]['properties'][$name]['type']); + $existing = $output['components']['schemas'][$model->getType()]['properties'][$name]; + unset($existing['type']); $output['components']['schemas'][$model->getType()]['properties'][$name] = \array_merge( - $output['components']['schemas'][$model->getType()]['properties'][$name], - $items + $existing, + ['allOf' => [$items]] ); } else { $output['components']['schemas'][$model->getType()]['properties'][$name]['items'] = $items; diff --git a/src/Appwrite/SDK/Specification/Format/Swagger2.php b/src/Appwrite/SDK/Specification/Format/Swagger2.php index 0bce4df6c4..654f238dd2 100644 --- a/src/Appwrite/SDK/Specification/Format/Swagger2.php +++ b/src/Appwrite/SDK/Specification/Format/Swagger2.php @@ -925,10 +925,11 @@ class Swagger2 extends Format } if ($items) { if (!empty($rule['nestedModel']) && !$rule['array']) { - unset($output['definitions'][$model->getType()]['properties'][$name]['type']); + $existing = $output['definitions'][$model->getType()]['properties'][$name]; + unset($existing['type']); $output['definitions'][$model->getType()]['properties'][$name] = \array_merge( - $output['definitions'][$model->getType()]['properties'][$name], - $items + $existing, + ['allOf' => [$items]] ); } else { $output['definitions'][$model->getType()]['properties'][$name]['items'] = $items;