mirror of
https://github.com/appwrite/appwrite.git
synced 2026-05-26 13:51:13 +00:00
Fix logic for known indexes
This commit is contained in:
@@ -106,7 +106,7 @@ $attributesCallback = function ($attribute, $response, $dbForExternal, $database
|
||||
]);
|
||||
|
||||
$database
|
||||
->setParam('type', CREATE_TYPE_ATTRIBUTE)
|
||||
->setParam('type', DATABASE_TYPE_CREATE_ATTRIBUTE)
|
||||
->setParam('document', $attribute)
|
||||
;
|
||||
|
||||
@@ -734,7 +734,7 @@ App::delete('/v1/database/collections/:collectionId/attributes/:attributeId')
|
||||
}
|
||||
|
||||
$database
|
||||
->setParam('type', DELETE_TYPE_ATTRIBUTE)
|
||||
->setParam('type', DATABASE_TYPE_DELETE_ATTRIBUTE)
|
||||
->setParam('document', $attribute)
|
||||
;
|
||||
|
||||
@@ -764,7 +764,7 @@ App::post('/v1/database/collections/:collectionId/indexes')
|
||||
->label('sdk.response.type', Response::CONTENT_TYPE_JSON)
|
||||
->label('sdk.response.model', Response::MODEL_INDEX)
|
||||
->param('collectionId', '', new UID(), 'Collection unique ID. You can create a new collection using the Database service [server integration](/docs/server/database#createCollection).')
|
||||
->param('id', null, new Key(), 'Index ID.')
|
||||
->param('indexId', null, new Key(), 'Index ID.')
|
||||
->param('type', null, new WhiteList([Database::INDEX_KEY, Database::INDEX_FULLTEXT, Database::INDEX_UNIQUE, Database::INDEX_SPATIAL, Database::INDEX_ARRAY]), 'Index type.')
|
||||
->param('attributes', null, new ArrayList(new Key()), 'Array of attributes to index.')
|
||||
->param('orders', [], new ArrayList(new WhiteList(['ASC', 'DESC'], false, Database::VAR_STRING)), 'Array of index orders.', true)
|
||||
@@ -772,7 +772,7 @@ App::post('/v1/database/collections/:collectionId/indexes')
|
||||
->inject('dbForExternal')
|
||||
->inject('database')
|
||||
->inject('audits')
|
||||
->action(function ($collectionId, $id, $type, $attributes, $orders, $response, $dbForExternal, $database, $audits) {
|
||||
->action(function ($collectionId, $indexId, $type, $attributes, $orders, $response, $dbForExternal, $database, $audits) {
|
||||
/** @var Appwrite\Utopia\Response $response */
|
||||
/** @var Utopia\Database\Database $dbForExternal */
|
||||
/** @var Appwrite\Event\Event $database */
|
||||
@@ -808,7 +808,7 @@ App::post('/v1/database/collections/:collectionId/indexes')
|
||||
$lengths[$key] = ($attributeType === Database::VAR_STRING) ? $attributeSize : null;
|
||||
}
|
||||
|
||||
$success = $dbForExternal->addIndexInQueue($collectionId, $id, $type, $attributes, $lengths, $orders);
|
||||
$success = $dbForExternal->addIndexInQueue($collectionId, $indexId, $type, $attributes, $lengths, $orders);
|
||||
|
||||
// Database->createIndex() does not return a document
|
||||
// So we need to create one for the response
|
||||
@@ -816,7 +816,7 @@ App::post('/v1/database/collections/:collectionId/indexes')
|
||||
// TODO@kodumbeats should $lengths be a part of the response model?
|
||||
$index = new Document([
|
||||
'$collection' => $collectionId,
|
||||
'$id' => $id,
|
||||
'$id' => $indexId,
|
||||
'type' => $type,
|
||||
'attributes' => $attributes,
|
||||
'lengths' => $lengths,
|
||||
@@ -824,7 +824,7 @@ App::post('/v1/database/collections/:collectionId/indexes')
|
||||
]);
|
||||
|
||||
$database
|
||||
->setParam('type', CREATE_TYPE_INDEX)
|
||||
->setParam('type', DATABASE_TYPE_CREATE_INDEX)
|
||||
->setParam('document', $index)
|
||||
;
|
||||
|
||||
@@ -949,21 +949,24 @@ App::delete('/v1/database/collections/:collectionId/indexes/:indexId')
|
||||
throw new Exception('Collection not found', 404);
|
||||
}
|
||||
|
||||
/** @var Document[] $indexes */
|
||||
$indexes = $collection->getAttribute('indexes');
|
||||
|
||||
// // Search for index
|
||||
$indexIndex = array_search($indexId, array_column($indexes, '$id'));
|
||||
// find attribute in collection
|
||||
$index= null;
|
||||
foreach ($indexes as $i) {
|
||||
if ($i->getId() === $indexId) {
|
||||
$index = $i->setAttribute('$collection', $collectionId); // set the collectionId
|
||||
break; // break once index is found
|
||||
}
|
||||
}
|
||||
|
||||
if ($indexIndex === false) {
|
||||
if (\is_null($index)) {
|
||||
throw new Exception('Index not found', 404);
|
||||
}
|
||||
|
||||
$index = new Document([\array_merge($indexes[$indexIndex], [
|
||||
'collectionId' => $collectionId,
|
||||
])]);
|
||||
|
||||
$database
|
||||
->setParam('type', DELETE_TYPE_INDEX)
|
||||
->setParam('type', DATABASE_TYPE_DELETE_INDEX)
|
||||
->setParam('document', $index)
|
||||
;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user