mirror of
https://github.com/appwrite/appwrite
synced 2026-05-22 16:38:32 +00:00
Merge remote-tracking branch 'origin/1.8.x' into feat-txn
# Conflicts: # composer.lock
This commit is contained in:
commit
f4bf1756c9
36 changed files with 370 additions and 254 deletions
|
|
@ -226,7 +226,7 @@ return [
|
|||
[
|
||||
'key' => 'cli',
|
||||
'name' => 'Command Line',
|
||||
'version' => '9.0.2',
|
||||
'version' => '9.1.0',
|
||||
'url' => 'https://github.com/appwrite/sdk-for-cli',
|
||||
'package' => 'https://www.npmjs.com/package/appwrite-cli',
|
||||
'enabled' => true,
|
||||
|
|
|
|||
|
|
@ -1891,7 +1891,7 @@
|
|||
"prefs": {
|
||||
"type": "object",
|
||||
"description": "Prefs key-value JSON object.",
|
||||
"x-example": "{}"
|
||||
"x-example": "{\"language\":\"en\",\"timezone\":\"UTC\",\"darkTheme\":true}"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
|
|
@ -5020,7 +5020,7 @@
|
|||
"data": {
|
||||
"type": "object",
|
||||
"description": "Document data as JSON object.",
|
||||
"x-example": "{}"
|
||||
"x-example": "{\"username\":\"walter.obrien\",\"email\":\"walter.obrien@example.com\",\"fullName\":\"Walter O'Brien\",\"age\":30,\"isAdmin\":false}"
|
||||
},
|
||||
"permissions": {
|
||||
"type": "array",
|
||||
|
|
@ -7675,7 +7675,7 @@
|
|||
"data": {
|
||||
"type": "object",
|
||||
"description": "Row data as JSON object.",
|
||||
"x-example": "{}"
|
||||
"x-example": "{\"username\":\"walter.obrien\",\"email\":\"walter.obrien@example.com\",\"fullName\":\"Walter O'Brien\",\"age\":30,\"isAdmin\":false}"
|
||||
},
|
||||
"permissions": {
|
||||
"type": "array",
|
||||
|
|
|
|||
|
|
@ -1911,7 +1911,7 @@
|
|||
"prefs": {
|
||||
"type": "object",
|
||||
"description": "Prefs key-value JSON object.",
|
||||
"x-example": "{}"
|
||||
"x-example": "{\"language\":\"en\",\"timezone\":\"UTC\",\"darkTheme\":true}"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
|
|
@ -9575,7 +9575,7 @@
|
|||
"data": {
|
||||
"type": "object",
|
||||
"description": "Document data as JSON object.",
|
||||
"x-example": "{}"
|
||||
"x-example": "{\"username\":\"walter.obrien\",\"email\":\"walter.obrien@example.com\",\"fullName\":\"Walter O'Brien\",\"age\":30,\"isAdmin\":false}"
|
||||
},
|
||||
"permissions": {
|
||||
"type": "array",
|
||||
|
|
@ -15150,7 +15150,7 @@
|
|||
},
|
||||
"\/health\/queue\/stats-resources": {
|
||||
"get": {
|
||||
"summary": "Get stats resources queue",
|
||||
"summary": "Get stats resources queue",
|
||||
"operationId": "healthGetQueueStatsResources",
|
||||
"tags": [
|
||||
"health"
|
||||
|
|
@ -37474,7 +37474,7 @@
|
|||
"data": {
|
||||
"type": "object",
|
||||
"description": "Row data as JSON object.",
|
||||
"x-example": "{}"
|
||||
"x-example": "{\"username\":\"walter.obrien\",\"email\":\"walter.obrien@example.com\",\"fullName\":\"Walter O'Brien\",\"age\":30,\"isAdmin\":false}"
|
||||
},
|
||||
"permissions": {
|
||||
"type": "array",
|
||||
|
|
|
|||
|
|
@ -1926,7 +1926,7 @@
|
|||
"prefs": {
|
||||
"type": "object",
|
||||
"description": "Prefs key-value JSON object.",
|
||||
"x-example": "{}"
|
||||
"x-example": "{\"language\":\"en\",\"timezone\":\"UTC\",\"darkTheme\":true}"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
|
|
@ -9057,7 +9057,7 @@
|
|||
"data": {
|
||||
"type": "object",
|
||||
"description": "Document data as JSON object.",
|
||||
"x-example": "{}"
|
||||
"x-example": "{\"username\":\"walter.obrien\",\"email\":\"walter.obrien@example.com\",\"fullName\":\"Walter O'Brien\",\"age\":30,\"isAdmin\":false}"
|
||||
},
|
||||
"permissions": {
|
||||
"type": "array",
|
||||
|
|
@ -13887,7 +13887,7 @@
|
|||
},
|
||||
"\/health\/queue\/stats-resources": {
|
||||
"get": {
|
||||
"summary": "Get stats resources queue",
|
||||
"summary": "Get stats resources queue",
|
||||
"operationId": "healthGetQueueStatsResources",
|
||||
"tags": [
|
||||
"health"
|
||||
|
|
@ -27845,7 +27845,7 @@
|
|||
"data": {
|
||||
"type": "object",
|
||||
"description": "Row data as JSON object.",
|
||||
"x-example": "{}"
|
||||
"x-example": "{\"username\":\"walter.obrien\",\"email\":\"walter.obrien@example.com\",\"fullName\":\"Walter O'Brien\",\"age\":30,\"isAdmin\":false}"
|
||||
},
|
||||
"permissions": {
|
||||
"type": "array",
|
||||
|
|
|
|||
|
|
@ -1891,7 +1891,7 @@
|
|||
"prefs": {
|
||||
"type": "object",
|
||||
"description": "Prefs key-value JSON object.",
|
||||
"x-example": "{}"
|
||||
"x-example": "{\"language\":\"en\",\"timezone\":\"UTC\",\"darkTheme\":true}"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
|
|
@ -5020,7 +5020,7 @@
|
|||
"data": {
|
||||
"type": "object",
|
||||
"description": "Document data as JSON object.",
|
||||
"x-example": "{}"
|
||||
"x-example": "{\"username\":\"walter.obrien\",\"email\":\"walter.obrien@example.com\",\"fullName\":\"Walter O'Brien\",\"age\":30,\"isAdmin\":false}"
|
||||
},
|
||||
"permissions": {
|
||||
"type": "array",
|
||||
|
|
@ -7675,7 +7675,7 @@
|
|||
"data": {
|
||||
"type": "object",
|
||||
"description": "Row data as JSON object.",
|
||||
"x-example": "{}"
|
||||
"x-example": "{\"username\":\"walter.obrien\",\"email\":\"walter.obrien@example.com\",\"fullName\":\"Walter O'Brien\",\"age\":30,\"isAdmin\":false}"
|
||||
},
|
||||
"permissions": {
|
||||
"type": "array",
|
||||
|
|
|
|||
|
|
@ -1911,7 +1911,7 @@
|
|||
"prefs": {
|
||||
"type": "object",
|
||||
"description": "Prefs key-value JSON object.",
|
||||
"x-example": "{}"
|
||||
"x-example": "{\"language\":\"en\",\"timezone\":\"UTC\",\"darkTheme\":true}"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
|
|
@ -9575,7 +9575,7 @@
|
|||
"data": {
|
||||
"type": "object",
|
||||
"description": "Document data as JSON object.",
|
||||
"x-example": "{}"
|
||||
"x-example": "{\"username\":\"walter.obrien\",\"email\":\"walter.obrien@example.com\",\"fullName\":\"Walter O'Brien\",\"age\":30,\"isAdmin\":false}"
|
||||
},
|
||||
"permissions": {
|
||||
"type": "array",
|
||||
|
|
@ -15150,7 +15150,7 @@
|
|||
},
|
||||
"\/health\/queue\/stats-resources": {
|
||||
"get": {
|
||||
"summary": "Get stats resources queue",
|
||||
"summary": "Get stats resources queue",
|
||||
"operationId": "healthGetQueueStatsResources",
|
||||
"tags": [
|
||||
"health"
|
||||
|
|
@ -37474,7 +37474,7 @@
|
|||
"data": {
|
||||
"type": "object",
|
||||
"description": "Row data as JSON object.",
|
||||
"x-example": "{}"
|
||||
"x-example": "{\"username\":\"walter.obrien\",\"email\":\"walter.obrien@example.com\",\"fullName\":\"Walter O'Brien\",\"age\":30,\"isAdmin\":false}"
|
||||
},
|
||||
"permissions": {
|
||||
"type": "array",
|
||||
|
|
|
|||
|
|
@ -1926,7 +1926,7 @@
|
|||
"prefs": {
|
||||
"type": "object",
|
||||
"description": "Prefs key-value JSON object.",
|
||||
"x-example": "{}"
|
||||
"x-example": "{\"language\":\"en\",\"timezone\":\"UTC\",\"darkTheme\":true}"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
|
|
@ -9057,7 +9057,7 @@
|
|||
"data": {
|
||||
"type": "object",
|
||||
"description": "Document data as JSON object.",
|
||||
"x-example": "{}"
|
||||
"x-example": "{\"username\":\"walter.obrien\",\"email\":\"walter.obrien@example.com\",\"fullName\":\"Walter O'Brien\",\"age\":30,\"isAdmin\":false}"
|
||||
},
|
||||
"permissions": {
|
||||
"type": "array",
|
||||
|
|
@ -13887,7 +13887,7 @@
|
|||
},
|
||||
"\/health\/queue\/stats-resources": {
|
||||
"get": {
|
||||
"summary": "Get stats resources queue",
|
||||
"summary": "Get stats resources queue",
|
||||
"operationId": "healthGetQueueStatsResources",
|
||||
"tags": [
|
||||
"health"
|
||||
|
|
@ -27845,7 +27845,7 @@
|
|||
"data": {
|
||||
"type": "object",
|
||||
"description": "Row data as JSON object.",
|
||||
"x-example": "{}"
|
||||
"x-example": "{\"username\":\"walter.obrien\",\"email\":\"walter.obrien@example.com\",\"fullName\":\"Walter O'Brien\",\"age\":30,\"isAdmin\":false}"
|
||||
},
|
||||
"permissions": {
|
||||
"type": "array",
|
||||
|
|
|
|||
|
|
@ -1979,7 +1979,7 @@
|
|||
"type": "object",
|
||||
"description": "Prefs key-value JSON object.",
|
||||
"default": {},
|
||||
"x-example": "{}"
|
||||
"x-example": "{\"language\":\"en\",\"timezone\":\"UTC\",\"darkTheme\":true}"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
|
|
@ -5154,7 +5154,7 @@
|
|||
"type": "object",
|
||||
"description": "Document data as JSON object.",
|
||||
"default": [],
|
||||
"x-example": "{}"
|
||||
"x-example": "{\"username\":\"walter.obrien\",\"email\":\"walter.obrien@example.com\",\"fullName\":\"Walter O'Brien\",\"age\":30,\"isAdmin\":false}"
|
||||
},
|
||||
"permissions": {
|
||||
"type": "array",
|
||||
|
|
@ -7749,7 +7749,7 @@
|
|||
"type": "object",
|
||||
"description": "Row data as JSON object.",
|
||||
"default": [],
|
||||
"x-example": "{}"
|
||||
"x-example": "{\"username\":\"walter.obrien\",\"email\":\"walter.obrien@example.com\",\"fullName\":\"Walter O'Brien\",\"age\":30,\"isAdmin\":false}"
|
||||
},
|
||||
"permissions": {
|
||||
"type": "array",
|
||||
|
|
|
|||
|
|
@ -2009,7 +2009,7 @@
|
|||
"type": "object",
|
||||
"description": "Prefs key-value JSON object.",
|
||||
"default": {},
|
||||
"x-example": "{}"
|
||||
"x-example": "{\"language\":\"en\",\"timezone\":\"UTC\",\"darkTheme\":true}"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
|
|
@ -9680,7 +9680,7 @@
|
|||
"type": "object",
|
||||
"description": "Document data as JSON object.",
|
||||
"default": [],
|
||||
"x-example": "{}"
|
||||
"x-example": "{\"username\":\"walter.obrien\",\"email\":\"walter.obrien@example.com\",\"fullName\":\"Walter O'Brien\",\"age\":30,\"isAdmin\":false}"
|
||||
},
|
||||
"permissions": {
|
||||
"type": "array",
|
||||
|
|
@ -15186,7 +15186,7 @@
|
|||
},
|
||||
"\/health\/queue\/stats-resources": {
|
||||
"get": {
|
||||
"summary": "Get stats resources queue",
|
||||
"summary": "Get stats resources queue",
|
||||
"operationId": "healthGetQueueStatsResources",
|
||||
"consumes": [],
|
||||
"produces": [
|
||||
|
|
@ -37572,7 +37572,7 @@
|
|||
"type": "object",
|
||||
"description": "Row data as JSON object.",
|
||||
"default": [],
|
||||
"x-example": "{}"
|
||||
"x-example": "{\"username\":\"walter.obrien\",\"email\":\"walter.obrien@example.com\",\"fullName\":\"Walter O'Brien\",\"age\":30,\"isAdmin\":false}"
|
||||
},
|
||||
"permissions": {
|
||||
"type": "array",
|
||||
|
|
|
|||
|
|
@ -2023,7 +2023,7 @@
|
|||
"type": "object",
|
||||
"description": "Prefs key-value JSON object.",
|
||||
"default": {},
|
||||
"x-example": "{}"
|
||||
"x-example": "{\"language\":\"en\",\"timezone\":\"UTC\",\"darkTheme\":true}"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
|
|
@ -9152,7 +9152,7 @@
|
|||
"type": "object",
|
||||
"description": "Document data as JSON object.",
|
||||
"default": [],
|
||||
"x-example": "{}"
|
||||
"x-example": "{\"username\":\"walter.obrien\",\"email\":\"walter.obrien@example.com\",\"fullName\":\"Walter O'Brien\",\"age\":30,\"isAdmin\":false}"
|
||||
},
|
||||
"permissions": {
|
||||
"type": "array",
|
||||
|
|
@ -13952,7 +13952,7 @@
|
|||
},
|
||||
"\/health\/queue\/stats-resources": {
|
||||
"get": {
|
||||
"summary": "Get stats resources queue",
|
||||
"summary": "Get stats resources queue",
|
||||
"operationId": "healthGetQueueStatsResources",
|
||||
"consumes": [],
|
||||
"produces": [
|
||||
|
|
@ -28003,7 +28003,7 @@
|
|||
"type": "object",
|
||||
"description": "Row data as JSON object.",
|
||||
"default": [],
|
||||
"x-example": "{}"
|
||||
"x-example": "{\"username\":\"walter.obrien\",\"email\":\"walter.obrien@example.com\",\"fullName\":\"Walter O'Brien\",\"age\":30,\"isAdmin\":false}"
|
||||
},
|
||||
"permissions": {
|
||||
"type": "array",
|
||||
|
|
|
|||
|
|
@ -1979,7 +1979,7 @@
|
|||
"type": "object",
|
||||
"description": "Prefs key-value JSON object.",
|
||||
"default": {},
|
||||
"x-example": "{}"
|
||||
"x-example": "{\"language\":\"en\",\"timezone\":\"UTC\",\"darkTheme\":true}"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
|
|
@ -5154,7 +5154,7 @@
|
|||
"type": "object",
|
||||
"description": "Document data as JSON object.",
|
||||
"default": [],
|
||||
"x-example": "{}"
|
||||
"x-example": "{\"username\":\"walter.obrien\",\"email\":\"walter.obrien@example.com\",\"fullName\":\"Walter O'Brien\",\"age\":30,\"isAdmin\":false}"
|
||||
},
|
||||
"permissions": {
|
||||
"type": "array",
|
||||
|
|
@ -7749,7 +7749,7 @@
|
|||
"type": "object",
|
||||
"description": "Row data as JSON object.",
|
||||
"default": [],
|
||||
"x-example": "{}"
|
||||
"x-example": "{\"username\":\"walter.obrien\",\"email\":\"walter.obrien@example.com\",\"fullName\":\"Walter O'Brien\",\"age\":30,\"isAdmin\":false}"
|
||||
},
|
||||
"permissions": {
|
||||
"type": "array",
|
||||
|
|
|
|||
|
|
@ -2009,7 +2009,7 @@
|
|||
"type": "object",
|
||||
"description": "Prefs key-value JSON object.",
|
||||
"default": {},
|
||||
"x-example": "{}"
|
||||
"x-example": "{\"language\":\"en\",\"timezone\":\"UTC\",\"darkTheme\":true}"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
|
|
@ -9680,7 +9680,7 @@
|
|||
"type": "object",
|
||||
"description": "Document data as JSON object.",
|
||||
"default": [],
|
||||
"x-example": "{}"
|
||||
"x-example": "{\"username\":\"walter.obrien\",\"email\":\"walter.obrien@example.com\",\"fullName\":\"Walter O'Brien\",\"age\":30,\"isAdmin\":false}"
|
||||
},
|
||||
"permissions": {
|
||||
"type": "array",
|
||||
|
|
@ -15186,7 +15186,7 @@
|
|||
},
|
||||
"\/health\/queue\/stats-resources": {
|
||||
"get": {
|
||||
"summary": "Get stats resources queue",
|
||||
"summary": "Get stats resources queue",
|
||||
"operationId": "healthGetQueueStatsResources",
|
||||
"consumes": [],
|
||||
"produces": [
|
||||
|
|
@ -37572,7 +37572,7 @@
|
|||
"type": "object",
|
||||
"description": "Row data as JSON object.",
|
||||
"default": [],
|
||||
"x-example": "{}"
|
||||
"x-example": "{\"username\":\"walter.obrien\",\"email\":\"walter.obrien@example.com\",\"fullName\":\"Walter O'Brien\",\"age\":30,\"isAdmin\":false}"
|
||||
},
|
||||
"permissions": {
|
||||
"type": "array",
|
||||
|
|
|
|||
|
|
@ -2023,7 +2023,7 @@
|
|||
"type": "object",
|
||||
"description": "Prefs key-value JSON object.",
|
||||
"default": {},
|
||||
"x-example": "{}"
|
||||
"x-example": "{\"language\":\"en\",\"timezone\":\"UTC\",\"darkTheme\":true}"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
|
|
@ -9152,7 +9152,7 @@
|
|||
"type": "object",
|
||||
"description": "Document data as JSON object.",
|
||||
"default": [],
|
||||
"x-example": "{}"
|
||||
"x-example": "{\"username\":\"walter.obrien\",\"email\":\"walter.obrien@example.com\",\"fullName\":\"Walter O'Brien\",\"age\":30,\"isAdmin\":false}"
|
||||
},
|
||||
"permissions": {
|
||||
"type": "array",
|
||||
|
|
@ -13952,7 +13952,7 @@
|
|||
},
|
||||
"\/health\/queue\/stats-resources": {
|
||||
"get": {
|
||||
"summary": "Get stats resources queue",
|
||||
"summary": "Get stats resources queue",
|
||||
"operationId": "healthGetQueueStatsResources",
|
||||
"consumes": [],
|
||||
"produces": [
|
||||
|
|
@ -28003,7 +28003,7 @@
|
|||
"type": "object",
|
||||
"description": "Row data as JSON object.",
|
||||
"default": [],
|
||||
"x-example": "{}"
|
||||
"x-example": "{\"username\":\"walter.obrien\",\"email\":\"walter.obrien@example.com\",\"fullName\":\"Walter O'Brien\",\"age\":30,\"isAdmin\":false}"
|
||||
},
|
||||
"permissions": {
|
||||
"type": "array",
|
||||
|
|
|
|||
|
|
@ -3168,7 +3168,7 @@ App::patch('/v1/account/prefs')
|
|||
],
|
||||
contentType: ContentType::JSON
|
||||
))
|
||||
->param('prefs', [], new Assoc(), 'Prefs key-value JSON object.')
|
||||
->param('prefs', [], new Assoc(), 'Prefs key-value JSON object.', example: '{"language":"en","timezone":"UTC","darkTheme":true}')
|
||||
->inject('requestTimestamp')
|
||||
->inject('response')
|
||||
->inject('user')
|
||||
|
|
|
|||
|
|
@ -30,14 +30,11 @@ use Utopia\Database\Database;
|
|||
use Utopia\Database\DateTime;
|
||||
use Utopia\Database\Document;
|
||||
use Utopia\Database\Exception\Duplicate;
|
||||
use Utopia\Database\Exception\Order as OrderException;
|
||||
use Utopia\Database\Exception\Query as QueryException;
|
||||
use Utopia\Database\Helpers\ID;
|
||||
use Utopia\Database\Helpers\Permission;
|
||||
use Utopia\Database\Helpers\Role;
|
||||
use Utopia\Database\Query;
|
||||
use Utopia\Database\Validator\Datetime as DatetimeValidator;
|
||||
use Utopia\Database\Validator\Query\Cursor;
|
||||
use Utopia\Database\Validator\UID;
|
||||
use Utopia\Domains\Validator\PublicDomain;
|
||||
use Utopia\DSN\DSN;
|
||||
|
|
@ -304,77 +301,6 @@ App::post('/v1/projects')
|
|||
->dynamic($project, Response::MODEL_PROJECT);
|
||||
});
|
||||
|
||||
App::get('/v1/projects')
|
||||
->desc('List projects')
|
||||
->groups(['api', 'projects'])
|
||||
->label('scope', 'projects.read')
|
||||
->label('sdk', new Method(
|
||||
namespace: 'projects',
|
||||
group: 'projects',
|
||||
name: 'list',
|
||||
description: '/docs/references/projects/list.md',
|
||||
auth: [AuthType::ADMIN],
|
||||
responses: [
|
||||
new SDKResponse(
|
||||
code: Response::STATUS_CODE_OK,
|
||||
model: Response::MODEL_PROJECT_LIST,
|
||||
)
|
||||
]
|
||||
))
|
||||
->param('queries', [], new Projects(), 'Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/queries). Maximum of ' . APP_LIMIT_ARRAY_PARAMS_SIZE . ' queries are allowed, each ' . APP_LIMIT_ARRAY_ELEMENT_SIZE . ' characters long. You may filter on the following attributes: ' . implode(', ', Projects::ALLOWED_ATTRIBUTES), true)
|
||||
->param('search', '', new Text(256), 'Search term to filter your list results. Max length: 256 chars.', true)
|
||||
->inject('response')
|
||||
->inject('dbForPlatform')
|
||||
->action(function (array $queries, string $search, Response $response, Database $dbForPlatform) {
|
||||
|
||||
try {
|
||||
$queries = Query::parseQueries($queries);
|
||||
} catch (QueryException $e) {
|
||||
throw new Exception(Exception::GENERAL_QUERY_INVALID, $e->getMessage());
|
||||
}
|
||||
|
||||
if (!empty($search)) {
|
||||
$queries[] = Query::search('search', $search);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get cursor document if there was a cursor query, we use array_filter and reset for reference $cursor to $queries
|
||||
*/
|
||||
$cursor = \array_filter($queries, function ($query) {
|
||||
return \in_array($query->getMethod(), [Query::TYPE_CURSOR_AFTER, Query::TYPE_CURSOR_BEFORE]);
|
||||
});
|
||||
$cursor = reset($cursor);
|
||||
if ($cursor) {
|
||||
/** @var Query $cursor */
|
||||
|
||||
$validator = new Cursor();
|
||||
if (!$validator->isValid($cursor)) {
|
||||
throw new Exception(Exception::GENERAL_QUERY_INVALID, $validator->getDescription());
|
||||
}
|
||||
|
||||
$projectId = $cursor->getValue();
|
||||
$cursorDocument = $dbForPlatform->getDocument('projects', $projectId);
|
||||
|
||||
if ($cursorDocument->isEmpty()) {
|
||||
throw new Exception(Exception::GENERAL_CURSOR_NOT_FOUND, "Project '{$projectId}' for the 'cursor' value not found.");
|
||||
}
|
||||
|
||||
$cursor->setValue($cursorDocument);
|
||||
}
|
||||
|
||||
$filterQueries = Query::groupByType($queries)['filters'];
|
||||
try {
|
||||
$projects = $dbForPlatform->find('projects', $queries);
|
||||
$total = $dbForPlatform->count('projects', $filterQueries, APP_LIMIT_COUNT);
|
||||
} catch (OrderException $e) {
|
||||
throw new Exception(Exception::DATABASE_QUERY_ORDER_NULL, "The order attribute '{$e->getAttribute()}' had a null value. Cursor pagination requires all documents order attribute values are non-null.");
|
||||
}
|
||||
$response->dynamic(new Document([
|
||||
'projects' => $projects,
|
||||
'total' => $total,
|
||||
]), Response::MODEL_PROJECT_LIST);
|
||||
});
|
||||
|
||||
App::get('/v1/projects/:projectId')
|
||||
->desc('Get project')
|
||||
->groups(['api', 'projects'])
|
||||
|
|
|
|||
|
|
@ -68,7 +68,7 @@
|
|||
"utopia-php/platform": "0.7.*",
|
||||
"utopia-php/pools": "0.8.*",
|
||||
"utopia-php/preloader": "0.2.*",
|
||||
"utopia-php/queue": "0.11.0",
|
||||
"utopia-php/queue": "0.12.0",
|
||||
"utopia-php/registry": "0.5.*",
|
||||
"utopia-php/storage": "0.18.*",
|
||||
"utopia-php/swoole": "0.8.*",
|
||||
|
|
|
|||
268
composer.lock
generated
268
composer.lock
generated
|
|
@ -67,6 +67,99 @@
|
|||
],
|
||||
"time": "2025-02-18T01:00:50+00:00"
|
||||
},
|
||||
{
|
||||
"name": "appwrite-labs/php-amqplib",
|
||||
"version": "0.1.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/appwrite-labs/php-amqplib.git",
|
||||
"reference": "c8e043045388ddad5ddab5f48df2b9046ca6873f"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/appwrite-labs/php-amqplib/zipball/c8e043045388ddad5ddab5f48df2b9046ca6873f",
|
||||
"reference": "c8e043045388ddad5ddab5f48df2b9046ca6873f",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-mbstring": "*",
|
||||
"ext-sockets": "*",
|
||||
"php": "^7.2||^8.0",
|
||||
"phpseclib/phpseclib": "^2.0|^3.0"
|
||||
},
|
||||
"conflict": {
|
||||
"php": "7.4.0 - 7.4.1"
|
||||
},
|
||||
"replace": {
|
||||
"php-amqplib/php-amqplib": "self.version",
|
||||
"videlalvaro/php-amqplib": "self.version"
|
||||
},
|
||||
"require-dev": {
|
||||
"ext-curl": "*",
|
||||
"nategood/httpful": "^0.2.20",
|
||||
"phpunit/phpunit": "^7.5|^9.5",
|
||||
"squizlabs/php_codesniffer": "^3.6",
|
||||
"swoole/ide-helper": "^5.0"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-swoole": "For Swoole coroutine support"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "3.0-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"PhpAmqpLib\\": "PhpAmqpLib/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"LGPL-2.1-or-later"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Appwrite Labs",
|
||||
"email": "team@appwrite.io",
|
||||
"role": "Fork Maintainer"
|
||||
},
|
||||
{
|
||||
"name": "Alvaro Videla",
|
||||
"role": "Original Maintainer"
|
||||
},
|
||||
{
|
||||
"name": "Raúl Araya",
|
||||
"email": "nubeiro@gmail.com",
|
||||
"role": "Maintainer"
|
||||
},
|
||||
{
|
||||
"name": "Luke Bakken",
|
||||
"email": "luke@bakken.io",
|
||||
"role": "Maintainer"
|
||||
},
|
||||
{
|
||||
"name": "Ramūnas Dronga",
|
||||
"email": "github@ramuno.lt",
|
||||
"role": "Maintainer"
|
||||
}
|
||||
],
|
||||
"description": "Fork of php-amqplib with Swoole coroutine support. A pure PHP implementation of the AMQP protocol tested against RabbitMQ.",
|
||||
"homepage": "https://github.com/appwrite-labs/php-amqplib/",
|
||||
"keywords": [
|
||||
"async",
|
||||
"coroutine",
|
||||
"message",
|
||||
"queue",
|
||||
"rabbitmq",
|
||||
"swoole"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/appwrite-labs/php-amqplib/tree/0.1.2"
|
||||
},
|
||||
"time": "2025-07-04T20:54:22+00:00"
|
||||
},
|
||||
{
|
||||
"name": "appwrite/appwrite",
|
||||
"version": "15.1.0",
|
||||
|
|
@ -283,25 +376,25 @@
|
|||
},
|
||||
{
|
||||
"name": "brick/math",
|
||||
"version": "0.13.1",
|
||||
"version": "0.14.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/brick/math.git",
|
||||
"reference": "fc7ed316430118cc7836bf45faff18d5dfc8de04"
|
||||
"reference": "113a8ee2656b882d4c3164fa31aa6e12cbb7aaa2"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/brick/math/zipball/fc7ed316430118cc7836bf45faff18d5dfc8de04",
|
||||
"reference": "fc7ed316430118cc7836bf45faff18d5dfc8de04",
|
||||
"url": "https://api.github.com/repos/brick/math/zipball/113a8ee2656b882d4c3164fa31aa6e12cbb7aaa2",
|
||||
"reference": "113a8ee2656b882d4c3164fa31aa6e12cbb7aaa2",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^8.1"
|
||||
"php": "^8.2"
|
||||
},
|
||||
"require-dev": {
|
||||
"php-coveralls/php-coveralls": "^2.2",
|
||||
"phpunit/phpunit": "^10.1",
|
||||
"vimeo/psalm": "6.8.8"
|
||||
"phpstan/phpstan": "2.1.22",
|
||||
"phpunit/phpunit": "^11.5"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
|
|
@ -331,7 +424,7 @@
|
|||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/brick/math/issues",
|
||||
"source": "https://github.com/brick/math/tree/0.13.1"
|
||||
"source": "https://github.com/brick/math/tree/0.14.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
|
@ -339,7 +432,7 @@
|
|||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2025-03-29T13:50:30+00:00"
|
||||
"time": "2025-08-29T12:40:03+00:00"
|
||||
},
|
||||
{
|
||||
"name": "chillerlan/php-qrcode",
|
||||
|
|
@ -1162,16 +1255,16 @@
|
|||
},
|
||||
{
|
||||
"name": "open-telemetry/api",
|
||||
"version": "1.4.0",
|
||||
"version": "1.5.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/opentelemetry-php/api.git",
|
||||
"reference": "b3a9286f9c1c8247c83493c5b1fa475cd0cec7f7"
|
||||
"reference": "7692075f486c14d8cfd37fba98a08a5667f089e5"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/opentelemetry-php/api/zipball/b3a9286f9c1c8247c83493c5b1fa475cd0cec7f7",
|
||||
"reference": "b3a9286f9c1c8247c83493c5b1fa475cd0cec7f7",
|
||||
"url": "https://api.github.com/repos/opentelemetry-php/api/zipball/7692075f486c14d8cfd37fba98a08a5667f089e5",
|
||||
"reference": "7692075f486c14d8cfd37fba98a08a5667f089e5",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
|
@ -1228,7 +1321,7 @@
|
|||
"issues": "https://github.com/open-telemetry/opentelemetry-php/issues",
|
||||
"source": "https://github.com/open-telemetry/opentelemetry-php"
|
||||
},
|
||||
"time": "2025-06-19T23:36:51+00:00"
|
||||
"time": "2025-08-07T23:07:38+00:00"
|
||||
},
|
||||
{
|
||||
"name": "open-telemetry/context",
|
||||
|
|
@ -1418,22 +1511,22 @@
|
|||
},
|
||||
{
|
||||
"name": "open-telemetry/sdk",
|
||||
"version": "1.7.0",
|
||||
"version": "1.7.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/opentelemetry-php/sdk.git",
|
||||
"reference": "86287cf30fd6549444d7b8f7d8758d92e24086ac"
|
||||
"reference": "52690d4b37ae4f091af773eef3c238ed2bc0aa06"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/opentelemetry-php/sdk/zipball/86287cf30fd6549444d7b8f7d8758d92e24086ac",
|
||||
"reference": "86287cf30fd6549444d7b8f7d8758d92e24086ac",
|
||||
"url": "https://api.github.com/repos/opentelemetry-php/sdk/zipball/52690d4b37ae4f091af773eef3c238ed2bc0aa06",
|
||||
"reference": "52690d4b37ae4f091af773eef3c238ed2bc0aa06",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-json": "*",
|
||||
"nyholm/psr7-server": "^1.1",
|
||||
"open-telemetry/api": "~1.4.0",
|
||||
"open-telemetry/api": "^1.4",
|
||||
"open-telemetry/context": "^1.0",
|
||||
"open-telemetry/sem-conv": "^1.0",
|
||||
"php": "^8.1",
|
||||
|
|
@ -1511,7 +1604,7 @@
|
|||
"issues": "https://github.com/open-telemetry/opentelemetry-php/issues",
|
||||
"source": "https://github.com/open-telemetry/opentelemetry-php"
|
||||
},
|
||||
"time": "2025-08-06T03:07:06+00:00"
|
||||
"time": "2025-09-05T07:17:06+00:00"
|
||||
},
|
||||
{
|
||||
"name": "open-telemetry/sem-conv",
|
||||
|
|
@ -1687,87 +1780,6 @@
|
|||
},
|
||||
"time": "2020-10-15T08:29:30+00:00"
|
||||
},
|
||||
{
|
||||
"name": "php-amqplib/php-amqplib",
|
||||
"version": "v3.7.3",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/php-amqplib/php-amqplib.git",
|
||||
"reference": "9f50fe69a9f1a19e2cb25596a354d705de36fe59"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/php-amqplib/php-amqplib/zipball/9f50fe69a9f1a19e2cb25596a354d705de36fe59",
|
||||
"reference": "9f50fe69a9f1a19e2cb25596a354d705de36fe59",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-mbstring": "*",
|
||||
"ext-sockets": "*",
|
||||
"php": "^7.2||^8.0",
|
||||
"phpseclib/phpseclib": "^2.0|^3.0"
|
||||
},
|
||||
"conflict": {
|
||||
"php": "7.4.0 - 7.4.1"
|
||||
},
|
||||
"replace": {
|
||||
"videlalvaro/php-amqplib": "self.version"
|
||||
},
|
||||
"require-dev": {
|
||||
"ext-curl": "*",
|
||||
"nategood/httpful": "^0.2.20",
|
||||
"phpunit/phpunit": "^7.5|^9.5",
|
||||
"squizlabs/php_codesniffer": "^3.6"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "3.0-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"PhpAmqpLib\\": "PhpAmqpLib/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"LGPL-2.1-or-later"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Alvaro Videla",
|
||||
"role": "Original Maintainer"
|
||||
},
|
||||
{
|
||||
"name": "Raúl Araya",
|
||||
"email": "nubeiro@gmail.com",
|
||||
"role": "Maintainer"
|
||||
},
|
||||
{
|
||||
"name": "Luke Bakken",
|
||||
"email": "luke@bakken.io",
|
||||
"role": "Maintainer"
|
||||
},
|
||||
{
|
||||
"name": "Ramūnas Dronga",
|
||||
"email": "github@ramuno.lt",
|
||||
"role": "Maintainer"
|
||||
}
|
||||
],
|
||||
"description": "Formerly videlalvaro/php-amqplib. This library is a pure PHP implementation of the AMQP protocol. It's been tested against RabbitMQ.",
|
||||
"homepage": "https://github.com/php-amqplib/php-amqplib/",
|
||||
"keywords": [
|
||||
"message",
|
||||
"queue",
|
||||
"rabbitmq"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/php-amqplib/php-amqplib/issues",
|
||||
"source": "https://github.com/php-amqplib/php-amqplib/tree/v3.7.3"
|
||||
},
|
||||
"time": "2025-02-18T20:11:13+00:00"
|
||||
},
|
||||
{
|
||||
"name": "php-http/discovery",
|
||||
"version": "1.20.0",
|
||||
|
|
@ -2379,20 +2391,20 @@
|
|||
},
|
||||
{
|
||||
"name": "ramsey/uuid",
|
||||
"version": "4.9.0",
|
||||
"version": "4.9.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/ramsey/uuid.git",
|
||||
"reference": "4e0e23cc785f0724a0e838279a9eb03f28b092a0"
|
||||
"reference": "81f941f6f729b1e3ceea61d9d014f8b6c6800440"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/ramsey/uuid/zipball/4e0e23cc785f0724a0e838279a9eb03f28b092a0",
|
||||
"reference": "4e0e23cc785f0724a0e838279a9eb03f28b092a0",
|
||||
"url": "https://api.github.com/repos/ramsey/uuid/zipball/81f941f6f729b1e3ceea61d9d014f8b6c6800440",
|
||||
"reference": "81f941f6f729b1e3ceea61d9d014f8b6c6800440",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12 || ^0.13",
|
||||
"brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12 || ^0.13 || ^0.14",
|
||||
"php": "^8.0",
|
||||
"ramsey/collection": "^1.2 || ^2.0"
|
||||
},
|
||||
|
|
@ -2451,9 +2463,9 @@
|
|||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/ramsey/uuid/issues",
|
||||
"source": "https://github.com/ramsey/uuid/tree/4.9.0"
|
||||
"source": "https://github.com/ramsey/uuid/tree/4.9.1"
|
||||
},
|
||||
"time": "2025-06-25T14:20:11+00:00"
|
||||
"time": "2025-09-04T20:59:21+00:00"
|
||||
},
|
||||
{
|
||||
"name": "spomky-labs/otphp",
|
||||
|
|
@ -4296,16 +4308,16 @@
|
|||
},
|
||||
{
|
||||
"name": "utopia-php/platform",
|
||||
"version": "0.7.8",
|
||||
"version": "0.7.11",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/utopia-php/platform.git",
|
||||
"reference": "e3a4536c46f10988b1a446ec6b8dd8a9914be854"
|
||||
"reference": "f3341d1ef82e0b0f9d5f2c61829c947d86f8c850"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/utopia-php/platform/zipball/e3a4536c46f10988b1a446ec6b8dd8a9914be854",
|
||||
"reference": "e3a4536c46f10988b1a446ec6b8dd8a9914be854",
|
||||
"url": "https://api.github.com/repos/utopia-php/platform/zipball/f3341d1ef82e0b0f9d5f2c61829c947d86f8c850",
|
||||
"reference": "f3341d1ef82e0b0f9d5f2c61829c947d86f8c850",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
|
@ -4314,7 +4326,7 @@
|
|||
"php": ">=8.0",
|
||||
"utopia-php/cli": "0.15.*",
|
||||
"utopia-php/framework": "0.33.*",
|
||||
"utopia-php/queue": "0.11.*"
|
||||
"utopia-php/queue": "^0.12.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"laravel/pint": "1.*",
|
||||
|
|
@ -4340,9 +4352,9 @@
|
|||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/utopia-php/platform/issues",
|
||||
"source": "https://github.com/utopia-php/platform/tree/0.7.8"
|
||||
"source": "https://github.com/utopia-php/platform/tree/0.7.11"
|
||||
},
|
||||
"time": "2025-05-30T10:05:43+00:00"
|
||||
"time": "2025-09-04T04:38:38+00:00"
|
||||
},
|
||||
{
|
||||
"name": "utopia-php/pools",
|
||||
|
|
@ -4451,21 +4463,21 @@
|
|||
},
|
||||
{
|
||||
"name": "utopia-php/queue",
|
||||
"version": "0.11.0",
|
||||
"version": "0.12.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/utopia-php/queue.git",
|
||||
"reference": "06b5ced0eaed2ecc6aab6d8e1b4d96bff37a1ce5"
|
||||
"reference": "3a7603ee712c592bfc54af4a76f0426c428b5574"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/utopia-php/queue/zipball/06b5ced0eaed2ecc6aab6d8e1b4d96bff37a1ce5",
|
||||
"reference": "06b5ced0eaed2ecc6aab6d8e1b4d96bff37a1ce5",
|
||||
"url": "https://api.github.com/repos/utopia-php/queue/zipball/3a7603ee712c592bfc54af4a76f0426c428b5574",
|
||||
"reference": "3a7603ee712c592bfc54af4a76f0426c428b5574",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"appwrite-labs/php-amqplib": "^0.1",
|
||||
"php": ">=8.3",
|
||||
"php-amqplib/php-amqplib": "^3.7",
|
||||
"utopia-php/cli": "0.15.*",
|
||||
"utopia-php/fetch": "0.4.*",
|
||||
"utopia-php/framework": "0.33.*",
|
||||
|
|
@ -4511,9 +4523,9 @@
|
|||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/utopia-php/queue/issues",
|
||||
"source": "https://github.com/utopia-php/queue/tree/0.11.0"
|
||||
"source": "https://github.com/utopia-php/queue/tree/0.12.0"
|
||||
},
|
||||
"time": "2025-05-30T09:52:38+00:00"
|
||||
"time": "2025-06-24T18:58:38+00:00"
|
||||
},
|
||||
{
|
||||
"name": "utopia-php/registry",
|
||||
|
|
@ -5007,16 +5019,16 @@
|
|||
"packages-dev": [
|
||||
{
|
||||
"name": "appwrite/sdk-generator",
|
||||
"version": "1.1.16",
|
||||
"version": "1.2.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/appwrite/sdk-generator.git",
|
||||
"reference": "f8fbc4b1ba0e918825338f50cbdea4d887389c41"
|
||||
"reference": "db229faf442a64094ebdea7d4b66f48184a7106f"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/f8fbc4b1ba0e918825338f50cbdea4d887389c41",
|
||||
"reference": "f8fbc4b1ba0e918825338f50cbdea4d887389c41",
|
||||
"url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/db229faf442a64094ebdea7d4b66f48184a7106f",
|
||||
"reference": "db229faf442a64094ebdea7d4b66f48184a7106f",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
|
@ -5052,9 +5064,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.1.16"
|
||||
"source": "https://github.com/appwrite/sdk-generator/tree/1.2.2"
|
||||
},
|
||||
"time": "2025-09-03T06:50:04+00:00"
|
||||
"time": "2025-09-05T08:28:53+00:00"
|
||||
},
|
||||
{
|
||||
"name": "doctrine/annotations",
|
||||
|
|
|
|||
|
|
@ -0,0 +1,5 @@
|
|||
appwrite databases create-line-attribute \
|
||||
--database-id <DATABASE_ID> \
|
||||
--collection-id <COLLECTION_ID> \
|
||||
--key '' \
|
||||
--required false
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
appwrite databases create-point-attribute \
|
||||
--database-id <DATABASE_ID> \
|
||||
--collection-id <COLLECTION_ID> \
|
||||
--key '' \
|
||||
--required false
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
appwrite databases create-polygon-attribute \
|
||||
--database-id <DATABASE_ID> \
|
||||
--collection-id <COLLECTION_ID> \
|
||||
--key '' \
|
||||
--required false
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
appwrite databases update-line-attribute \
|
||||
--database-id <DATABASE_ID> \
|
||||
--collection-id <COLLECTION_ID> \
|
||||
--key '' \
|
||||
--required false
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
appwrite databases update-point-attribute \
|
||||
--database-id <DATABASE_ID> \
|
||||
--collection-id <COLLECTION_ID> \
|
||||
--key '' \
|
||||
--required false
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
appwrite databases update-polygon-attribute \
|
||||
--database-id <DATABASE_ID> \
|
||||
--collection-id <COLLECTION_ID> \
|
||||
--key '' \
|
||||
--required false
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
appwrite tables-db create-line-column \
|
||||
--database-id <DATABASE_ID> \
|
||||
--table-id <TABLE_ID> \
|
||||
--key '' \
|
||||
--required false
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
appwrite tables-db create-point-column \
|
||||
--database-id <DATABASE_ID> \
|
||||
--table-id <TABLE_ID> \
|
||||
--key '' \
|
||||
--required false
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
appwrite tables-db create-polygon-column \
|
||||
--database-id <DATABASE_ID> \
|
||||
--table-id <TABLE_ID> \
|
||||
--key '' \
|
||||
--required false
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
appwrite tables-db update-line-column \
|
||||
--database-id <DATABASE_ID> \
|
||||
--table-id <TABLE_ID> \
|
||||
--key '' \
|
||||
--required false
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
appwrite tables-db update-point-column \
|
||||
--database-id <DATABASE_ID> \
|
||||
--table-id <TABLE_ID> \
|
||||
--key '' \
|
||||
--required false
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
appwrite tables-db update-polygon-column \
|
||||
--database-id <DATABASE_ID> \
|
||||
--table-id <TABLE_ID> \
|
||||
--key '' \
|
||||
--required false
|
||||
|
|
@ -1 +0,0 @@
|
|||
Get a list of all projects. You can use the query params to filter your results.
|
||||
|
|
@ -118,7 +118,7 @@ class Create extends Action
|
|||
->param('databaseId', '', new UID(), 'Database ID.')
|
||||
->param('documentId', '', new CustomId(), 'Document ID. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can\'t start with a special char. Max length is 36 chars.', true)
|
||||
->param('collectionId', '', new UID(), 'Collection ID. You can create a new collection using the Database service [server integration](https://appwrite.io/docs/server/databases#databasesCreateCollection). Make sure to define attributes before creating documents.')
|
||||
->param('data', [], new JSON(), 'Document data as JSON object.', true)
|
||||
->param('data', [], new JSON(), 'Document data as JSON object.', true, example: '{"username":"walter.obrien","email":"walter.obrien@example.com","fullName":"Walter O\'Brien","age":30,"isAdmin":false}')
|
||||
->param('permissions', null, new Permissions(APP_LIMIT_ARRAY_PARAMS_SIZE, [Database::PERMISSION_READ, Database::PERMISSION_UPDATE, Database::PERMISSION_DELETE, Database::PERMISSION_WRITE]), 'An array of permissions strings. By default, only the current user is granted all permissions. [Learn more about permissions](https://appwrite.io/docs/permissions).', true)
|
||||
->param('documents', [], fn (array $plan) => new ArrayList(new JSON(), $plan['databasesBatchSize'] ?? APP_LIMIT_DATABASE_BATCH), 'Array of documents data as JSON objects.', true, ['plan'])
|
||||
->param('transactionId', null, new UID(), 'Transaction ID for staging the operation.', true)
|
||||
|
|
|
|||
|
|
@ -97,7 +97,7 @@ class Create extends DocumentCreate
|
|||
->param('databaseId', '', new UID(), 'Database ID.')
|
||||
->param('rowId', '', new CustomId(), 'Row ID. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can\'t start with a special char. Max length is 36 chars.', true)
|
||||
->param('tableId', '', new UID(), 'Table ID. You can create a new table using the Database service [server integration](https://appwrite.io/docs/server/tablesdb#tablesDBCreate). Make sure to define columns before creating rows.')
|
||||
->param('data', [], new JSON(), 'Row data as JSON object.', true)
|
||||
->param('data', [], new JSON(), 'Row data as JSON object.', true, example: '{"username":"walter.obrien","email":"walter.obrien@example.com","fullName":"Walter O\'Brien","age":30,"isAdmin":false}')
|
||||
->param('permissions', null, new Permissions(APP_LIMIT_ARRAY_PARAMS_SIZE, [Database::PERMISSION_READ, Database::PERMISSION_UPDATE, Database::PERMISSION_DELETE, Database::PERMISSION_WRITE]), 'An array of permissions strings. By default, only the current user is granted all permissions. [Learn more about permissions](https://appwrite.io/docs/permissions).', true)
|
||||
->param('rows', [], fn (array $plan) => new ArrayList(new JSON(), $plan['databasesBatchSize'] ?? APP_LIMIT_DATABASE_BATCH), 'Array of rows data as JSON objects.', true, ['plan'])
|
||||
->param('transactionId', null, new UID(), 'Transaction ID for staging the operation.', true)
|
||||
|
|
|
|||
116
src/Appwrite/Platform/Modules/Projects/Http/Projects/XList.php
Normal file
116
src/Appwrite/Platform/Modules/Projects/Http/Projects/XList.php
Normal file
|
|
@ -0,0 +1,116 @@
|
|||
<?php
|
||||
|
||||
namespace Appwrite\Platform\Modules\Projects\Http\Projects;
|
||||
|
||||
use Appwrite\Extend\Exception;
|
||||
use Appwrite\SDK\AuthType;
|
||||
use Appwrite\SDK\ContentType;
|
||||
use Appwrite\SDK\Method;
|
||||
use Appwrite\SDK\Response as SDKResponse;
|
||||
use Appwrite\Utopia\Database\Validator\Queries\Projects;
|
||||
use Appwrite\Utopia\Response;
|
||||
use Utopia\Database\Database;
|
||||
use Utopia\Database\Document;
|
||||
use Utopia\Database\Exception\Order;
|
||||
use Utopia\Database\Exception\Query as QueryException;
|
||||
use Utopia\Database\Query;
|
||||
use Utopia\Database\Validator\Query\Cursor;
|
||||
use Utopia\Platform\Action;
|
||||
use Utopia\Platform\Scope\HTTP;
|
||||
use Utopia\Validator;
|
||||
use Utopia\Validator\Text;
|
||||
|
||||
class XList extends Action
|
||||
{
|
||||
use HTTP;
|
||||
public static function getName()
|
||||
{
|
||||
return 'listProjects';
|
||||
}
|
||||
|
||||
protected function getQueriesValidator(): Validator
|
||||
{
|
||||
return new Projects();
|
||||
}
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this
|
||||
->setHttpMethod(Action::HTTP_REQUEST_METHOD_GET)
|
||||
->setHttpPath('/v1/projects')
|
||||
->desc('List projects')
|
||||
->groups(['api', 'projects'])
|
||||
->label('scope', 'projects.read')
|
||||
->label('sdk', new Method(
|
||||
namespace: 'projects',
|
||||
group: 'projects',
|
||||
name: 'list',
|
||||
description: <<<EOT
|
||||
Get a list of all projects. You can use the query params to filter your results.
|
||||
EOT,
|
||||
auth: [AuthType::ADMIN],
|
||||
responses: [
|
||||
new SDKResponse(
|
||||
code: Response::STATUS_CODE_OK,
|
||||
model: Response::MODEL_PROJECT_LIST
|
||||
)
|
||||
],
|
||||
contentType: ContentType::JSON
|
||||
))
|
||||
->param('queries', [], $this->getQueriesValidator(), 'Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/queries). Maximum of ' . APP_LIMIT_ARRAY_PARAMS_SIZE . ' queries are allowed, each ' . APP_LIMIT_ARRAY_ELEMENT_SIZE . ' characters long. You may filter on the following attributes: ' . implode(', ', Projects::ALLOWED_ATTRIBUTES), true)
|
||||
->param('search', '', new Text(256), 'Search term to filter your list results. Max length: 256 chars.', true)
|
||||
->inject('response')
|
||||
->inject('dbForPlatform')
|
||||
->callback($this->action(...));
|
||||
}
|
||||
|
||||
public function action(array $queries, string $search, Response $response, Database $dbForPlatform)
|
||||
{
|
||||
try {
|
||||
$queries = Query::parseQueries($queries);
|
||||
} catch (QueryException $e) {
|
||||
throw new Exception(Exception::GENERAL_QUERY_INVALID, $e->getMessage());
|
||||
}
|
||||
|
||||
if (!empty($search)) {
|
||||
$queries[] = Query::search('search', $search);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get cursor document if there was a cursor query, we use array_filter and reset for reference $cursor to $queries
|
||||
*/
|
||||
$cursor = \array_filter($queries, function ($query) {
|
||||
return \in_array($query->getMethod(), [Query::TYPE_CURSOR_AFTER, Query::TYPE_CURSOR_BEFORE]);
|
||||
});
|
||||
$cursor = reset($cursor);
|
||||
if ($cursor) {
|
||||
/** @var Query $cursor */
|
||||
|
||||
$validator = new Cursor();
|
||||
if (!$validator->isValid($cursor)) {
|
||||
throw new Exception(Exception::GENERAL_QUERY_INVALID, $validator->getDescription());
|
||||
}
|
||||
|
||||
$projectId = $cursor->getValue();
|
||||
$cursorDocument = $dbForPlatform->getDocument('projects', $projectId);
|
||||
|
||||
if ($cursorDocument->isEmpty()) {
|
||||
throw new Exception(Exception::GENERAL_CURSOR_NOT_FOUND, "Project '{$projectId}' for the 'cursor' value not found.");
|
||||
}
|
||||
|
||||
$cursor->setValue($cursorDocument);
|
||||
}
|
||||
|
||||
$filterQueries = Query::groupByType($queries)['filters'];
|
||||
try {
|
||||
$projects = $dbForPlatform->find('projects', $queries);
|
||||
$total = $dbForPlatform->count('projects', $filterQueries, APP_LIMIT_COUNT);
|
||||
} catch (Order $e) {
|
||||
throw new Exception(Exception::DATABASE_QUERY_ORDER_NULL, "The order attribute '{$e->getAttribute()}' had a null value. Cursor pagination requires all documents order attribute values are non-null.");
|
||||
}
|
||||
$response->dynamic(new Document([
|
||||
'projects' => $projects,
|
||||
'total' => $total,
|
||||
]), Response::MODEL_PROJECT_LIST);
|
||||
}
|
||||
}
|
||||
|
|
@ -7,6 +7,7 @@ use Appwrite\Platform\Modules\Projects\Http\DevKeys\Delete as DeleteDevKey;
|
|||
use Appwrite\Platform\Modules\Projects\Http\DevKeys\Get as GetDevKey;
|
||||
use Appwrite\Platform\Modules\Projects\Http\DevKeys\Update as UpdateDevKey;
|
||||
use Appwrite\Platform\Modules\Projects\Http\DevKeys\XList as ListDevKeys;
|
||||
use Appwrite\Platform\Modules\Projects\Http\Projects\XList as ListProjects;
|
||||
use Utopia\Platform\Service;
|
||||
|
||||
class Http extends Service
|
||||
|
|
@ -19,5 +20,7 @@ class Http extends Service
|
|||
$this->addAction(GetDevKey::getName(), new GetDevKey());
|
||||
$this->addAction(ListDevKeys::getName(), new ListDevKeys());
|
||||
$this->addAction(DeleteDevKey::getName(), new DeleteDevKey());
|
||||
|
||||
$this->addAction(ListProjects::getName(), new ListProjects());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -433,7 +433,7 @@ class OpenAPI3 extends Format
|
|||
case 'Utopia\Validator\Assoc':
|
||||
$param['default'] = (empty($param['default'])) ? new \stdClass() : $param['default'];
|
||||
$node['schema']['type'] = 'object';
|
||||
$node['schema']['x-example'] = '{}';
|
||||
$node['schema']['x-example'] = ($param['example'] ?? '') ?: '{}';
|
||||
break;
|
||||
case 'Utopia\Storage\Validator\File':
|
||||
$consumes = ['multipart/form-data'];
|
||||
|
|
|
|||
|
|
@ -467,7 +467,7 @@ class Swagger2 extends Format
|
|||
case 'Utopia\Validator\Assoc':
|
||||
$node['type'] = 'object';
|
||||
$node['default'] = (empty($param['default'])) ? new \stdClass() : $param['default'];
|
||||
$node['x-example'] = '{}';
|
||||
$node['x-example'] = ($param['example'] ?? '') ?: '{}';
|
||||
break;
|
||||
case 'Utopia\Storage\Validator\File':
|
||||
$consumes = ['multipart/form-data'];
|
||||
|
|
|
|||
Loading…
Reference in a new issue