diff --git a/app/Http/Controllers/Apis/Protected/Main/OAuth2UserStoriesApiController.php b/app/Http/Controllers/Apis/Protected/Main/OAuth2UserStoriesApiController.php index a788b903b..b84538a7c 100644 --- a/app/Http/Controllers/Apis/Protected/Main/OAuth2UserStoriesApiController.php +++ b/app/Http/Controllers/Apis/Protected/Main/OAuth2UserStoriesApiController.php @@ -1,4 +1,7 @@ -repository = $repository; } + // OpenAPI Documentation + + #[OA\Get( + path: '/api/public/v1/user-stories', + operationId: 'getAllUserStories', + summary: 'Get all user stories', + description: 'Retrieves a paginated list of user stories showcasing real-world use cases and success stories from the OpenStack community. User stories highlight how organizations use OpenStack in production. This is a public endpoint that can return different data based on authentication (more details for authenticated users).', + tags: ['User Stories (Public)'], + 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', + required: false, + description: 'Filter expressions. Format: fieldvalue. Available field: name (=@, ==, @@). Operators: == (equals), =@ (starts with), @@ (contains)', + style: 'form', + explode: true, + schema: new OA\Schema( + type: 'array', + items: new OA\Items(type: 'string', example: 'name@@cloud') + ) + ), + new OA\Parameter( + name: 'order', + in: 'query', + required: false, + description: 'Order by field(s). Available fields: name, id. Use "-" prefix for descending order.', + schema: new OA\Schema(type: 'string', example: 'name') + ), + new OA\Parameter( + name: 'expand', + in: 'query', + required: false, + description: 'Expand relationships. Available: organization, industry, location, image, tags', + schema: new OA\Schema(type: 'string', example: 'organization,tags') + ), + new OA\Parameter( + name: 'relations', + in: 'query', + required: false, + description: 'Relations to load. Available: tags', + schema: new OA\Schema(type: 'string', example: 'tags') + ), + ], + responses: [ + new OA\Response( + response: 200, + description: 'User stories retrieved successfully', + content: new OA\JsonContent(ref: '#/components/schemas/PaginatedUserStoriesResponse') + ), + new OA\Response(response: Response::HTTP_PRECONDITION_FAILED, description: "Validation Error"), + new OA\Response(response: Response::HTTP_INTERNAL_SERVER_ERROR, description: "Server Error"), + ] + )] + /** * @return mixed */ @@ -78,4 +151,4 @@ protected function getEntitySerializerType(): string return !is_null($currentUser) ? SerializerRegistry::SerializerType_Private : SerializerRegistry::SerializerType_Public; } -} \ No newline at end of file +} diff --git a/app/Swagger/Models/ContinentSchema.php b/app/Swagger/Models/ContinentSchema.php new file mode 100644 index 000000000..410d69fef --- /dev/null +++ b/app/Swagger/Models/ContinentSchema.php @@ -0,0 +1,21 @@ +