From f13be9786b8ba77fdaa41e0399360b024a4a4f47 Mon Sep 17 00:00:00 2001 From: Chen Asraf Date: Mon, 16 Mar 2026 22:51:06 +0200 Subject: [PATCH] fix: add api list limits --- lib/Controller/BBCodeController.php | 18 +- lib/Controller/CatHeaderController.php | 6 +- lib/Controller/CategoryController.php | 18 +- lib/Controller/ForumUserController.php | 8 +- lib/Controller/InitController.php | 6 +- lib/Controller/PostController.php | 4 +- lib/Controller/ReactionController.php | 12 +- lib/Controller/RoleController.php | 12 +- lib/Controller/SearchController.php | 2 +- lib/Controller/TeamController.php | 12 +- lib/Controller/ThreadController.php | 10 +- .../ThreadSubscriptionController.php | 6 +- lib/Controller/UserRoleController.php | 12 +- openapi-administration.json | 23 + openapi-full.json | 453 +++++++++++++++++- openapi.json | 430 ++++++++++++++++- 16 files changed, 976 insertions(+), 56 deletions(-) diff --git a/lib/Controller/BBCodeController.php b/lib/Controller/BBCodeController.php index 678f19d..56c08f3 100644 --- a/lib/Controller/BBCodeController.php +++ b/lib/Controller/BBCodeController.php @@ -31,6 +31,8 @@ class BBCodeController extends OCSController { /** * Get all BBCodes (excludes builtin codes) * + * @param int<1, 100> $limit Maximum number of BBCodes to return + * @param int<0, max> $offset Offset for pagination * @return DataResponse>, array{}> * * 200: BBCodes returned @@ -38,9 +40,9 @@ class BBCodeController extends OCSController { #[NoAdminRequired] #[RequirePermission('canAccessAdminTools')] #[ApiRoute(verb: 'GET', url: '/api/bbcodes')] - public function index(): DataResponse { + public function index(int $limit = 100, int $offset = 0): DataResponse { try { - $bbcodes = $this->bbCodeMapper->findAllNonBuiltin(); + $bbcodes = array_slice($this->bbCodeMapper->findAllNonBuiltin(), $offset, $limit); return new DataResponse(array_map(fn ($b) => $b->jsonSerialize(), $bbcodes)); } catch (\Exception $e) { $this->logger->error('Error fetching BBCodes: ' . $e->getMessage()); @@ -51,15 +53,17 @@ class BBCodeController extends OCSController { /** * Get enabled BBCodes * + * @param int<1, 100> $limit Maximum number of BBCodes to return + * @param int<0, max> $offset Offset for pagination * @return DataResponse>, array{}> * * 200: Enabled BBCodes returned */ #[NoAdminRequired] #[ApiRoute(verb: 'GET', url: '/api/bbcodes/enabled')] - public function enabled(): DataResponse { + public function enabled(int $limit = 100, int $offset = 0): DataResponse { try { - $bbcodes = $this->bbCodeMapper->findAllEnabled(); + $bbcodes = array_slice($this->bbCodeMapper->findAllEnabled(), $offset, $limit); return new DataResponse(array_map(fn ($b) => $b->jsonSerialize(), $bbcodes)); } catch (\Exception $e) { $this->logger->error('Error fetching enabled BBCodes: ' . $e->getMessage()); @@ -70,15 +74,17 @@ class BBCodeController extends OCSController { /** * Get builtin BBCodes (for help dialog) * + * @param int<1, 100> $limit Maximum number of BBCodes to return + * @param int<0, max> $offset Offset for pagination * @return DataResponse>, array{}> * * 200: Builtin BBCodes returned */ #[NoAdminRequired] #[ApiRoute(verb: 'GET', url: '/api/bbcodes/builtin')] - public function builtin(): DataResponse { + public function builtin(int $limit = 100, int $offset = 0): DataResponse { try { - $bbcodes = $this->bbCodeMapper->findAllBuiltin(); + $bbcodes = array_slice($this->bbCodeMapper->findAllBuiltin(), $offset, $limit); return new DataResponse(array_map(fn ($b) => $b->jsonSerialize(), $bbcodes)); } catch (\Exception $e) { $this->logger->error('Error fetching builtin BBCodes: ' . $e->getMessage()); diff --git a/lib/Controller/CatHeaderController.php b/lib/Controller/CatHeaderController.php index 1194bb4..310d511 100644 --- a/lib/Controller/CatHeaderController.php +++ b/lib/Controller/CatHeaderController.php @@ -34,6 +34,8 @@ class CatHeaderController extends OCSController { /** * Get all category headers * + * @param int<1, 100> $limit Maximum number of headers to return + * @param int<0, max> $offset Offset for pagination * @return DataResponse>, array{}> * * 200: Category headers returned @@ -41,9 +43,9 @@ class CatHeaderController extends OCSController { #[NoAdminRequired] #[PublicPage] #[ApiRoute(verb: 'GET', url: '/api/headers')] - public function index(): DataResponse { + public function index(int $limit = 100, int $offset = 0): DataResponse { try { - $headers = $this->catHeaderMapper->findAll(); + $headers = array_slice($this->catHeaderMapper->findAll(), $offset, $limit); return new DataResponse(array_map(fn ($h) => $h->jsonSerialize(), $headers)); } catch (\Exception $e) { $this->logger->error('Error fetching category headers: ' . $e->getMessage()); diff --git a/lib/Controller/CategoryController.php b/lib/Controller/CategoryController.php index 0f8f5b1..b8af04d 100644 --- a/lib/Controller/CategoryController.php +++ b/lib/Controller/CategoryController.php @@ -48,6 +48,8 @@ class CategoryController extends OCSController { /** * Get all category headers with nested categories * + * @param int<1, 100> $limit Maximum number of category headers to return + * @param int<0, max> $offset Offset for pagination * @return DataResponse>, array{}> * * 200: Category headers with nested categories returned @@ -55,7 +57,7 @@ class CategoryController extends OCSController { #[NoAdminRequired] #[PublicPage] #[ApiRoute(verb: 'GET', url: '/api/categories')] - public function index(): DataResponse { + public function index(int $limit = 100, int $offset = 0): DataResponse { try { // Fetch all headers, categories, and last activity timestamps $headers = $this->catHeaderMapper->findAll(); @@ -104,7 +106,7 @@ class CategoryController extends OCSController { $result[] = $headerData; } - return new DataResponse($result); + return new DataResponse(array_slice($result, $offset, $limit)); } catch (\Exception $e) { $this->logger->error('Error fetching categories: ' . $e->getMessage()); return new DataResponse(['error' => 'Failed to fetch categories'], Http::STATUS_INTERNAL_SERVER_ERROR); @@ -115,6 +117,8 @@ class CategoryController extends OCSController { * Get categories by header ID * * @param int $headerId Category header ID + * @param int<1, 100> $limit Maximum number of categories to return + * @param int<0, max> $offset Offset for pagination * @return DataResponse>, array{}> * * 200: Categories returned @@ -122,7 +126,7 @@ class CategoryController extends OCSController { #[NoAdminRequired] #[PublicPage] #[ApiRoute(verb: 'GET', url: '/api/headers/{headerId}/categories')] - public function byHeader(int $headerId): DataResponse { + public function byHeader(int $headerId, int $limit = 100, int $offset = 0): DataResponse { try { $user = $this->userSession->getUser(); $userId = $user ? $user->getUID() : null; @@ -130,7 +134,7 @@ class CategoryController extends OCSController { $categories = $this->categoryMapper->findByHeaderId($headerId); $filtered = array_filter($categories, fn ($cat) => in_array($cat->getId(), $accessibleCategoryIds, true)); - return new DataResponse(array_values(array_map(fn ($cat) => $cat->jsonSerialize(), $filtered))); + return new DataResponse(array_slice(array_values(array_map(fn ($cat) => $cat->jsonSerialize(), $filtered)), $offset, $limit)); } catch (\Exception $e) { $this->logger->error('Error fetching categories by header: ' . $e->getMessage()); return new DataResponse(['error' => 'Failed to fetch categories'], Http::STATUS_INTERNAL_SERVER_ERROR); @@ -383,6 +387,8 @@ class CategoryController extends OCSController { * Get permissions for a category * * @param int $id Category ID + * @param int<1, 100> $limit Maximum number of permissions to return + * @param int<0, max> $offset Offset for pagination * @return DataResponse>, array{}> * * 200: Permissions returned @@ -390,10 +396,10 @@ class CategoryController extends OCSController { #[NoAdminRequired] #[RequirePermission('canAccessAdminTools')] #[ApiRoute(verb: 'GET', url: '/api/categories/{id}/permissions')] - public function getPermissions(int $id): DataResponse { + public function getPermissions(int $id, int $limit = 100, int $offset = 0): DataResponse { try { // Exclude Admin role - it has hardcoded full access to all categories - $permissions = $this->categoryPermMapper->findByCategoryIdExcludingAdmin($id); + $permissions = array_slice($this->categoryPermMapper->findByCategoryIdExcludingAdmin($id), $offset, $limit); return new DataResponse(array_map(fn ($perm) => $perm->jsonSerialize(), $permissions)); } catch (\Exception $e) { $this->logger->error('Error fetching category permissions: ' . $e->getMessage()); diff --git a/lib/Controller/ForumUserController.php b/lib/Controller/ForumUserController.php index fa7a185..9af047c 100644 --- a/lib/Controller/ForumUserController.php +++ b/lib/Controller/ForumUserController.php @@ -39,6 +39,8 @@ class ForumUserController extends OCSController { /** * Get all forum users * + * @param int<1, 200> $limit Maximum number of users to return + * @param int<0, max> $offset Offset for pagination * @return DataResponse>, array{}> * * 200: Forum users returned @@ -46,9 +48,9 @@ class ForumUserController extends OCSController { #[NoAdminRequired] #[PublicPage] #[ApiRoute(verb: 'GET', url: '/api/users')] - public function index(): DataResponse { + public function index(int $limit = 200, int $offset = 0): DataResponse { try { - $users = $this->forumUserMapper->findAll(); + $users = array_slice($this->forumUserMapper->findAll(), $offset, $limit); return new DataResponse(array_map(fn ($u) => $u->jsonSerialize(), $users)); } catch (\Exception $e) { $this->logger->error('Error fetching forum users: ' . $e->getMessage()); @@ -62,7 +64,7 @@ class ForumUserController extends OCSController { * Excludes the current user from results (users cannot mention themselves) * * @param string $search Search query (matches against user ID and display name) - * @param int $limit Maximum number of results to return + * @param int<1, 100> $limit Maximum number of results to return * @return DataResponse, array{}> * * 200: Users returned diff --git a/lib/Controller/InitController.php b/lib/Controller/InitController.php index 8cc1a35..1c1c3e7 100644 --- a/lib/Controller/InitController.php +++ b/lib/Controller/InitController.php @@ -34,12 +34,14 @@ class InitController extends OCSController { /** * Get Nextcloud admin users for initialization * + * @param int<1, 100> $limit Maximum number of admin users to return + * @param int<0, max> $offset Offset for pagination * @return DataResponse, array{}> * * 200: Admin users retrieved successfully */ #[ApiRoute(verb: 'GET', url: '/api/init/admin-users')] - public function getAdminUsers(): DataResponse { + public function getAdminUsers(int $limit = 100, int $offset = 0): DataResponse { $users = []; $this->userManager->callForAllUsers(function ($user) use (&$users) { @@ -52,7 +54,7 @@ class InitController extends OCSController { } }); - return new DataResponse($users); + return new DataResponse(array_slice($users, $offset, $limit)); } /** diff --git a/lib/Controller/PostController.php b/lib/Controller/PostController.php index afef938..c996113 100644 --- a/lib/Controller/PostController.php +++ b/lib/Controller/PostController.php @@ -63,7 +63,7 @@ class PostController extends OCSController { * Get posts by thread * * @param int $threadId Thread ID - * @param int $limit Maximum number of posts to return + * @param int<1, 200> $limit Maximum number of posts to return * @param int $offset Offset for pagination * @return DataResponse>, array{}> * @@ -244,7 +244,7 @@ class PostController extends OCSController { * Get posts by author * * @param string $authorId Author user ID - * @param int $limit Maximum number of posts to return + * @param int<1, 200> $limit Maximum number of posts to return * @param int $offset Offset for pagination * @param string $excludeFirstPosts Whether to exclude first posts (1 or 0) * @return DataResponse>, array{}> diff --git a/lib/Controller/ReactionController.php b/lib/Controller/ReactionController.php index aba6947..3c54aec 100644 --- a/lib/Controller/ReactionController.php +++ b/lib/Controller/ReactionController.php @@ -33,15 +33,17 @@ class ReactionController extends OCSController { * Get reactions by post * * @param int $postId Post ID + * @param int<1, 200> $limit Maximum number of reactions to return + * @param int<0, max> $offset Offset for pagination * @return DataResponse>, array{}> * * 200: Reactions returned */ #[NoAdminRequired] #[ApiRoute(verb: 'GET', url: '/api/posts/{postId}/reactions')] - public function byPost(int $postId): DataResponse { + public function byPost(int $postId, int $limit = 200, int $offset = 0): DataResponse { try { - $reactions = $this->reactionMapper->findByPostId($postId); + $reactions = array_slice($this->reactionMapper->findByPostId($postId), $offset, $limit); return new DataResponse(array_map(fn ($r) => $r->jsonSerialize(), $reactions)); } catch (\Exception $e) { $this->logger->error('Error fetching reactions by post: ' . $e->getMessage()); @@ -53,15 +55,17 @@ class ReactionController extends OCSController { * Get reactions for multiple posts (for performance) * * @param list $postIds Array of post IDs + * @param int<1, 1000> $limit Maximum number of reactions to return + * @param int<0, max> $offset Offset for pagination * @return DataResponse>, array{}> * * 200: Reactions returned */ #[NoAdminRequired] #[ApiRoute(verb: 'POST', url: '/api/reactions/by-posts')] - public function byPosts(array $postIds): DataResponse { + public function byPosts(array $postIds, int $limit = 1000, int $offset = 0): DataResponse { try { - $reactions = $this->reactionMapper->findByPostIds($postIds); + $reactions = array_slice($this->reactionMapper->findByPostIds($postIds), $offset, $limit); return new DataResponse(array_map(fn ($r) => $r->jsonSerialize(), $reactions)); } catch (\Exception $e) { $this->logger->error('Error fetching reactions by posts: ' . $e->getMessage()); diff --git a/lib/Controller/RoleController.php b/lib/Controller/RoleController.php index ddf3171..f318219 100644 --- a/lib/Controller/RoleController.php +++ b/lib/Controller/RoleController.php @@ -35,6 +35,8 @@ class RoleController extends OCSController { /** * Get all roles * + * @param int<1, 100> $limit Maximum number of roles to return + * @param int<0, max> $offset Offset for pagination * @return DataResponse>, array{}> * * 200: Roles returned @@ -42,9 +44,9 @@ class RoleController extends OCSController { #[NoAdminRequired] #[RequirePermission('canAccessAdminTools')] #[ApiRoute(verb: 'GET', url: '/api/roles')] - public function index(): DataResponse { + public function index(int $limit = 100, int $offset = 0): DataResponse { try { - $roles = $this->roleMapper->findAll(); + $roles = array_slice($this->roleMapper->findAll(), $offset, $limit); return new DataResponse(array_map(fn ($role) => $role->jsonSerialize(), $roles)); } catch (\Exception $e) { $this->logger->error('Error fetching roles: ' . $e->getMessage()); @@ -236,6 +238,8 @@ class RoleController extends OCSController { * Get permissions for a role * * @param int $id Role ID + * @param int<1, 100> $limit Maximum number of permissions to return + * @param int<0, max> $offset Offset for pagination * @return DataResponse>, array{}> * * 200: Permissions returned @@ -243,9 +247,9 @@ class RoleController extends OCSController { #[NoAdminRequired] #[RequirePermission('canAccessAdminTools')] #[ApiRoute(verb: 'GET', url: '/api/roles/{id}/permissions')] - public function getPermissions(int $id): DataResponse { + public function getPermissions(int $id, int $limit = 100, int $offset = 0): DataResponse { try { - $permissions = $this->categoryPermMapper->findByRoleId($id); + $permissions = array_slice($this->categoryPermMapper->findByRoleId($id), $offset, $limit); return new DataResponse(array_map(fn ($perm) => $perm->jsonSerialize(), $permissions)); } catch (\Exception $e) { $this->logger->error('Error fetching role permissions: ' . $e->getMessage()); diff --git a/lib/Controller/SearchController.php b/lib/Controller/SearchController.php index 49d8c4d..aecfc16 100644 --- a/lib/Controller/SearchController.php +++ b/lib/Controller/SearchController.php @@ -46,7 +46,7 @@ class SearchController extends OCSController { * @param bool $searchThreads Include threads in search (title + first post content) * @param bool $searchPosts Include reply posts in search * @param int|null $categoryId Optional category ID filter - * @param int $limit Maximum results per type + * @param int<1, 200> $limit Maximum results per type * @param int $offset Results offset per type * @return DataResponse, posts: array, threadCount: int, postCount: int, query: string}, array{}> * diff --git a/lib/Controller/TeamController.php b/lib/Controller/TeamController.php index 8740a17..3957bba 100644 --- a/lib/Controller/TeamController.php +++ b/lib/Controller/TeamController.php @@ -46,6 +46,8 @@ class TeamController extends OCSController { /** * List all available teams (circles) * + * @param int<1, 100> $limit Maximum number of teams to return + * @param int<0, max> $offset Offset for pagination * @return DataResponse, array{}> * * 200: Teams returned @@ -53,7 +55,7 @@ class TeamController extends OCSController { #[NoAdminRequired] #[RequirePermission('canAccessAdminTools')] #[ApiRoute(verb: 'GET', url: '/api/teams')] - public function index(): DataResponse { + public function index(int $limit = 100, int $offset = 0): DataResponse { $circlesManager = $this->getCirclesManager(); if ($circlesManager === null) { return new DataResponse(['error' => 'Teams app is not available'], Http::STATUS_SERVICE_UNAVAILABLE); @@ -95,7 +97,7 @@ class TeamController extends OCSController { return strcasecmp($a['displayName'], $b['displayName']); }); - return new DataResponse(array_values($result)); + return new DataResponse(array_slice(array_values($result), $offset, $limit)); } catch (\Exception $e) { $this->logger->error('Error fetching teams: ' . $e->getMessage()); return new DataResponse(['error' => 'Failed to fetch teams'], Http::STATUS_INTERNAL_SERVER_ERROR); @@ -108,6 +110,8 @@ class TeamController extends OCSController { * Get category permissions for a team (circle) * * @param string $id Team/circle single ID + * @param int<1, 100> $limit Maximum number of permissions to return + * @param int<0, max> $offset Offset for pagination * @return DataResponse>, array{}> * * 200: Permissions returned @@ -115,9 +119,9 @@ class TeamController extends OCSController { #[NoAdminRequired] #[RequirePermission('canAccessAdminTools')] #[ApiRoute(verb: 'GET', url: '/api/teams/{id}/permissions')] - public function getPermissions(string $id): DataResponse { + public function getPermissions(string $id, int $limit = 100, int $offset = 0): DataResponse { try { - $permissions = $this->categoryPermMapper->findByTeamId($id); + $permissions = array_slice($this->categoryPermMapper->findByTeamId($id), $offset, $limit); return new DataResponse(array_map(fn ($perm) => $perm->jsonSerialize(), $permissions)); } catch (\Exception $e) { $this->logger->error('Error fetching team permissions: ' . $e->getMessage()); diff --git a/lib/Controller/ThreadController.php b/lib/Controller/ThreadController.php index 0d72800..1d12f86 100644 --- a/lib/Controller/ThreadController.php +++ b/lib/Controller/ThreadController.php @@ -58,6 +58,8 @@ class ThreadController extends OCSController { /** * Get all threads * + * @param int<1, 200> $limit Maximum number of threads to return + * @param int<0, max> $offset Offset for pagination * @return DataResponse>, array{}> * * 200: Threads returned @@ -65,9 +67,9 @@ class ThreadController extends OCSController { #[NoAdminRequired] #[PublicPage] #[ApiRoute(verb: 'GET', url: '/api/threads')] - public function index(): DataResponse { + public function index(int $limit = 200, int $offset = 0): DataResponse { try { - $threads = $this->threadMapper->findAll(); + $threads = array_slice($this->threadMapper->findAll(), $offset, $limit); // Extract unique author IDs $authorIds = array_unique(array_map(fn ($t) => $t->getAuthorId(), $threads)); @@ -89,7 +91,7 @@ class ThreadController extends OCSController { * Get threads by category * * @param int $categoryId Category ID - * @param int $limit Maximum number of threads to return + * @param int<1, 200> $limit Maximum number of threads to return * @param int $offset Offset for pagination * @return DataResponse>, array{}> * @@ -176,7 +178,7 @@ class ThreadController extends OCSController { * Get threads by author * * @param string $authorId Author user ID - * @param int $limit Maximum number of threads to return + * @param int<1, 200> $limit Maximum number of threads to return * @param int $offset Offset for pagination * @return DataResponse>, array{}> * diff --git a/lib/Controller/ThreadSubscriptionController.php b/lib/Controller/ThreadSubscriptionController.php index d29b7e9..9ab3d3f 100644 --- a/lib/Controller/ThreadSubscriptionController.php +++ b/lib/Controller/ThreadSubscriptionController.php @@ -109,20 +109,22 @@ class ThreadSubscriptionController extends OCSController { /** * Get all threads the current user is subscribed to * + * @param int<1, 200> $limit Maximum number of subscriptions to return + * @param int<0, max> $offset Offset for pagination * @return DataResponse>, array{}> * * 200: Thread subscriptions returned */ #[NoAdminRequired] #[ApiRoute(verb: 'GET', url: '/api/thread-subscriptions')] - public function getUserSubscriptions(): DataResponse { + public function getUserSubscriptions(int $limit = 200, int $offset = 0): DataResponse { try { $user = $this->userSession->getUser(); if (!$user) { return new DataResponse(['error' => 'User not authenticated'], Http::STATUS_UNAUTHORIZED); } - $subscriptions = $this->subscriptionMapper->findByUserId($user->getUID()); + $subscriptions = array_slice($this->subscriptionMapper->findByUserId($user->getUID()), $offset, $limit); return new DataResponse(array_map(fn ($r) => $r->jsonSerialize(), $subscriptions)); } catch (\Exception $e) { $this->logger->error('Error fetching user thread subscriptions: ' . $e->getMessage()); diff --git a/lib/Controller/UserRoleController.php b/lib/Controller/UserRoleController.php index f911d0f..72cc7ac 100644 --- a/lib/Controller/UserRoleController.php +++ b/lib/Controller/UserRoleController.php @@ -38,6 +38,8 @@ class UserRoleController extends OCSController { * Returns Role objects enriched with userRoleId for managing role assignments. * * @param string $userId Nextcloud user ID + * @param int<1, 100> $limit Maximum number of role assignments to return + * @param int<0, max> $offset Offset for pagination * @return DataResponse>, array{}> * * 200: User role assignments returned @@ -45,7 +47,7 @@ class UserRoleController extends OCSController { #[NoAdminRequired] #[RequirePermission('canAccessAdminTools')] #[ApiRoute(verb: 'GET', url: '/api/users/{userId}/roles')] - public function byUser(string $userId): DataResponse { + public function byUser(string $userId, int $limit = 100, int $offset = 0): DataResponse { try { // Get UserRole entities to get the userRoleId for delete operations $userRoles = $this->userRoleMapper->findByUserId($userId); @@ -64,7 +66,7 @@ class UserRoleController extends OCSController { } } - return new DataResponse($result); + return new DataResponse(array_slice($result, $offset, $limit)); } catch (\Exception $e) { $this->logger->error('Error fetching user roles: ' . $e->getMessage()); return new DataResponse(['error' => 'Failed to fetch user roles'], Http::STATUS_INTERNAL_SERVER_ERROR); @@ -75,6 +77,8 @@ class UserRoleController extends OCSController { * Get users with a specific role * * @param int $roleId Role ID + * @param int<1, 200> $limit Maximum number of users to return + * @param int<0, max> $offset Offset for pagination * @return DataResponse>, array{}> * * 200: User roles returned @@ -82,9 +86,9 @@ class UserRoleController extends OCSController { #[NoAdminRequired] #[RequirePermission('canAccessAdminTools')] #[ApiRoute(verb: 'GET', url: '/api/roles/{roleId}/users')] - public function byRole(int $roleId): DataResponse { + public function byRole(int $roleId, int $limit = 200, int $offset = 0): DataResponse { try { - $userRoles = $this->userRoleMapper->findByRoleId($roleId); + $userRoles = array_slice($this->userRoleMapper->findByRoleId($roleId), $offset, $limit); return new DataResponse(array_map(fn ($ur) => $ur->jsonSerialize(), $userRoles)); } catch (\Exception $e) { $this->logger->error('Error fetching users by role: ' . $e->getMessage()); diff --git a/openapi-administration.json b/openapi-administration.json index da79d6a..a758ff0 100644 --- a/openapi-administration.json +++ b/openapi-administration.json @@ -485,6 +485,29 @@ } ], "parameters": [ + { + "name": "limit", + "in": "query", + "description": "Maximum number of admin users to return", + "schema": { + "type": "integer", + "format": "int64", + "default": 100, + "minimum": 1, + "maximum": 100 + } + }, + { + "name": "offset", + "in": "query", + "description": "Offset for pagination", + "schema": { + "type": "integer", + "format": "int64", + "default": 0, + "minimum": 0 + } + }, { "name": "OCS-APIRequest", "in": "header", diff --git a/openapi-full.json b/openapi-full.json index d6c8845..5fbb4b8 100644 --- a/openapi-full.json +++ b/openapi-full.json @@ -590,6 +590,29 @@ } ], "parameters": [ + { + "name": "limit", + "in": "query", + "description": "Maximum number of BBCodes to return", + "schema": { + "type": "integer", + "format": "int64", + "default": 100, + "minimum": 1, + "maximum": 100 + } + }, + { + "name": "offset", + "in": "query", + "description": "Offset for pagination", + "schema": { + "type": "integer", + "format": "int64", + "default": 0, + "minimum": 0 + } + }, { "name": "OCS-APIRequest", "in": "header", @@ -820,6 +843,29 @@ } ], "parameters": [ + { + "name": "limit", + "in": "query", + "description": "Maximum number of BBCodes to return", + "schema": { + "type": "integer", + "format": "int64", + "default": 100, + "minimum": 1, + "maximum": 100 + } + }, + { + "name": "offset", + "in": "query", + "description": "Offset for pagination", + "schema": { + "type": "integer", + "format": "int64", + "default": 0, + "minimum": 0 + } + }, { "name": "OCS-APIRequest", "in": "header", @@ -915,6 +961,29 @@ } ], "parameters": [ + { + "name": "limit", + "in": "query", + "description": "Maximum number of BBCodes to return", + "schema": { + "type": "integer", + "format": "int64", + "default": 100, + "minimum": 1, + "maximum": 100 + } + }, + { + "name": "offset", + "in": "query", + "description": "Offset for pagination", + "schema": { + "type": "integer", + "format": "int64", + "default": 0, + "minimum": 0 + } + }, { "name": "OCS-APIRequest", "in": "header", @@ -1845,6 +1914,29 @@ } ], "parameters": [ + { + "name": "limit", + "in": "query", + "description": "Maximum number of headers to return", + "schema": { + "type": "integer", + "format": "int64", + "default": 100, + "minimum": 1, + "maximum": 100 + } + }, + { + "name": "offset", + "in": "query", + "description": "Offset for pagination", + "schema": { + "type": "integer", + "format": "int64", + "default": 0, + "minimum": 0 + } + }, { "name": "OCS-APIRequest", "in": "header", @@ -2493,6 +2585,29 @@ } ], "parameters": [ + { + "name": "limit", + "in": "query", + "description": "Maximum number of category headers to return", + "schema": { + "type": "integer", + "format": "int64", + "default": 100, + "minimum": 1, + "maximum": 100 + } + }, + { + "name": "offset", + "in": "query", + "description": "Offset for pagination", + "schema": { + "type": "integer", + "format": "int64", + "default": 0, + "minimum": 0 + } + }, { "name": "OCS-APIRequest", "in": "header", @@ -2715,6 +2830,29 @@ "format": "int64" } }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of categories to return", + "schema": { + "type": "integer", + "format": "int64", + "default": 100, + "minimum": 1, + "maximum": 100 + } + }, + { + "name": "offset", + "in": "query", + "description": "Offset for pagination", + "schema": { + "type": "integer", + "format": "int64", + "default": 0, + "minimum": 0 + } + }, { "name": "OCS-APIRequest", "in": "header", @@ -3387,6 +3525,29 @@ "format": "int64" } }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of permissions to return", + "schema": { + "type": "integer", + "format": "int64", + "default": 100, + "minimum": 1, + "maximum": 100 + } + }, + { + "name": "offset", + "in": "query", + "description": "Offset for pagination", + "schema": { + "type": "integer", + "format": "int64", + "default": 0, + "minimum": 0 + } + }, { "name": "OCS-APIRequest", "in": "header", @@ -4251,6 +4412,29 @@ } ], "parameters": [ + { + "name": "limit", + "in": "query", + "description": "Maximum number of users to return", + "schema": { + "type": "integer", + "format": "int64", + "default": 200, + "minimum": 1, + "maximum": 200 + } + }, + { + "name": "offset", + "in": "query", + "description": "Offset for pagination", + "schema": { + "type": "integer", + "format": "int64", + "default": 0, + "minimum": 0 + } + }, { "name": "OCS-APIRequest", "in": "header", @@ -4443,7 +4627,9 @@ "schema": { "type": "integer", "format": "int64", - "default": 10 + "default": 10, + "minimum": 1, + "maximum": 100 } }, { @@ -4688,7 +4874,9 @@ "schema": { "type": "integer", "format": "int64", - "default": 50 + "default": 50, + "minimum": 1, + "maximum": 200 } }, { @@ -4937,7 +5125,9 @@ "schema": { "type": "integer", "format": "int64", - "default": 50 + "default": 50, + "minimum": 1, + "maximum": 200 } }, { @@ -5627,6 +5817,29 @@ "format": "int64" } }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of reactions to return", + "schema": { + "type": "integer", + "format": "int64", + "default": 200, + "minimum": 1, + "maximum": 200 + } + }, + { + "name": "offset", + "in": "query", + "description": "Offset for pagination", + "schema": { + "type": "integer", + "format": "int64", + "default": 0, + "minimum": 0 + } + }, { "name": "OCS-APIRequest", "in": "header", @@ -5738,6 +5951,21 @@ "type": "integer", "format": "int64" } + }, + "limit": { + "type": "integer", + "format": "int64", + "default": 1000, + "description": "Maximum number of reactions to return", + "minimum": 1, + "maximum": 1000 + }, + "offset": { + "type": "integer", + "format": "int64", + "default": 0, + "description": "Offset for pagination", + "minimum": 0 } } } @@ -6752,6 +6980,29 @@ } ], "parameters": [ + { + "name": "limit", + "in": "query", + "description": "Maximum number of roles to return", + "schema": { + "type": "integer", + "format": "int64", + "default": 100, + "minimum": 1, + "maximum": 100 + } + }, + { + "name": "offset", + "in": "query", + "description": "Offset for pagination", + "schema": { + "type": "integer", + "format": "int64", + "default": 0, + "minimum": 0 + } + }, { "name": "OCS-APIRequest", "in": "header", @@ -7398,6 +7649,29 @@ "format": "int64" } }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of permissions to return", + "schema": { + "type": "integer", + "format": "int64", + "default": 100, + "minimum": 1, + "maximum": 100 + } + }, + { + "name": "offset", + "in": "query", + "description": "Offset for pagination", + "schema": { + "type": "integer", + "format": "int64", + "default": 0, + "minimum": 0 + } + }, { "name": "OCS-APIRequest", "in": "header", @@ -7691,7 +7965,9 @@ "schema": { "type": "integer", "format": "int64", - "default": 50 + "default": 50, + "minimum": 1, + "maximum": 200 } }, { @@ -7876,6 +8152,29 @@ } ], "parameters": [ + { + "name": "limit", + "in": "query", + "description": "Maximum number of teams to return", + "schema": { + "type": "integer", + "format": "int64", + "default": 100, + "minimum": 1, + "maximum": 100 + } + }, + { + "name": "offset", + "in": "query", + "description": "Offset for pagination", + "schema": { + "type": "integer", + "format": "int64", + "default": 0, + "minimum": 0 + } + }, { "name": "OCS-APIRequest", "in": "header", @@ -8002,6 +8301,29 @@ "type": "string" } }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of permissions to return", + "schema": { + "type": "integer", + "format": "int64", + "default": 100, + "minimum": 1, + "maximum": 100 + } + }, + { + "name": "offset", + "in": "query", + "description": "Offset for pagination", + "schema": { + "type": "integer", + "format": "int64", + "default": 0, + "minimum": 0 + } + }, { "name": "OCS-APIRequest", "in": "header", @@ -8249,6 +8571,29 @@ } ], "parameters": [ + { + "name": "limit", + "in": "query", + "description": "Maximum number of threads to return", + "schema": { + "type": "integer", + "format": "int64", + "default": 200, + "minimum": 1, + "maximum": 200 + } + }, + { + "name": "offset", + "in": "query", + "description": "Offset for pagination", + "schema": { + "type": "integer", + "format": "int64", + "default": 0, + "minimum": 0 + } + }, { "name": "OCS-APIRequest", "in": "header", @@ -8454,7 +8799,9 @@ "schema": { "type": "integer", "format": "int64", - "default": 50 + "default": 50, + "minimum": 1, + "maximum": 200 } }, { @@ -8685,7 +9032,9 @@ "schema": { "type": "integer", "format": "int64", - "default": 50 + "default": 50, + "minimum": 1, + "maximum": 200 } }, { @@ -9843,6 +10192,29 @@ } ], "parameters": [ + { + "name": "limit", + "in": "query", + "description": "Maximum number of subscriptions to return", + "schema": { + "type": "integer", + "format": "int64", + "default": 200, + "minimum": 1, + "maximum": 200 + } + }, + { + "name": "offset", + "in": "query", + "description": "Offset for pagination", + "schema": { + "type": "integer", + "format": "int64", + "default": 0, + "minimum": 0 + } + }, { "name": "OCS-APIRequest", "in": "header", @@ -10239,6 +10611,29 @@ "type": "string" } }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of role assignments to return", + "schema": { + "type": "integer", + "format": "int64", + "default": 100, + "minimum": 1, + "maximum": 100 + } + }, + { + "name": "offset", + "in": "query", + "description": "Offset for pagination", + "schema": { + "type": "integer", + "format": "int64", + "default": 0, + "minimum": 0 + } + }, { "name": "OCS-APIRequest", "in": "header", @@ -10344,6 +10739,29 @@ "format": "int64" } }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of users to return", + "schema": { + "type": "integer", + "format": "int64", + "default": 200, + "minimum": 1, + "maximum": 200 + } + }, + { + "name": "offset", + "in": "query", + "description": "Offset for pagination", + "schema": { + "type": "integer", + "format": "int64", + "default": 0, + "minimum": 0 + } + }, { "name": "OCS-APIRequest", "in": "header", @@ -11199,6 +11617,29 @@ } ], "parameters": [ + { + "name": "limit", + "in": "query", + "description": "Maximum number of admin users to return", + "schema": { + "type": "integer", + "format": "int64", + "default": 100, + "minimum": 1, + "maximum": 100 + } + }, + { + "name": "offset", + "in": "query", + "description": "Offset for pagination", + "schema": { + "type": "integer", + "format": "int64", + "default": 0, + "minimum": 0 + } + }, { "name": "OCS-APIRequest", "in": "header", diff --git a/openapi.json b/openapi.json index 1b1a926..40d7ee9 100644 --- a/openapi.json +++ b/openapi.json @@ -590,6 +590,29 @@ } ], "parameters": [ + { + "name": "limit", + "in": "query", + "description": "Maximum number of BBCodes to return", + "schema": { + "type": "integer", + "format": "int64", + "default": 100, + "minimum": 1, + "maximum": 100 + } + }, + { + "name": "offset", + "in": "query", + "description": "Offset for pagination", + "schema": { + "type": "integer", + "format": "int64", + "default": 0, + "minimum": 0 + } + }, { "name": "OCS-APIRequest", "in": "header", @@ -820,6 +843,29 @@ } ], "parameters": [ + { + "name": "limit", + "in": "query", + "description": "Maximum number of BBCodes to return", + "schema": { + "type": "integer", + "format": "int64", + "default": 100, + "minimum": 1, + "maximum": 100 + } + }, + { + "name": "offset", + "in": "query", + "description": "Offset for pagination", + "schema": { + "type": "integer", + "format": "int64", + "default": 0, + "minimum": 0 + } + }, { "name": "OCS-APIRequest", "in": "header", @@ -915,6 +961,29 @@ } ], "parameters": [ + { + "name": "limit", + "in": "query", + "description": "Maximum number of BBCodes to return", + "schema": { + "type": "integer", + "format": "int64", + "default": 100, + "minimum": 1, + "maximum": 100 + } + }, + { + "name": "offset", + "in": "query", + "description": "Offset for pagination", + "schema": { + "type": "integer", + "format": "int64", + "default": 0, + "minimum": 0 + } + }, { "name": "OCS-APIRequest", "in": "header", @@ -1845,6 +1914,29 @@ } ], "parameters": [ + { + "name": "limit", + "in": "query", + "description": "Maximum number of headers to return", + "schema": { + "type": "integer", + "format": "int64", + "default": 100, + "minimum": 1, + "maximum": 100 + } + }, + { + "name": "offset", + "in": "query", + "description": "Offset for pagination", + "schema": { + "type": "integer", + "format": "int64", + "default": 0, + "minimum": 0 + } + }, { "name": "OCS-APIRequest", "in": "header", @@ -2493,6 +2585,29 @@ } ], "parameters": [ + { + "name": "limit", + "in": "query", + "description": "Maximum number of category headers to return", + "schema": { + "type": "integer", + "format": "int64", + "default": 100, + "minimum": 1, + "maximum": 100 + } + }, + { + "name": "offset", + "in": "query", + "description": "Offset for pagination", + "schema": { + "type": "integer", + "format": "int64", + "default": 0, + "minimum": 0 + } + }, { "name": "OCS-APIRequest", "in": "header", @@ -2715,6 +2830,29 @@ "format": "int64" } }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of categories to return", + "schema": { + "type": "integer", + "format": "int64", + "default": 100, + "minimum": 1, + "maximum": 100 + } + }, + { + "name": "offset", + "in": "query", + "description": "Offset for pagination", + "schema": { + "type": "integer", + "format": "int64", + "default": 0, + "minimum": 0 + } + }, { "name": "OCS-APIRequest", "in": "header", @@ -3387,6 +3525,29 @@ "format": "int64" } }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of permissions to return", + "schema": { + "type": "integer", + "format": "int64", + "default": 100, + "minimum": 1, + "maximum": 100 + } + }, + { + "name": "offset", + "in": "query", + "description": "Offset for pagination", + "schema": { + "type": "integer", + "format": "int64", + "default": 0, + "minimum": 0 + } + }, { "name": "OCS-APIRequest", "in": "header", @@ -4251,6 +4412,29 @@ } ], "parameters": [ + { + "name": "limit", + "in": "query", + "description": "Maximum number of users to return", + "schema": { + "type": "integer", + "format": "int64", + "default": 200, + "minimum": 1, + "maximum": 200 + } + }, + { + "name": "offset", + "in": "query", + "description": "Offset for pagination", + "schema": { + "type": "integer", + "format": "int64", + "default": 0, + "minimum": 0 + } + }, { "name": "OCS-APIRequest", "in": "header", @@ -4443,7 +4627,9 @@ "schema": { "type": "integer", "format": "int64", - "default": 10 + "default": 10, + "minimum": 1, + "maximum": 100 } }, { @@ -4688,7 +4874,9 @@ "schema": { "type": "integer", "format": "int64", - "default": 50 + "default": 50, + "minimum": 1, + "maximum": 200 } }, { @@ -4937,7 +5125,9 @@ "schema": { "type": "integer", "format": "int64", - "default": 50 + "default": 50, + "minimum": 1, + "maximum": 200 } }, { @@ -5627,6 +5817,29 @@ "format": "int64" } }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of reactions to return", + "schema": { + "type": "integer", + "format": "int64", + "default": 200, + "minimum": 1, + "maximum": 200 + } + }, + { + "name": "offset", + "in": "query", + "description": "Offset for pagination", + "schema": { + "type": "integer", + "format": "int64", + "default": 0, + "minimum": 0 + } + }, { "name": "OCS-APIRequest", "in": "header", @@ -5738,6 +5951,21 @@ "type": "integer", "format": "int64" } + }, + "limit": { + "type": "integer", + "format": "int64", + "default": 1000, + "description": "Maximum number of reactions to return", + "minimum": 1, + "maximum": 1000 + }, + "offset": { + "type": "integer", + "format": "int64", + "default": 0, + "description": "Offset for pagination", + "minimum": 0 } } } @@ -6752,6 +6980,29 @@ } ], "parameters": [ + { + "name": "limit", + "in": "query", + "description": "Maximum number of roles to return", + "schema": { + "type": "integer", + "format": "int64", + "default": 100, + "minimum": 1, + "maximum": 100 + } + }, + { + "name": "offset", + "in": "query", + "description": "Offset for pagination", + "schema": { + "type": "integer", + "format": "int64", + "default": 0, + "minimum": 0 + } + }, { "name": "OCS-APIRequest", "in": "header", @@ -7398,6 +7649,29 @@ "format": "int64" } }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of permissions to return", + "schema": { + "type": "integer", + "format": "int64", + "default": 100, + "minimum": 1, + "maximum": 100 + } + }, + { + "name": "offset", + "in": "query", + "description": "Offset for pagination", + "schema": { + "type": "integer", + "format": "int64", + "default": 0, + "minimum": 0 + } + }, { "name": "OCS-APIRequest", "in": "header", @@ -7691,7 +7965,9 @@ "schema": { "type": "integer", "format": "int64", - "default": 50 + "default": 50, + "minimum": 1, + "maximum": 200 } }, { @@ -7876,6 +8152,29 @@ } ], "parameters": [ + { + "name": "limit", + "in": "query", + "description": "Maximum number of teams to return", + "schema": { + "type": "integer", + "format": "int64", + "default": 100, + "minimum": 1, + "maximum": 100 + } + }, + { + "name": "offset", + "in": "query", + "description": "Offset for pagination", + "schema": { + "type": "integer", + "format": "int64", + "default": 0, + "minimum": 0 + } + }, { "name": "OCS-APIRequest", "in": "header", @@ -8002,6 +8301,29 @@ "type": "string" } }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of permissions to return", + "schema": { + "type": "integer", + "format": "int64", + "default": 100, + "minimum": 1, + "maximum": 100 + } + }, + { + "name": "offset", + "in": "query", + "description": "Offset for pagination", + "schema": { + "type": "integer", + "format": "int64", + "default": 0, + "minimum": 0 + } + }, { "name": "OCS-APIRequest", "in": "header", @@ -8249,6 +8571,29 @@ } ], "parameters": [ + { + "name": "limit", + "in": "query", + "description": "Maximum number of threads to return", + "schema": { + "type": "integer", + "format": "int64", + "default": 200, + "minimum": 1, + "maximum": 200 + } + }, + { + "name": "offset", + "in": "query", + "description": "Offset for pagination", + "schema": { + "type": "integer", + "format": "int64", + "default": 0, + "minimum": 0 + } + }, { "name": "OCS-APIRequest", "in": "header", @@ -8454,7 +8799,9 @@ "schema": { "type": "integer", "format": "int64", - "default": 50 + "default": 50, + "minimum": 1, + "maximum": 200 } }, { @@ -8685,7 +9032,9 @@ "schema": { "type": "integer", "format": "int64", - "default": 50 + "default": 50, + "minimum": 1, + "maximum": 200 } }, { @@ -9843,6 +10192,29 @@ } ], "parameters": [ + { + "name": "limit", + "in": "query", + "description": "Maximum number of subscriptions to return", + "schema": { + "type": "integer", + "format": "int64", + "default": 200, + "minimum": 1, + "maximum": 200 + } + }, + { + "name": "offset", + "in": "query", + "description": "Offset for pagination", + "schema": { + "type": "integer", + "format": "int64", + "default": 0, + "minimum": 0 + } + }, { "name": "OCS-APIRequest", "in": "header", @@ -10239,6 +10611,29 @@ "type": "string" } }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of role assignments to return", + "schema": { + "type": "integer", + "format": "int64", + "default": 100, + "minimum": 1, + "maximum": 100 + } + }, + { + "name": "offset", + "in": "query", + "description": "Offset for pagination", + "schema": { + "type": "integer", + "format": "int64", + "default": 0, + "minimum": 0 + } + }, { "name": "OCS-APIRequest", "in": "header", @@ -10344,6 +10739,29 @@ "format": "int64" } }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of users to return", + "schema": { + "type": "integer", + "format": "int64", + "default": 200, + "minimum": 1, + "maximum": 200 + } + }, + { + "name": "offset", + "in": "query", + "description": "Offset for pagination", + "schema": { + "type": "integer", + "format": "int64", + "default": 0, + "minimum": 0 + } + }, { "name": "OCS-APIRequest", "in": "header",