diff --git a/app/controllers/api/databases.php b/app/controllers/api/databases.php index 7cc84f86a7..1ea5e176df 100644 --- a/app/controllers/api/databases.php +++ b/app/controllers/api/databases.php @@ -68,7 +68,7 @@ function createAttribute(string $databaseId, string $collectionId, Document $att $formatOptions = $attribute->getAttribute('formatOptions', []); $filters = $attribute->getAttribute('filters', []); // filters are hidden from the endpoint $default = $attribute->getAttribute('default'); - $options = $attribute->getAttribute('options', []); + $relationshipOptions = $attribute->getAttribute('relationshipOptions', []); $db = Authorization::skip(fn () => $dbForProject->getDocument('databases', $databaseId)); @@ -98,7 +98,7 @@ function createAttribute(string $databaseId, string $collectionId, Document $att } if ($type === Database::VAR_RELATIONSHIP) { - $relatedCollection = $dbForProject->getDocument('database_' . $db->getInternalId(), $options['relatedCollectionId']); + $relatedCollection = $dbForProject->getDocument('database_' . $db->getInternalId(), $relationshipOptions['relatedCollection']); if ($relatedCollection->isEmpty()) { throw new Exception(Exception::COLLECTION_NOT_FOUND); } @@ -122,7 +122,7 @@ function createAttribute(string $databaseId, string $collectionId, Document $att 'format' => $format, 'formatOptions' => $formatOptions, 'filters' => $filters, - 'options' => $options, // Do we want all options? + 'relationshipOptions' => $relationshipOptions, ]); $dbForProject->checkAttribute($collection, $attribute); @@ -1394,8 +1394,8 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/relati 'default' => null, 'array' => false, 'filters' => [], - 'options' => [ - 'relatedCollectionId' => $relatedCollectionId, + 'relationshipOptions' => [ + 'relatedCollection' => $relatedCollectionId, 'relationType' => $type, 'twoWay' => $twoWay, 'twoWayKey' => $twoWayKey, @@ -1409,6 +1409,18 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/relati $events ); + $options = $attribute->getAttribute('relationshipOptions', []); + + if (!empty($options)) { + $attribute->setAttribute('relatedCollection', $options['relatedCollection']); + $attribute->setAttribute('relationType', $options['relationType']); + $attribute->setAttribute('twoWay', $options['twoWay']); + $attribute->setAttribute('twoWayKey', $options['twoWayKey']); + $attribute->setAttribute('onUpdate', $options['onUpdate']); + $attribute->setAttribute('onDelete', $options['onDelete']); + $attribute->setAttribute('side', $options['side']); + } + $response ->setStatusCode(Response::STATUS_CODE_ACCEPTED) ->dynamic($attribute, Response::MODEL_ATTRIBUTE_RELATIONSHIP); diff --git a/app/workers/databases.php b/app/workers/databases.php index 8e8d4eb4a1..9fef6d1bc3 100644 --- a/app/workers/databases.php +++ b/app/workers/databases.php @@ -91,22 +91,22 @@ class DatabaseV1 extends Worker $format = $attribute->getAttribute('format', ''); $formatOptions = $attribute->getAttribute('formatOptions', []); $filters = $attribute->getAttribute('filters', []); - $options = $attribute->getAttribute('options', []); + $relationshipOptions = $attribute->getAttribute('relationshipOptions', []); $project = $dbForConsole->getDocument('projects', $projectId); try { if ($type === Database::VAR_RELATIONSHIP) { - $relatedCollection = $dbForProject->getDocument('database_' . $database->getInternalId(), $options['relatedCollectionId']); + $relatedCollection = $dbForProject->getDocument('database_' . $database->getInternalId(), $relationshipOptions['relatedCollection']); if ( !$dbForProject->createRelationship( collection: 'database_' . $database->getInternalId() . '_collection_' . $collection->getInternalId(), relatedCollection: 'database_' . $database->getInternalId() . '_collection_' . $relatedCollection->getInternalId(), - type: $options['relationType'], - twoWay: $options['twoWay'], - id: $options['id'], - twoWayKey: $options['twoWayKey'], - onUpdate: $options['onUpdate'], - onDelete: $options['onDelete'], + type: $relationshipOptions['relationType'], + twoWay: $relationshipOptions['twoWay'], + id: $relationshipOptions['id'], + twoWayKey: $relationshipOptions['twoWayKey'], + onUpdate: $relationshipOptions['onUpdate'], + onDelete: $relationshipOptions['onDelete'], ) ) { throw new Exception('Failed to create Attribute');