Fix logic for known indexes

This commit is contained in:
kodumbeats
2021-08-08 19:46:14 -04:00
parent 4c08097e92
commit ae95d1b83a
+18 -15
View File
@@ -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)
;