From 64e04d537f5639b42450a6ca263fb2b72e859e26 Mon Sep 17 00:00:00 2001 From: Matias Perrone Date: Mon, 29 Sep 2025 16:38:55 -0300 Subject: [PATCH 01/10] feat: Add OpenAPI documentation to "getAll" method --- .../Marketplace/RemoteCloudsApiController.php | 98 ++++++++++++++++++- 1 file changed, 97 insertions(+), 1 deletion(-) diff --git a/app/Http/Controllers/Apis/Marketplace/RemoteCloudsApiController.php b/app/Http/Controllers/Apis/Marketplace/RemoteCloudsApiController.php index d55cd604d..68b95c948 100644 --- a/app/Http/Controllers/Apis/Marketplace/RemoteCloudsApiController.php +++ b/app/Http/Controllers/Apis/Marketplace/RemoteCloudsApiController.php @@ -12,7 +12,9 @@ * limitations under the License. **/ use App\Models\Foundation\Marketplace\IRemoteCloudServiceRepository; +use Illuminate\Http\Response; use models\oauth2\IResourceServerContext; +use OpenApi\Attributes as OA; /** * Class RemoteCloudsApiController @@ -29,8 +31,102 @@ public function __construct(IRemoteCloudServiceRepository $repository, IResource parent::__construct($repository, $resource_server_context); } + #[OA\Get( + path: "/api/public/v1/marketplace/remotely-managed-private-clouds", + description: "Get all marketplace remotely managed private cloud services (OpenStack implementations)", + summary: 'Get all remotely managed private clouds', + operationId: 'getAllRemotelyManagedPrivateClouds', + tags: ['Remote Clouds'], + parameters: [ + new OA\Parameter( + name: 'filter[]', + in: 'query', + required: false, + description: 'Filter expressions in the format fieldvalue. Available fields: name, company. Operators: =@, ==, @@.', + style: 'form', + explode: true, + schema: new OA\Schema( + type: 'array', + items: new OA\Items(type: 'string', example: 'name@@managed') + ) + ), + new OA\Parameter( + name: 'order', + in: 'query', + required: false, + description: 'Order by field(s)', + schema: new OA\Schema(type: 'string', example: 'name,-id') + ), + new OA\Parameter( + name: 'expand', + in: 'query', + required: false, + description: 'Comma-separated list of related resources to include. Available relations: company, type, capabilities, guests, hypervisors, supported_regions', + schema: new OA\Schema(type: 'string', example: 'company,type') + ), + new OA\Parameter( + name: 'relations', + in: 'query', + required: false, + description: 'Relations to load eagerly', + schema: new OA\Schema(type: 'string', example: 'company,type') + ), + new OA\Parameter( + name: 'fields', + in: 'query', + required: false, + description: 'Comma-separated list of fields to return', + schema: new OA\Schema(type: 'string', example: 'id,name,company.name') + ), + ], + responses: [ + new OA\Response( + response: 200, + description: 'Success - Returns paginated list of remotely managed private clouds', + content: new OA\JsonContent( + properties: [ + 'total' => new OA\Property(property: 'total', type: 'integer', example: 5), + 'per_page' => new OA\Property(property: 'per_page', type: 'integer', example: 5), + 'current_page' => new OA\Property(property: 'current_page', type: 'integer', example: 1), + 'last_page' => new OA\Property(property: 'last_page', type: 'integer', example: 1), + 'data' => new OA\Property( + property: 'data', + type: 'array', + items: new OA\Items( + properties: [ + 'id' => new OA\Property(property: 'id', type: 'integer', example: 1), + 'class_name' => new OA\Property(property: 'class_name', type: 'string', example: 'RemoteCloudService'), + 'name' => new OA\Property(property: 'name', type: 'string', example: 'Managed OpenStack Cloud Service'), + 'overview' => new OA\Property(property: 'overview', type: 'string', example: 'Remotely managed private OpenStack cloud'), + 'call_2_action_url' => new OA\Property(property: 'call_2_action_url', type: 'string', example: 'https://example.com/managed-cloud'), + 'slug' => new OA\Property(property: 'slug', type: 'string', example: 'managed-openstack-service'), + 'company_id' => new OA\Property(property: 'company_id', type: 'integer', example: 1), + 'type_id' => new OA\Property(property: 'type_id', type: 'integer', example: 1), + 'is_compatible_with_storage' => new OA\Property(property: 'is_compatible_with_storage', type: 'boolean', example: true), + 'is_compatible_with_compute' => new OA\Property(property: 'is_compatible_with_compute', type: 'boolean', example: true), + 'is_compatible_with_federated_identity' => new OA\Property(property: 'is_compatible_with_federated_identity', type: 'boolean', example: true), + 'is_compatible_with_platform' => new OA\Property(property: 'is_compatible_with_platform', type: 'boolean', example: true), + 'is_openstack_powered' => new OA\Property(property: 'is_openstack_powered', type: 'boolean', example: true), + 'is_openstack_tested' => new OA\Property(property: 'is_openstack_tested', type: 'boolean', example: true), + 'openstack_tested_info' => new OA\Property(property: 'openstack_tested_info', type: 'string', example: 'Tested with OpenStack Bobcat'), + 'hardware_spec' => new OA\Property(property: 'hardware_spec', type: 'string', example: 'High-performance servers with SSD storage'), + 'pricing_models' => new OA\Property(property: 'pricing_models', type: 'string', example: 'Monthly subscription, Pay-as-you-use'), + 'published_sla' => new OA\Property(property: 'published_sla', type: 'string', example: '99.9% uptime guarantee'), + 'is_vendor_managed_upgrades' => new OA\Property(property: 'is_vendor_managed_upgrades', type: 'boolean', example: true) + ], + type: 'object' + ) + ) + ], + type: 'object' + ) + ), + new OA\Response(response: Response::HTTP_PRECONDITION_FAILED, description: "Validation Error"), + new OA\Response(response: Response::HTTP_INTERNAL_SERVER_ERROR, description: "Server Error") + ] + )] public function getAll() { return parent::getAll(); } -} \ No newline at end of file +} From 65bf8b0302121650d2dc007ee8bc7e64bff046d5 Mon Sep 17 00:00:00 2001 From: Matias Perrone Date: Tue, 30 Sep 2025 11:57:21 -0300 Subject: [PATCH 02/10] chore: Add controller's response OpenAPI schema --- .../Marketplace/RemoteCloudsApiController.php | 38 +------------- app/Swagger/MarketplaceSchemas.php | 49 +++++++++++++++++++ 2 files changed, 50 insertions(+), 37 deletions(-) diff --git a/app/Http/Controllers/Apis/Marketplace/RemoteCloudsApiController.php b/app/Http/Controllers/Apis/Marketplace/RemoteCloudsApiController.php index 68b95c948..a4a8bb7e1 100644 --- a/app/Http/Controllers/Apis/Marketplace/RemoteCloudsApiController.php +++ b/app/Http/Controllers/Apis/Marketplace/RemoteCloudsApiController.php @@ -83,43 +83,7 @@ public function __construct(IRemoteCloudServiceRepository $repository, IResource new OA\Response( response: 200, description: 'Success - Returns paginated list of remotely managed private clouds', - content: new OA\JsonContent( - properties: [ - 'total' => new OA\Property(property: 'total', type: 'integer', example: 5), - 'per_page' => new OA\Property(property: 'per_page', type: 'integer', example: 5), - 'current_page' => new OA\Property(property: 'current_page', type: 'integer', example: 1), - 'last_page' => new OA\Property(property: 'last_page', type: 'integer', example: 1), - 'data' => new OA\Property( - property: 'data', - type: 'array', - items: new OA\Items( - properties: [ - 'id' => new OA\Property(property: 'id', type: 'integer', example: 1), - 'class_name' => new OA\Property(property: 'class_name', type: 'string', example: 'RemoteCloudService'), - 'name' => new OA\Property(property: 'name', type: 'string', example: 'Managed OpenStack Cloud Service'), - 'overview' => new OA\Property(property: 'overview', type: 'string', example: 'Remotely managed private OpenStack cloud'), - 'call_2_action_url' => new OA\Property(property: 'call_2_action_url', type: 'string', example: 'https://example.com/managed-cloud'), - 'slug' => new OA\Property(property: 'slug', type: 'string', example: 'managed-openstack-service'), - 'company_id' => new OA\Property(property: 'company_id', type: 'integer', example: 1), - 'type_id' => new OA\Property(property: 'type_id', type: 'integer', example: 1), - 'is_compatible_with_storage' => new OA\Property(property: 'is_compatible_with_storage', type: 'boolean', example: true), - 'is_compatible_with_compute' => new OA\Property(property: 'is_compatible_with_compute', type: 'boolean', example: true), - 'is_compatible_with_federated_identity' => new OA\Property(property: 'is_compatible_with_federated_identity', type: 'boolean', example: true), - 'is_compatible_with_platform' => new OA\Property(property: 'is_compatible_with_platform', type: 'boolean', example: true), - 'is_openstack_powered' => new OA\Property(property: 'is_openstack_powered', type: 'boolean', example: true), - 'is_openstack_tested' => new OA\Property(property: 'is_openstack_tested', type: 'boolean', example: true), - 'openstack_tested_info' => new OA\Property(property: 'openstack_tested_info', type: 'string', example: 'Tested with OpenStack Bobcat'), - 'hardware_spec' => new OA\Property(property: 'hardware_spec', type: 'string', example: 'High-performance servers with SSD storage'), - 'pricing_models' => new OA\Property(property: 'pricing_models', type: 'string', example: 'Monthly subscription, Pay-as-you-use'), - 'published_sla' => new OA\Property(property: 'published_sla', type: 'string', example: '99.9% uptime guarantee'), - 'is_vendor_managed_upgrades' => new OA\Property(property: 'is_vendor_managed_upgrades', type: 'boolean', example: true) - ], - type: 'object' - ) - ) - ], - type: 'object' - ) + content: new OA\JsonContent(ref: '#/components/schemas/PaginatedRemoteCloudsResponse') ), new OA\Response(response: Response::HTTP_PRECONDITION_FAILED, description: "Validation Error"), new OA\Response(response: Response::HTTP_INTERNAL_SERVER_ERROR, description: "Server Error") diff --git a/app/Swagger/MarketplaceSchemas.php b/app/Swagger/MarketplaceSchemas.php index 6f585b73d..89bf0a79a 100644 --- a/app/Swagger/MarketplaceSchemas.php +++ b/app/Swagger/MarketplaceSchemas.php @@ -138,3 +138,52 @@ class MarketplaceAppliancesResponseSchema class PaginatedAppliancesResponseSchema { } + +#[OA\Schema( + schema: 'RemoteCloudsResponse', + type: 'object', + properties: [ + 'id' => new OA\Property(property: 'id', type: 'integer', example: 1), + 'class_name' => new OA\Property(property: 'class_name', type: 'string', example: 'RemoteCloudService'), + 'name' => new OA\Property(property: 'name', type: 'string', example: 'Managed OpenStack Cloud Service'), + 'overview' => new OA\Property(property: 'overview', type: 'string', example: 'Remotely managed private OpenStack cloud'), + 'call_2_action_url' => new OA\Property(property: 'call_2_action_url', type: 'string', example: 'https://example.com/managed-cloud'), + 'slug' => new OA\Property(property: 'slug', type: 'string', example: 'managed-openstack-service'), + 'company_id' => new OA\Property(property: 'company_id', type: 'integer', example: 1), + 'type_id' => new OA\Property(property: 'type_id', type: 'integer', example: 1), + 'is_compatible_with_storage' => new OA\Property(property: 'is_compatible_with_storage', type: 'boolean', example: true), + 'is_compatible_with_compute' => new OA\Property(property: 'is_compatible_with_compute', type: 'boolean', example: true), + 'is_compatible_with_federated_identity' => new OA\Property(property: 'is_compatible_with_federated_identity', type: 'boolean', example: true), + 'is_compatible_with_platform' => new OA\Property(property: 'is_compatible_with_platform', type: 'boolean', example: true), + 'is_openstack_powered' => new OA\Property(property: 'is_openstack_powered', type: 'boolean', example: true), + 'is_openstack_tested' => new OA\Property(property: 'is_openstack_tested', type: 'boolean', example: true), + 'openstack_tested_info' => new OA\Property(property: 'openstack_tested_info', type: 'string', example: 'Tested with OpenStack Bobcat'), + 'hardware_spec' => new OA\Property(property: 'hardware_spec', type: 'string', example: 'High-performance servers with SSD storage'), + 'pricing_models' => new OA\Property(property: 'pricing_models', type: 'string', example: 'Monthly subscription, Pay-as-you-use'), + 'published_sla' => new OA\Property(property: 'published_sla', type: 'string', example: '99.9% uptime guarantee'), + 'is_vendor_managed_upgrades' => new OA\Property(property: 'is_vendor_managed_upgrades', type: 'boolean', example: true) + ] +)] +class RemoteCloudsResponseSchema +{ +} + +#[OA\Schema( + schema: 'PaginatedRemoteCloudsResponse', + allOf: [ + new OA\Schema(ref: '#/components/schemas/PaginateDataSchemaResponse'), + new OA\Schema( + type: 'object', + properties: [ + new OA\Property( + property: 'data', + type: 'array', + items: new OA\Items(ref: '#/components/schemas/RemoteCloudsResponse') + ) + ] + ) + ] +)] +class PaginatedRemoteCloudsResponseSchema +{ +} \ No newline at end of file From b8971903351e1b4e3bef77136a68a306efaeb29f Mon Sep 17 00:00:00 2001 From: Matias Perrone Date: Wed, 1 Oct 2025 14:59:03 -0300 Subject: [PATCH 03/10] chore: Add Marketplace tag --- .../Controllers/Apis/Marketplace/RemoteCloudsApiController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/Apis/Marketplace/RemoteCloudsApiController.php b/app/Http/Controllers/Apis/Marketplace/RemoteCloudsApiController.php index a4a8bb7e1..b835fd093 100644 --- a/app/Http/Controllers/Apis/Marketplace/RemoteCloudsApiController.php +++ b/app/Http/Controllers/Apis/Marketplace/RemoteCloudsApiController.php @@ -36,7 +36,7 @@ public function __construct(IRemoteCloudServiceRepository $repository, IResource description: "Get all marketplace remotely managed private cloud services (OpenStack implementations)", summary: 'Get all remotely managed private clouds', operationId: 'getAllRemotelyManagedPrivateClouds', - tags: ['Remote Clouds'], + tags: ['Remote Clouds', 'Marketplace'], parameters: [ new OA\Parameter( name: 'filter[]', From 4a898818b7e4d9b3a7f9f553547777f0374f7c3c Mon Sep 17 00:00:00 2001 From: Matias Perrone Date: Tue, 7 Oct 2025 18:17:56 -0300 Subject: [PATCH 04/10] chore: Add to RemoteCloudsResponse schema the anyOf fields of company, type, and reviews --- app/Swagger/MarketplaceSchemas.php | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/app/Swagger/MarketplaceSchemas.php b/app/Swagger/MarketplaceSchemas.php index 89bf0a79a..acbb26962 100644 --- a/app/Swagger/MarketplaceSchemas.php +++ b/app/Swagger/MarketplaceSchemas.php @@ -149,8 +149,6 @@ class PaginatedAppliancesResponseSchema 'overview' => new OA\Property(property: 'overview', type: 'string', example: 'Remotely managed private OpenStack cloud'), 'call_2_action_url' => new OA\Property(property: 'call_2_action_url', type: 'string', example: 'https://example.com/managed-cloud'), 'slug' => new OA\Property(property: 'slug', type: 'string', example: 'managed-openstack-service'), - 'company_id' => new OA\Property(property: 'company_id', type: 'integer', example: 1), - 'type_id' => new OA\Property(property: 'type_id', type: 'integer', example: 1), 'is_compatible_with_storage' => new OA\Property(property: 'is_compatible_with_storage', type: 'boolean', example: true), 'is_compatible_with_compute' => new OA\Property(property: 'is_compatible_with_compute', type: 'boolean', example: true), 'is_compatible_with_federated_identity' => new OA\Property(property: 'is_compatible_with_federated_identity', type: 'boolean', example: true), @@ -162,6 +160,13 @@ class PaginatedAppliancesResponseSchema 'pricing_models' => new OA\Property(property: 'pricing_models', type: 'string', example: 'Monthly subscription, Pay-as-you-use'), 'published_sla' => new OA\Property(property: 'published_sla', type: 'string', example: '99.9% uptime guarantee'), 'is_vendor_managed_upgrades' => new OA\Property(property: 'is_vendor_managed_upgrades', type: 'boolean', example: true) + ], + anyOf: [ + 'company_id' => new OA\Property(property: 'company_id', type: 'integer', example: 1), + 'company' => new OA\Property(property: 'company', type: 'Company'), + 'type_id' => new OA\Property(property: 'type_id', type: 'integer'), + 'type' => new OA\Property(property: 'type', type: 'MarketPlaceType'), + 'reviews' => new OA\Property(property: 'reviews', type: 'array', items: new OA\Items(type: 'MarketPlaceReview')), ] )] class RemoteCloudsResponseSchema From e34aa92ee32be2d1321c977e05bdc11b1b5248f2 Mon Sep 17 00:00:00 2001 From: Matias Perrone Date: Tue, 14 Oct 2025 12:54:58 -0300 Subject: [PATCH 05/10] fix: Change "namespace" word positioning --- .../Apis/Marketplace/RemoteCloudsApiController.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/Http/Controllers/Apis/Marketplace/RemoteCloudsApiController.php b/app/Http/Controllers/Apis/Marketplace/RemoteCloudsApiController.php index b835fd093..ba236ab5e 100644 --- a/app/Http/Controllers/Apis/Marketplace/RemoteCloudsApiController.php +++ b/app/Http/Controllers/Apis/Marketplace/RemoteCloudsApiController.php @@ -1,4 +1,7 @@ - Date: Fri, 7 Nov 2025 17:31:05 +0000 Subject: [PATCH 06/10] fix: doc render --- app/Swagger/MarketplaceSchemas.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/app/Swagger/MarketplaceSchemas.php b/app/Swagger/MarketplaceSchemas.php index acbb26962..dcae9d259 100644 --- a/app/Swagger/MarketplaceSchemas.php +++ b/app/Swagger/MarketplaceSchemas.php @@ -159,9 +159,7 @@ class PaginatedAppliancesResponseSchema 'hardware_spec' => new OA\Property(property: 'hardware_spec', type: 'string', example: 'High-performance servers with SSD storage'), 'pricing_models' => new OA\Property(property: 'pricing_models', type: 'string', example: 'Monthly subscription, Pay-as-you-use'), 'published_sla' => new OA\Property(property: 'published_sla', type: 'string', example: '99.9% uptime guarantee'), - 'is_vendor_managed_upgrades' => new OA\Property(property: 'is_vendor_managed_upgrades', type: 'boolean', example: true) - ], - anyOf: [ + 'is_vendor_managed_upgrades' => new OA\Property(property: 'is_vendor_managed_upgrades', type: 'boolean', example: true), 'company_id' => new OA\Property(property: 'company_id', type: 'integer', example: 1), 'company' => new OA\Property(property: 'company', type: 'Company'), 'type_id' => new OA\Property(property: 'type_id', type: 'integer'), From be0bc0c45202baa85cf313f3b4b68c12c7e69e96 Mon Sep 17 00:00:00 2001 From: Matias Perrone Date: Tue, 11 Nov 2025 20:47:20 +0000 Subject: [PATCH 07/10] chore: Move to Marketplace single tag --- .../Apis/Marketplace/RemoteCloudsApiController.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/Apis/Marketplace/RemoteCloudsApiController.php b/app/Http/Controllers/Apis/Marketplace/RemoteCloudsApiController.php index ba236ab5e..eee0ed0e6 100644 --- a/app/Http/Controllers/Apis/Marketplace/RemoteCloudsApiController.php +++ b/app/Http/Controllers/Apis/Marketplace/RemoteCloudsApiController.php @@ -39,7 +39,7 @@ public function __construct(IRemoteCloudServiceRepository $repository, IResource description: "Get all marketplace remotely managed private cloud services (OpenStack implementations)", summary: 'Get all remotely managed private clouds', operationId: 'getAllRemotelyManagedPrivateClouds', - tags: ['Remote Clouds', 'Marketplace'], + tags: ['Marketplace'], parameters: [ new OA\Parameter( name: 'filter[]', @@ -96,4 +96,4 @@ public function getAll() { return parent::getAll(); } -} +} \ No newline at end of file From 85ade67a26e50709a2df5da5c048af2395a023ee Mon Sep 17 00:00:00 2001 From: Matias Perrone Date: Wed, 19 Nov 2025 22:46:11 +0000 Subject: [PATCH 08/10] chore: add ref schemas --- .../Marketplace/RemoteCloudsApiController.php | 18 ++++++- app/Swagger/MarketplaceSchemas.php | 2 +- .../Models/RemoteCloudServiceSchema.php | 50 +++++++++++++++++++ 3 files changed, 67 insertions(+), 3 deletions(-) create mode 100644 app/Swagger/Models/RemoteCloudServiceSchema.php diff --git a/app/Http/Controllers/Apis/Marketplace/RemoteCloudsApiController.php b/app/Http/Controllers/Apis/Marketplace/RemoteCloudsApiController.php index eee0ed0e6..b038416c5 100644 --- a/app/Http/Controllers/Apis/Marketplace/RemoteCloudsApiController.php +++ b/app/Http/Controllers/Apis/Marketplace/RemoteCloudsApiController.php @@ -39,8 +39,22 @@ public function __construct(IRemoteCloudServiceRepository $repository, IResource description: "Get all marketplace remotely managed private cloud services (OpenStack implementations)", summary: 'Get all remotely managed private clouds', operationId: 'getAllRemotelyManagedPrivateClouds', - tags: ['Marketplace'], + tags: ['Marketplace', 'Clouds'], parameters: [ + new OA\Parameter( + name: 'page', + in: 'query', + required: false, + description: 'Page number for pagination', + schema: new OA\Schema(type: 'integer', example: 1) + ), + new OA\Parameter( + name: 'per_page', + in: 'query', + required: false, + description: 'Items per page', + schema: new OA\Schema(type: 'integer', example: 10, maximum: 100) + ), new OA\Parameter( name: 'filter[]', in: 'query', @@ -96,4 +110,4 @@ public function getAll() { return parent::getAll(); } -} \ No newline at end of file +} diff --git a/app/Swagger/MarketplaceSchemas.php b/app/Swagger/MarketplaceSchemas.php index dcae9d259..478608269 100644 --- a/app/Swagger/MarketplaceSchemas.php +++ b/app/Swagger/MarketplaceSchemas.php @@ -181,7 +181,7 @@ class RemoteCloudsResponseSchema new OA\Property( property: 'data', type: 'array', - items: new OA\Items(ref: '#/components/schemas/RemoteCloudsResponse') + items: new OA\Items(ref: '#/components/schemas/RemoteCloudService') ) ] ) diff --git a/app/Swagger/Models/RemoteCloudServiceSchema.php b/app/Swagger/Models/RemoteCloudServiceSchema.php new file mode 100644 index 000000000..19cb98d47 --- /dev/null +++ b/app/Swagger/Models/RemoteCloudServiceSchema.php @@ -0,0 +1,50 @@ + Date: Thu, 27 Nov 2025 18:23:58 +0000 Subject: [PATCH 09/10] chore: remove RemoteCloudsResponse schema and add MarketPlaceReview schema --- .../Models/MarketPlaceReviewSchema.php | 2 +- .../Models/RemoteCloudServiceSchema.php | 47 +++++-------------- 2 files changed, 12 insertions(+), 37 deletions(-) diff --git a/app/Swagger/Models/MarketPlaceReviewSchema.php b/app/Swagger/Models/MarketPlaceReviewSchema.php index bc033dd4e..d59788cc2 100644 --- a/app/Swagger/Models/MarketPlaceReviewSchema.php +++ b/app/Swagger/Models/MarketPlaceReviewSchema.php @@ -19,4 +19,4 @@ ] class MarketPlaceReviewSchema { -} +} \ No newline at end of file diff --git a/app/Swagger/Models/RemoteCloudServiceSchema.php b/app/Swagger/Models/RemoteCloudServiceSchema.php index 19cb98d47..cab712ec3 100644 --- a/app/Swagger/Models/RemoteCloudServiceSchema.php +++ b/app/Swagger/Models/RemoteCloudServiceSchema.php @@ -7,42 +7,17 @@ #[OA\Schema( schema: 'RemoteCloudService', type: 'object', - properties: [ - new OA\Property(property: 'id', type: 'integer', example: 1), - new OA\Property(property: 'created', type: 'integer', example: 1), - new OA\Property(property: 'last_edited', type: 'integer', example: 1), - new OA\Property(property: 'class_name', type: 'string', example: 'RemoteCloudService'), - new OA\Property(property: 'name', type: 'string', example: 'Managed OpenStack Cloud Service'), - new OA\Property(property: 'overview', type: 'string', example: 'Remotely managed private OpenStack cloud'), - new OA\Property(property: 'call_2_action_url', type: 'string', example: 'https://example.com/managed-cloud'), - new OA\Property(property: 'slug', type: 'string', example: 'managed-openstack-service'), - new OA\Property(property: 'company_id', type: 'integer', example: 1), - new OA\Property(property: 'type_id', type: 'integer', example: 1, description: 'Marketplace Type ID'), - - new OA\Property(property: 'company', ref: '#/components/schemas/Company'), - - // @TODO: Remove this from the correspodent serializer, as there is no serializer for MarketPlaceType or create serializer for it - // new OA\Property(property: 'type', ref: '#/components/schemas/MarketPlaceType'), - new OA\Property(property: 'reviews', type: 'array', items: new OA\Items(ref: '#/components/schemas/MarketPlaceReview')), - new OA\Property(property: 'supported_regions', type: 'array', items: new OA\Items(ref: '#/components/schemas/RegionalSupport')), - - new OA\Property(property: 'is_compatible_with_storage', type: 'boolean', example: true), - new OA\Property(property: 'is_compatible_with_compute', type: 'boolean', example: true), - new OA\Property(property: 'is_compatible_with_federated_identity', type: 'boolean', example: true), - new OA\Property(property: 'is_compatible_with_platform', type: 'boolean', example: true), - new OA\Property(property: 'is_openstack_powered', type: 'boolean', example: true), - new OA\Property(property: 'is_openstack_tested', type: 'boolean', example: true), - new OA\Property(property: 'openstack_tested_info', type: 'string', example: 'Tested with OpenStack Bobcat'), - - new OA\Property(property: 'capabilities', type: 'array', items: new OA\Items(ref: '#/components/schemas/OpenStackImplementationApiCoverage'), description: 'Only present if requested via relations'), - new OA\Property(property: 'guests', type: 'array', items: new OA\Items(ref: '#/components/schemas/GuestOSType'), description: 'Only present if requested via relations'), - new OA\Property(property: 'hypervisors', type: 'array', items: new OA\Items(ref: '#/components/schemas/HyperVisorType'), description: 'Only present if requested via relations'), - - new OA\Property(property: 'hardware_spec', type: 'string', example: 'High-performance servers with SSD storage'), - new OA\Property(property: 'pricing_models', type: 'string', example: 'Monthly subscription, Pay-as-you-use'), - new OA\Property(property: 'published_sla', type: 'string', example: '99.9% uptime guarantee'), - new OA\Property(property: 'is_vendor_managed_upgrades', type: 'boolean', example: true), - + allOf: [ + new OA\Schema(ref: '#/components/schemas/OpenStackImplementation'), + new OA\Schema( + type: 'object', + properties: [ + new OA\Property(property: 'hardware_spec', type: 'string', example: 'High-performance servers with SSD storage'), + new OA\Property(property: 'pricing_models', type: 'string', example: 'Monthly subscription, Pay-as-you-use'), + new OA\Property(property: 'published_sla', type: 'string', example: '99.9% uptime guarantee'), + new OA\Property(property: 'is_vendor_managed_upgrades', type: 'boolean', example: true), + ] + ) ] )] class RemoteCloudServiceSchema From 3cb78f9f2bc38d2bbcb521ff43da42f1780700bc Mon Sep 17 00:00:00 2001 From: Matias Perrone Date: Thu, 11 Dec 2025 20:19:17 +0000 Subject: [PATCH 10/10] chore: include PR requested changes and fix response --- .../Marketplace/RemoteCloudsApiController.php | 2 +- app/Swagger/MarketplaceSchemas.php | 34 ++++++------------- 2 files changed, 12 insertions(+), 24 deletions(-) diff --git a/app/Http/Controllers/Apis/Marketplace/RemoteCloudsApiController.php b/app/Http/Controllers/Apis/Marketplace/RemoteCloudsApiController.php index b038416c5..9d4839bae 100644 --- a/app/Http/Controllers/Apis/Marketplace/RemoteCloudsApiController.php +++ b/app/Http/Controllers/Apis/Marketplace/RemoteCloudsApiController.php @@ -98,7 +98,7 @@ public function __construct(IRemoteCloudServiceRepository $repository, IResource ], responses: [ new OA\Response( - response: 200, + response: Response::HTTP_OK, description: 'Success - Returns paginated list of remotely managed private clouds', content: new OA\JsonContent(ref: '#/components/schemas/PaginatedRemoteCloudsResponse') ), diff --git a/app/Swagger/MarketplaceSchemas.php b/app/Swagger/MarketplaceSchemas.php index 478608269..7d85a8c20 100644 --- a/app/Swagger/MarketplaceSchemas.php +++ b/app/Swagger/MarketplaceSchemas.php @@ -142,29 +142,17 @@ class PaginatedAppliancesResponseSchema #[OA\Schema( schema: 'RemoteCloudsResponse', type: 'object', - properties: [ - 'id' => new OA\Property(property: 'id', type: 'integer', example: 1), - 'class_name' => new OA\Property(property: 'class_name', type: 'string', example: 'RemoteCloudService'), - 'name' => new OA\Property(property: 'name', type: 'string', example: 'Managed OpenStack Cloud Service'), - 'overview' => new OA\Property(property: 'overview', type: 'string', example: 'Remotely managed private OpenStack cloud'), - 'call_2_action_url' => new OA\Property(property: 'call_2_action_url', type: 'string', example: 'https://example.com/managed-cloud'), - 'slug' => new OA\Property(property: 'slug', type: 'string', example: 'managed-openstack-service'), - 'is_compatible_with_storage' => new OA\Property(property: 'is_compatible_with_storage', type: 'boolean', example: true), - 'is_compatible_with_compute' => new OA\Property(property: 'is_compatible_with_compute', type: 'boolean', example: true), - 'is_compatible_with_federated_identity' => new OA\Property(property: 'is_compatible_with_federated_identity', type: 'boolean', example: true), - 'is_compatible_with_platform' => new OA\Property(property: 'is_compatible_with_platform', type: 'boolean', example: true), - 'is_openstack_powered' => new OA\Property(property: 'is_openstack_powered', type: 'boolean', example: true), - 'is_openstack_tested' => new OA\Property(property: 'is_openstack_tested', type: 'boolean', example: true), - 'openstack_tested_info' => new OA\Property(property: 'openstack_tested_info', type: 'string', example: 'Tested with OpenStack Bobcat'), - 'hardware_spec' => new OA\Property(property: 'hardware_spec', type: 'string', example: 'High-performance servers with SSD storage'), - 'pricing_models' => new OA\Property(property: 'pricing_models', type: 'string', example: 'Monthly subscription, Pay-as-you-use'), - 'published_sla' => new OA\Property(property: 'published_sla', type: 'string', example: '99.9% uptime guarantee'), - 'is_vendor_managed_upgrades' => new OA\Property(property: 'is_vendor_managed_upgrades', type: 'boolean', example: true), - 'company_id' => new OA\Property(property: 'company_id', type: 'integer', example: 1), - 'company' => new OA\Property(property: 'company', type: 'Company'), - 'type_id' => new OA\Property(property: 'type_id', type: 'integer'), - 'type' => new OA\Property(property: 'type', type: 'MarketPlaceType'), - 'reviews' => new OA\Property(property: 'reviews', type: 'array', items: new OA\Items(type: 'MarketPlaceReview')), + allOf: [ + new OA\Schema(ref: '#/components/schemas/OpenStackImplementation'), + new OA\Schema( + type: 'object', + properties: [ + 'hardware_spec' => new OA\Property(property: 'hardware_spec', type: 'string', example: 'High-performance servers with SSD storage'), + 'pricing_models' => new OA\Property(property: 'pricing_models', type: 'string', example: 'Monthly subscription, Pay-as-you-use'), + 'published_sla' => new OA\Property(property: 'published_sla', type: 'string', example: '99.9% uptime guarantee'), + 'is_vendor_managed_upgrades' => new OA\Property(property: 'is_vendor_managed_upgrades', type: 'boolean', example: true), + ] + ) ] )] class RemoteCloudsResponseSchema