Support query limit and offset in list repos API

This commit is contained in:
Hemachandar
2025-11-25 19:24:30 +05:30
parent c6e4afdb49
commit 1ed3cf0e59
3 changed files with 209 additions and 59 deletions
+14 -5
View File
@@ -31,7 +31,10 @@ use Utopia\Database\Helpers\Permission;
use Utopia\Database\Helpers\Role;
use Utopia\Database\Query;
use Utopia\Database\Validator\Authorization;
use Utopia\Database\Validator\Queries;
use Utopia\Database\Validator\Query\Cursor;
use Utopia\Database\Validator\Query\Limit;
use Utopia\Database\Validator\Query\Offset;
use Utopia\Detector\Detection\Framework\Analog;
use Utopia\Detector\Detection\Framework\Angular;
use Utopia\Detector\Detection\Framework\Astro;
@@ -1033,10 +1036,11 @@ App::get('/v1/vcs/github/installations/:installationId/providerRepositories')
->param('installationId', '', new Text(256), 'Installation Id')
->param('type', '', new WhiteList(['runtime', 'framework']), 'Detector type. Must be one of the following: runtime, framework')
->param('search', '', new Text(256), 'Search term to filter your list results. Max length: 256 chars.', true)
->param('queries', [], new Queries([new Limit(), new Offset()]), 'Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/queries). Only supported methods are limit and offset', true)
->inject('gitHub')
->inject('response')
->inject('dbForPlatform')
->action(function (string $installationId, string $type, string $search, GitHub $github, Response $response, Database $dbForPlatform) {
->action(function (string $installationId, string $type, string $search, array $queries, GitHub $github, Response $response, Database $dbForPlatform) {
if (empty($search)) {
$search = "";
}
@@ -1052,11 +1056,16 @@ App::get('/v1/vcs/github/installations/:installationId/providerRepositories')
$githubAppId = System::getEnv('_APP_VCS_GITHUB_APP_ID');
$github->initializeVariables($providerInstallationId, $privateKey, $githubAppId);
$page = 1;
$perPage = 4;
$queries = Query::parseQueries($queries);
$limitQuery = array_filter($queries, fn ($query) => $query->getMethod() === Query::TYPE_LIMIT);
$offsetQuery = array_filter($queries, fn ($query) => $query->getMethod() === Query::TYPE_OFFSET);
$limit = !empty($limitQuery) ? $limitQuery[0]->getValue() : 4;
$offset = !empty($offsetQuery) ? $offsetQuery[0]->getValue() : 0;
$page = ($offset / $limit) + 1;
$owner = $github->getOwnerName($providerInstallationId);
$repos = $github->searchRepositories($owner, $page, $perPage, $search);
['items' => $repos, 'total' => $total] = $github->searchRepositories($owner, $page, $limit, $search);
$repos = \array_map(function ($repo) use ($installation) {
$repo['id'] = \strval($repo['id'] ?? '');
@@ -1228,7 +1237,7 @@ App::get('/v1/vcs/github/installations/:installationId/providerRepositories')
$response->dynamic(new Document([
$type === 'framework' ? 'frameworkProviderRepositories' : 'runtimeProviderRepositories' => $repos,
'total' => \count($repos),
'total' => $total,
]), ($type === 'framework') ? Response::MODEL_PROVIDER_REPOSITORY_FRAMEWORK_LIST : Response::MODEL_PROVIDER_REPOSITORY_RUNTIME_LIST);
});
+8 -2
View File
@@ -74,7 +74,7 @@
"utopia-php/swoole": "0.8.*",
"utopia-php/system": "0.9.*",
"utopia-php/telemetry": "0.1.*",
"utopia-php/vcs": "0.12.*",
"utopia-php/vcs": "dev-ser-504 as 0.12.99",
"utopia-php/websocket": "0.3.*",
"matomo/device-detector": "6.4.*",
"dragonmantank/cron-expression": "3.4.*",
@@ -107,5 +107,11 @@
"php-http/discovery": true,
"tbachert/spi": true
}
}
},
"repositories": [
{
"type": "vcs",
"url": "https://github.com/utopia-php/vcs"
}
]
}
Generated
+187 -52
View File
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "1d3d4b19a835b3be79a63146fcdd389b",
"content-hash": "c5355d781be40fb38cc8eb0a265116ad",
"packages": [
{
"name": "adhocore/jwt",
@@ -1236,16 +1236,16 @@
},
{
"name": "open-telemetry/api",
"version": "1.7.0",
"version": "1.7.1",
"source": {
"type": "git",
"url": "https://github.com/opentelemetry-php/api.git",
"reference": "610b79ad9d6d97e8368bcb6c4d42394fbb87b522"
"reference": "45bda7efa8fcdd9bdb0daa2f26c8e31f062f49d4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/opentelemetry-php/api/zipball/610b79ad9d6d97e8368bcb6c4d42394fbb87b522",
"reference": "610b79ad9d6d97e8368bcb6c4d42394fbb87b522",
"url": "https://api.github.com/repos/opentelemetry-php/api/zipball/45bda7efa8fcdd9bdb0daa2f26c8e31f062f49d4",
"reference": "45bda7efa8fcdd9bdb0daa2f26c8e31f062f49d4",
"shasum": ""
},
"require": {
@@ -1265,7 +1265,7 @@
]
},
"branch-alias": {
"dev-main": "1.7.x-dev"
"dev-main": "1.8.x-dev"
}
},
"autoload": {
@@ -1298,11 +1298,11 @@
],
"support": {
"chat": "https://app.slack.com/client/T08PSQ7BQ/C01NFPCV44V",
"docs": "https://opentelemetry.io/docs/php",
"docs": "https://opentelemetry.io/docs/languages/php",
"issues": "https://github.com/open-telemetry/opentelemetry-php/issues",
"source": "https://github.com/open-telemetry/opentelemetry-php"
},
"time": "2025-10-02T23:44:28+00:00"
"time": "2025-10-19T10:49:48+00:00"
},
{
"name": "open-telemetry/context",
@@ -1365,16 +1365,16 @@
},
{
"name": "open-telemetry/exporter-otlp",
"version": "1.3.2",
"version": "1.3.3",
"source": {
"type": "git",
"url": "https://github.com/opentelemetry-php/exporter-otlp.git",
"reference": "196f3a1dbce3b2c0f8110d164232c11ac00ddbb2"
"reference": "07b02bc71838463f6edcc78d3485c04b48fb263d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/opentelemetry-php/exporter-otlp/zipball/196f3a1dbce3b2c0f8110d164232c11ac00ddbb2",
"reference": "196f3a1dbce3b2c0f8110d164232c11ac00ddbb2",
"url": "https://api.github.com/repos/opentelemetry-php/exporter-otlp/zipball/07b02bc71838463f6edcc78d3485c04b48fb263d",
"reference": "07b02bc71838463f6edcc78d3485c04b48fb263d",
"shasum": ""
},
"require": {
@@ -1421,11 +1421,11 @@
],
"support": {
"chat": "https://app.slack.com/client/T08PSQ7BQ/C01NFPCV44V",
"docs": "https://opentelemetry.io/docs/php",
"docs": "https://opentelemetry.io/docs/languages/php",
"issues": "https://github.com/open-telemetry/opentelemetry-php/issues",
"source": "https://github.com/open-telemetry/opentelemetry-php"
},
"time": "2025-06-16T00:24:51+00:00"
"time": "2025-11-13T08:04:37+00:00"
},
{
"name": "open-telemetry/gen-otlp-protobuf",
@@ -1492,16 +1492,16 @@
},
{
"name": "open-telemetry/sdk",
"version": "1.9.0",
"version": "1.10.0",
"source": {
"type": "git",
"url": "https://github.com/opentelemetry-php/sdk.git",
"reference": "8986bcbcbea79cb1ba9e91c1d621541ad63d6b3e"
"reference": "3dfc3d1ad729ec7eb25f1b9a4ae39fe779affa99"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/opentelemetry-php/sdk/zipball/8986bcbcbea79cb1ba9e91c1d621541ad63d6b3e",
"reference": "8986bcbcbea79cb1ba9e91c1d621541ad63d6b3e",
"url": "https://api.github.com/repos/opentelemetry-php/sdk/zipball/3dfc3d1ad729ec7eb25f1b9a4ae39fe779affa99",
"reference": "3dfc3d1ad729ec7eb25f1b9a4ae39fe779affa99",
"shasum": ""
},
"require": {
@@ -1581,11 +1581,11 @@
],
"support": {
"chat": "https://app.slack.com/client/T08PSQ7BQ/C01NFPCV44V",
"docs": "https://opentelemetry.io/docs/php",
"docs": "https://opentelemetry.io/docs/languages/php",
"issues": "https://github.com/open-telemetry/opentelemetry-php/issues",
"source": "https://github.com/open-telemetry/opentelemetry-php"
},
"time": "2025-10-02T23:44:28+00:00"
"time": "2025-11-25T10:59:15+00:00"
},
{
"name": "open-telemetry/sem-conv",
@@ -3941,6 +3941,54 @@
},
"time": "2025-11-24T15:52:51+00:00"
},
{
"name": "utopia-php/di",
"version": "0.1.0",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/di.git",
"reference": "22490c95f7ac3898ed1c33f1b1b5dd577305ee31"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/utopia-php/di/zipball/22490c95f7ac3898ed1c33f1b1b5dd577305ee31",
"reference": "22490c95f7ac3898ed1c33f1b1b5dd577305ee31",
"shasum": ""
},
"require": {
"php": ">=8.2"
},
"require-dev": {
"laravel/pint": "^1.2",
"phpbench/phpbench": "^1.2",
"phpstan/phpstan": "^1.10",
"phpunit/phpunit": "^9.5.25",
"swoole/ide-helper": "4.8.3"
},
"type": "library",
"autoload": {
"psr-4": {
"Utopia\\": "src/",
"Tests\\E2E\\": "tests/e2e"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"description": "A simple and lite library for managing dependency injections",
"keywords": [
"framework",
"http",
"php",
"upf"
],
"support": {
"issues": "https://github.com/utopia-php/di/issues",
"source": "https://github.com/utopia-php/di/tree/0.1.0"
},
"time": "2024-08-08T14:35:19+00:00"
},
{
"name": "utopia-php/dns",
"version": "1.1.3",
@@ -4208,28 +4256,33 @@
},
{
"name": "utopia-php/framework",
"version": "0.33.30",
"version": "0.33.31",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/http.git",
"reference": "07cf699a7c47bd1a03b4da1812f1719a66b3c924"
"reference": "cb01940ffe620b3d09f934dc2b8c72c2406309e7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/utopia-php/http/zipball/07cf699a7c47bd1a03b4da1812f1719a66b3c924",
"reference": "07cf699a7c47bd1a03b4da1812f1719a66b3c924",
"url": "https://api.github.com/repos/utopia-php/http/zipball/cb01940ffe620b3d09f934dc2b8c72c2406309e7",
"reference": "cb01940ffe620b3d09f934dc2b8c72c2406309e7",
"shasum": ""
},
"require": {
"ext-swoole": "*",
"php": ">=8.1",
"utopia-php/compression": "0.1.*",
"utopia-php/telemetry": "0.1.*"
"utopia-php/servers": "0.2.*",
"utopia-php/telemetry": "0.1.*",
"utopia-php/validators": "0.0.*"
},
"require-dev": {
"ext-xdebug": "*",
"laravel/pint": "^1.2",
"phpbench/phpbench": "^1.2",
"phpstan/phpstan": "^1.10",
"phpunit/phpunit": "^9.5.25"
"phpstan/phpstan": "1.*",
"phpunit/phpunit": "^9.5.25",
"swoole/ide-helper": "4.8.3"
},
"type": "library",
"autoload": {
@@ -4241,17 +4294,18 @@
"license": [
"MIT"
],
"description": "A simple, light and advanced PHP framework",
"description": "A simple, light and advanced PHP HTTP framework",
"keywords": [
"framework",
"http",
"php",
"upf"
],
"support": {
"issues": "https://github.com/utopia-php/http/issues",
"source": "https://github.com/utopia-php/http/tree/0.33.30"
"source": "https://github.com/utopia-php/http/tree/1.2.0"
},
"time": "2025-11-18T12:18:00+00:00"
"time": "2025-10-21T10:53:55+00:00"
},
{
"name": "utopia-php/image",
@@ -4456,16 +4510,16 @@
},
{
"name": "utopia-php/migration",
"version": "1.3.3",
"version": "1.3.6",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/migration.git",
"reference": "731b3a963c58c30e0b2368695d57a7e8fcb7455c"
"reference": "4abe70cc242bbffebfa377e4126ee2a4a1c9ef7e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/utopia-php/migration/zipball/731b3a963c58c30e0b2368695d57a7e8fcb7455c",
"reference": "731b3a963c58c30e0b2368695d57a7e8fcb7455c",
"url": "https://api.github.com/repos/utopia-php/migration/zipball/4abe70cc242bbffebfa377e4126ee2a4a1c9ef7e",
"reference": "4abe70cc242bbffebfa377e4126ee2a4a1c9ef7e",
"shasum": ""
},
"require": {
@@ -4505,9 +4559,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/migration/issues",
"source": "https://github.com/utopia-php/migration/tree/1.3.3"
"source": "https://github.com/utopia-php/migration/tree/1.3.6"
},
"time": "2025-10-28T04:02:08+00:00"
"time": "2025-11-25T11:36:57+00:00"
},
{
"name": "utopia-php/mongo",
@@ -4893,6 +4947,60 @@
},
"time": "2021-03-10T10:45:22+00:00"
},
{
"name": "utopia-php/servers",
"version": "0.2.1",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/servers.git",
"reference": "c6ec23b0597f657020a75d4a2f8ef03177d7edaa"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/utopia-php/servers/zipball/c6ec23b0597f657020a75d4a2f8ef03177d7edaa",
"reference": "c6ec23b0597f657020a75d4a2f8ef03177d7edaa",
"shasum": ""
},
"require": {
"php": ">=8.0",
"utopia-php/di": "0.1.*",
"utopia-php/validators": "0.0.*"
},
"require-dev": {
"laravel/pint": "^0.2.3",
"phpstan/phpstan": "^1.8",
"phpunit/phpunit": "^9.5.5"
},
"type": "library",
"autoload": {
"psr-4": {
"Utopia\\Servers\\": "src/Servers"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Team Appwrite",
"email": "team@appwrite.io"
}
],
"description": "A base library for building Utopia style servers.",
"keywords": [
"framework",
"php",
"servers",
"upf",
"utopia"
],
"support": {
"issues": "https://github.com/utopia-php/servers/issues",
"source": "https://github.com/utopia-php/servers/tree/0.2.1"
},
"time": "2025-10-21T10:08:19+00:00"
},
{
"name": "utopia-php/storage",
"version": "0.18.14",
@@ -5156,16 +5264,16 @@
},
{
"name": "utopia-php/vcs",
"version": "0.12.0",
"version": "dev-ser-504",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/vcs.git",
"reference": "28457cf347972c4ec95d3ca77776a4921364a665"
"reference": "089a340a1b0e58d589b86b3935d013108db10ccd"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/utopia-php/vcs/zipball/28457cf347972c4ec95d3ca77776a4921364a665",
"reference": "28457cf347972c4ec95d3ca77776a4921364a665",
"url": "https://api.github.com/repos/utopia-php/vcs/zipball/089a340a1b0e58d589b86b3935d013108db10ccd",
"reference": "089a340a1b0e58d589b86b3935d013108db10ccd",
"shasum": ""
},
"require": {
@@ -5186,7 +5294,25 @@
"Utopia\\VCS\\": "src/VCS"
}
},
"notification-url": "https://packagist.org/downloads/",
"autoload-dev": {
"psr-4": {
"Utopia\\Tests\\": "tests/VCS"
}
},
"scripts": {
"lint": [
"./vendor/bin/pint --test --config pint.json"
],
"format": [
"./vendor/bin/pint --config pint.json"
],
"check": [
"./vendor/bin/phpstan analyse --level 8 -c phpstan.neon src tests"
],
"test": [
"./vendor/bin/phpunit --configuration phpunit.xml --debug"
]
},
"license": [
"MIT"
],
@@ -5198,10 +5324,10 @@
"vcs"
],
"support": {
"issues": "https://github.com/utopia-php/vcs/issues",
"source": "https://github.com/utopia-php/vcs/tree/0.12.0"
"source": "https://github.com/utopia-php/vcs/tree/ser-504",
"issues": "https://github.com/utopia-php/vcs/issues"
},
"time": "2025-10-22T12:58:29+00:00"
"time": "2025-11-25T13:52:52+00:00"
},
{
"name": "utopia-php/websocket",
@@ -5379,16 +5505,16 @@
"packages-dev": [
{
"name": "appwrite/sdk-generator",
"version": "1.5.8",
"version": "1.5.9",
"source": {
"type": "git",
"url": "https://github.com/appwrite/sdk-generator.git",
"reference": "05367bc4a4c3e020e9aca114ae875b626ce8fc55"
"reference": "ee434aa00a9185380b9a39bb46bf86d7104d3a93"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/05367bc4a4c3e020e9aca114ae875b626ce8fc55",
"reference": "05367bc4a4c3e020e9aca114ae875b626ce8fc55",
"url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/ee434aa00a9185380b9a39bb46bf86d7104d3a93",
"reference": "ee434aa00a9185380b9a39bb46bf86d7104d3a93",
"shasum": ""
},
"require": {
@@ -5424,9 +5550,9 @@
"description": "Appwrite PHP library for generating API SDKs for multiple programming languages and platforms",
"support": {
"issues": "https://github.com/appwrite/sdk-generator/issues",
"source": "https://github.com/appwrite/sdk-generator/tree/1.5.8"
"source": "https://github.com/appwrite/sdk-generator/tree/1.5.9"
},
"time": "2025-11-20T11:00:34+00:00"
"time": "2025-11-25T05:22:25+00:00"
},
{
"name": "doctrine/annotations",
@@ -8891,9 +9017,18 @@
"time": "2024-03-07T20:33:40+00:00"
}
],
"aliases": [],
"aliases": [
{
"package": "utopia-php/vcs",
"version": "dev-ser-504",
"alias": "0.12.99",
"alias_normalized": "0.12.99.0"
}
],
"minimum-stability": "stable",
"stability-flags": {},
"stability-flags": {
"utopia-php/vcs": 20
},
"prefer-stable": false,
"prefer-lowest": false,
"platform": {