diff --git a/app/Http/Controllers/Apis/Marketplace/AppliancesApiController.php b/app/Http/Controllers/Apis/Marketplace/AppliancesApiController.php index fb6cfe2c2..e8df3abd7 100644 --- a/app/Http/Controllers/Apis/Marketplace/AppliancesApiController.php +++ b/app/Http/Controllers/Apis/Marketplace/AppliancesApiController.php @@ -1,4 +1,7 @@ -value. Available fields: name, company. Operators: =@, ==, @@.', + style: 'form', + explode: true, + schema: new OA\Schema( + type: 'array', + items: new OA\Items(type: 'string', example: 'name@@openstack') + ) + ), + 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 appliances', + content: new OA\JsonContent(ref: '#/components/schemas/PaginatedAppliancesResponse') + ), + 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 +} diff --git a/app/Models/Foundation/Marketplace/CompanyService.php b/app/Models/Foundation/Marketplace/CompanyService.php index 71ff04e10..7c82f659e 100644 --- a/app/Models/Foundation/Marketplace/CompanyService.php +++ b/app/Models/Foundation/Marketplace/CompanyService.php @@ -225,4 +225,4 @@ public function getResources() { return $this->resources->toArray(); } -} +} \ No newline at end of file diff --git a/app/Swagger/MarketplaceSchemas.php b/app/Swagger/MarketplaceSchemas.php index a6f0b6fe5..6f585b73d 100644 --- a/app/Swagger/MarketplaceSchemas.php +++ b/app/Swagger/MarketplaceSchemas.php @@ -85,3 +85,56 @@ class PaginatedMarketplaceDistributionResponseSchema class PaginatedPublicOrPrivateCloudsResponseSchema { } + +#[OA\Schema( + schema: 'MarketplaceAppliancesResponse', + type: 'object', + properties: [ + new OA\Property(property: 'id', type: 'integer', example: 1), + new OA\Property(property: 'class_name', type: 'string', example: 'Appliance'), + new OA\Property(property: 'name', type: 'string', example: 'OpenStack Private Cloud Appliance'), + new OA\Property(property: 'overview', type: 'string', example: 'Complete OpenStack solution'), + new OA\Property(property: 'call_2_action_url', type: 'string', example: 'https://example.com/contact'), + new OA\Property(property: 'slug', type: 'string', example: 'openstack-appliance'), + 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: false), + 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 Yoga'), + new OA\Property(property: 'company_id', type: 'integer', example: 41, description: 'ID of the company that provides this appliance, visible only when is not expanded'), + new OA\Property(property: 'company', type: 'Company', description: 'Company that provides this appliance, visible only when expanded'), + new OA\Property(property: 'type_id', type: 'integer', example: 13, description: 'ID of the type of this appliance'), + new OA\Property(property: 'type', type: 'MarketPlaceType', description: 'Type of this appliance, visible only when expanded'), + new OA\Property(property: 'types', type: 'array', items: new OA\Items(type: 'MarketPlaceType'), description: 'Regional support of this appliance, visible only when requested as relation'), + new OA\Property(property: 'reviews', type: 'array', items: new OA\Items(type: 'MarketPlaceReview', title: 'MarketPlaceReview'), description: 'Reviews of this appliance, visible only when expanded'), + new OA\Property(property: 'capabilities', type: 'array', items: new OA\Items(type: 'OpenStackImplementationApiCoverage'), description: 'Capabilities of this appliance, visible only when requested as relation'), + new OA\Property(property: 'hypervisors', type: 'array', items: new OA\Items(type: 'HyperVisorType'), description: 'Hypervisors of this appliance, visible only when requested as relation'), + new OA\Property(property: 'guests', type: 'array', items: new OA\Items(type: 'GuestOSType'), description: 'GuestOSType of this appliance, visible only when requested as relation'), + new OA\Property(property: 'supported_regions', type: 'array', items: new OA\Items(type: 'RegionalSupport'), description: 'Regional support of this appliance, visible only when requested as relation'), + ], +)] +class MarketplaceAppliancesResponseSchema +{ +} + +#[OA\Schema( + schema: 'PaginatedAppliancesResponse', + 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/Appliance') + ) + ] + ) + ] +)] +class PaginatedAppliancesResponseSchema +{ +} diff --git a/app/Swagger/Models/ApplianceSchema.php b/app/Swagger/Models/ApplianceSchema.php new file mode 100644 index 000000000..1cba0158a --- /dev/null +++ b/app/Swagger/Models/ApplianceSchema.php @@ -0,0 +1,41 @@ +