From 9d6ab0b7cbc00c3658e8d0b1c0fe9bd8dc6b2278 Mon Sep 17 00:00:00 2001 From: Ben Kalmus Date: Thu, 28 Aug 2025 23:19:18 +0100 Subject: [PATCH 1/8] implement put and delete API for compositions and rules --- .../paths/objects/objects.yml | 62 ++++++++++++++++++ specs/composition-full/paths/rules/rule.yml | 64 +++++++++++++++++++ 2 files changed, 126 insertions(+) diff --git a/specs/composition-full/paths/objects/objects.yml b/specs/composition-full/paths/objects/objects.yml index c0082dd175a..4c2158ee82d 100644 --- a/specs/composition-full/paths/objects/objects.yml +++ b/specs/composition-full/paths/objects/objects.yml @@ -25,3 +25,65 @@ get: $ref: '../../../common/responses/MethodNotAllowed.yml' '404': $ref: '../../../common/responses/CompositionNotFound.yml' + +put: + tags: + - Compositions + operationId: putComposition + x-acl: + - editSettings + - settings + summary: Upsert a composition + description: | + Upsert a composition in the current Algolia application. + parameters: + - $ref: '../urlParams.yml#/compositionID' + requestBody: + required: true + content: + application/json: + schema: + $ref: '../../common/schemas/components/Composition.yml#/composition' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '../../../common/responses/common.yml#/taskID' + '400': + $ref: '../../../common/responses/BadRequest.yml' + '402': + $ref: '../../../common/responses/FeatureNotEnabled.yml' + '403': + $ref: '../../../common/responses/MethodNotAllowed.yml' + '422': + $ref: '../../../common/responses/UnprocessableEntity.yml' + +delete: + tags: + - Compositions + operationId: deleteComposition + x-acl: + - editSettings + - settings + summary: Delete a composition + description: | + Delete a composition from the current Algolia application. + parameters: + - $ref: '../urlParams.yml#/compositionID' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '../../../common/responses/common.yml#/taskID' + '400': + $ref: '../../../common/responses/BadRequest.yml' + '402': + $ref: '../../../common/responses/FeatureNotEnabled.yml' + '403': + $ref: '../../../common/responses/MethodNotAllowed.yml' + '404': + $ref: '../../../common/responses/CompositionNotFound.yml' diff --git a/specs/composition-full/paths/rules/rule.yml b/specs/composition-full/paths/rules/rule.yml index 325fa210186..9a8e69671b2 100644 --- a/specs/composition-full/paths/rules/rule.yml +++ b/specs/composition-full/paths/rules/rule.yml @@ -27,3 +27,67 @@ get: $ref: '../../../common/responses/MethodNotAllowed.yml' '404': $ref: '../../../common/responses/IndexNotFound.yml' + +put: + tags: + - Rules + operationId: putCompositionRule + x-acl: + - editSettings + - settings + summary: Upsert a composition rule + description: | + Upsert a Composition Rule for the specified composition ID. + parameters: + - $ref: '../urlParams.yml#/compositionID' + - $ref: './parameters.yml#/ObjectIDRule' + requestBody: + required: true + content: + application/json: + schema: + $ref: '../../common/schemas/components/CompositionRule.yml#/compositionRule' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '../../../common/responses/common.yml#/taskID' + '400': + $ref: '../../../common/responses/BadRequest.yml' + '402': + $ref: '../../../common/responses/FeatureNotEnabled.yml' + '403': + $ref: '../../../common/responses/MethodNotAllowed.yml' + '422': + $ref: '../../../common/responses/UnprocessableEntity.yml' + +delete: + tags: + - Rules + operationId: deleteCompositionRule + x-acl: + - editSettings + - settings + summary: Delete a Composition Rule + description: | + Delete a Composition Rule from the specified Composition ID. + parameters: + - $ref: '../urlParams.yml#/compositionID' + - $ref: './parameters.yml#/ObjectIDRule' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '../../../common/responses/common.yml#/taskID' + '400': + $ref: '../../../common/responses/BadRequest.yml' + '402': + $ref: '../../../common/responses/FeatureNotEnabled.yml' + '403': + $ref: '../../../common/responses/MethodNotAllowed.yml' + '404': + $ref: '../../../common/responses/CompositionNotFound.yml' From 14774b5aa059ef4572722a155894b119d7a6721c Mon Sep 17 00:00:00 2001 From: Ben Kalmus Date: Fri, 29 Aug 2025 09:20:27 +0100 Subject: [PATCH 2/8] add deleteComposition and deleteCompositionRule CTS tests --- .../composition-full/deleteComposition.json | 26 +++++++++++++++++ .../deleteCompositionRule.json | 28 +++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 tests/CTS/requests/composition-full/deleteComposition.json create mode 100644 tests/CTS/requests/composition-full/deleteCompositionRule.json diff --git a/tests/CTS/requests/composition-full/deleteComposition.json b/tests/CTS/requests/composition-full/deleteComposition.json new file mode 100644 index 00000000000..e25bc56c1ae --- /dev/null +++ b/tests/CTS/requests/composition-full/deleteComposition.json @@ -0,0 +1,26 @@ +[ + { + "parameters": { + "compositionID": "1234" + }, + "request": { + "path": "/1/compositions/1234", + "method": "DELETE" + } + }, + { + "parameters": { + "compositionID": "1234" + }, + "request": { + "path": "/1/compositions/1234", + "method": "DELETE" + }, + "response": { + "statusCode": 200, + "body": { + "taskID": 42 + } + } + } +] diff --git a/tests/CTS/requests/composition-full/deleteCompositionRule.json b/tests/CTS/requests/composition-full/deleteCompositionRule.json new file mode 100644 index 00000000000..b5e191da9f5 --- /dev/null +++ b/tests/CTS/requests/composition-full/deleteCompositionRule.json @@ -0,0 +1,28 @@ +[ + { + "parameters": { + "compositionID": "1234", + "objectID": "5678" + }, + "request": { + "path": "/1/compositions/1234/rules/5678", + "method": "DELETE" + } + }, + { + "parameters": { + "compositionID": "1234", + "objectID": "5678" + }, + "request": { + "path": "/1/compositions/1234/rules/5678", + "method": "DELETE" + }, + "response": { + "statusCode": 200, + "body": { + "taskID": 42 + } + } + } +] From e5b7762e11611563b2d05a459c39637ff28712a7 Mon Sep 17 00:00:00 2001 From: Ben Kalmus Date: Fri, 29 Aug 2025 10:02:44 +0100 Subject: [PATCH 3/8] add putComposition and putCompositionRule CTS --- .../composition-full/putComposition.json | 49 +++++++++++++++ .../composition-full/putCompositionRule.json | 62 +++++++++++++++++++ 2 files changed, 111 insertions(+) create mode 100644 tests/CTS/requests/composition-full/putComposition.json create mode 100644 tests/CTS/requests/composition-full/putCompositionRule.json diff --git a/tests/CTS/requests/composition-full/putComposition.json b/tests/CTS/requests/composition-full/putComposition.json new file mode 100644 index 00000000000..f786b997b90 --- /dev/null +++ b/tests/CTS/requests/composition-full/putComposition.json @@ -0,0 +1,49 @@ +[ + { + "parameters": { + "compositionID": "1234", + "composition": { + "objectID": "1234", + "name": "my first composition", + "behavior": { + "injection": { + "main": { + "source": { + "search": { + "index": "foo" + } + } + }, + "injectedItems": [] + } + } + } + }, + "request": { + "path": "/1/compositions/1234", + "method": "PUT", + "body": { + "objectID": "1234", + "name": "my first composition", + "behavior": { + "injection": { + "main": { + "source": { + "search": { + "index": "foo" + } + } + }, + "injectedItems": [] + } + } + } + }, + "response": { + "statusCode": 200, + "body": { + "taskID": 42 + } + } + } +] diff --git a/tests/CTS/requests/composition-full/putCompositionRule.json b/tests/CTS/requests/composition-full/putCompositionRule.json new file mode 100644 index 00000000000..9d48eea8a35 --- /dev/null +++ b/tests/CTS/requests/composition-full/putCompositionRule.json @@ -0,0 +1,62 @@ +[ + { + "parameters": { + "compositionID": "1234", + "objectID": "5678", + "compositionRule": { + "objectID": "5678", + "conditions": [ + { + "anchoring": "is", + "pattern": "test" + } + ], + "consequence": { + "behavior": { + "injection": { + "main": { + "source": { + "search": { + "index": "foo" + } + } + } + } + } + } + } + }, + "request": { + "path": "/1/compositions/1234/rules/5678", + "method": "PUT", + "body": { + "objectID": "5678", + "conditions": [ + { + "anchoring": "is", + "pattern": "test" + } + ], + "consequence": { + "behavior": { + "injection": { + "main": { + "source": { + "search": { + "index": "foo" + } + } + } + } + } + } + } + }, + "response": { + "statusCode": 200, + "body": { + "taskID": 42 + } + } + } +] From 642a5658bfe770d1dc03cc590904616c54dac5b4 Mon Sep 17 00:00:00 2001 From: Ben Kalmus Date: Fri, 29 Aug 2025 10:40:50 +0100 Subject: [PATCH 4/8] remove expected responses --- .../composition-full/deleteComposition.json | 15 --------------- .../composition-full/deleteCompositionRule.json | 16 ---------------- .../composition-full/putComposition.json | 6 ------ .../composition-full/putCompositionRule.json | 6 ------ 4 files changed, 43 deletions(-) diff --git a/tests/CTS/requests/composition-full/deleteComposition.json b/tests/CTS/requests/composition-full/deleteComposition.json index e25bc56c1ae..327db8ece81 100644 --- a/tests/CTS/requests/composition-full/deleteComposition.json +++ b/tests/CTS/requests/composition-full/deleteComposition.json @@ -7,20 +7,5 @@ "path": "/1/compositions/1234", "method": "DELETE" } - }, - { - "parameters": { - "compositionID": "1234" - }, - "request": { - "path": "/1/compositions/1234", - "method": "DELETE" - }, - "response": { - "statusCode": 200, - "body": { - "taskID": 42 - } - } } ] diff --git a/tests/CTS/requests/composition-full/deleteCompositionRule.json b/tests/CTS/requests/composition-full/deleteCompositionRule.json index b5e191da9f5..91804ea055f 100644 --- a/tests/CTS/requests/composition-full/deleteCompositionRule.json +++ b/tests/CTS/requests/composition-full/deleteCompositionRule.json @@ -8,21 +8,5 @@ "path": "/1/compositions/1234/rules/5678", "method": "DELETE" } - }, - { - "parameters": { - "compositionID": "1234", - "objectID": "5678" - }, - "request": { - "path": "/1/compositions/1234/rules/5678", - "method": "DELETE" - }, - "response": { - "statusCode": 200, - "body": { - "taskID": 42 - } - } } ] diff --git a/tests/CTS/requests/composition-full/putComposition.json b/tests/CTS/requests/composition-full/putComposition.json index f786b997b90..b5bb944ba18 100644 --- a/tests/CTS/requests/composition-full/putComposition.json +++ b/tests/CTS/requests/composition-full/putComposition.json @@ -38,12 +38,6 @@ } } } - }, - "response": { - "statusCode": 200, - "body": { - "taskID": 42 - } } } ] diff --git a/tests/CTS/requests/composition-full/putCompositionRule.json b/tests/CTS/requests/composition-full/putCompositionRule.json index 9d48eea8a35..f9b6bb63705 100644 --- a/tests/CTS/requests/composition-full/putCompositionRule.json +++ b/tests/CTS/requests/composition-full/putCompositionRule.json @@ -51,12 +51,6 @@ } } } - }, - "response": { - "statusCode": 200, - "body": { - "taskID": 42 - } } } ] From 8722cc9267ac0712ab0a01704c1b4a3e7d8c4058 Mon Sep 17 00:00:00 2001 From: Ben Kalmus Date: Fri, 29 Aug 2025 16:12:16 +0100 Subject: [PATCH 5/8] add injected item in put requests --- .../composition-full/putComposition.json | 26 +++++++++++++++-- .../composition-full/putCompositionRule.json | 28 +++++++++++++++++-- 2 files changed, 50 insertions(+), 4 deletions(-) diff --git a/tests/CTS/requests/composition-full/putComposition.json b/tests/CTS/requests/composition-full/putComposition.json index b5bb944ba18..9f5f729498f 100644 --- a/tests/CTS/requests/composition-full/putComposition.json +++ b/tests/CTS/requests/composition-full/putComposition.json @@ -14,7 +14,18 @@ } } }, - "injectedItems": [] + "injectedItems": [ + { + "key": "injectedItem1", + "source": { + "search": { + "index": "foo" + } + }, + "position": 2, + "length": 1 + } + ] } } } @@ -34,7 +45,18 @@ } } }, - "injectedItems": [] + "injectedItems": [ + { + "key": "injectedItem1", + "source": { + "search": { + "index": "foo" + } + }, + "position": 2, + "length": 1 + } + ] } } } diff --git a/tests/CTS/requests/composition-full/putCompositionRule.json b/tests/CTS/requests/composition-full/putCompositionRule.json index f9b6bb63705..ddb6ffaed4b 100644 --- a/tests/CTS/requests/composition-full/putCompositionRule.json +++ b/tests/CTS/requests/composition-full/putCompositionRule.json @@ -20,7 +20,19 @@ "index": "foo" } } - } + }, + "injectedItems": [ + { + "key": "injectedItem1", + "source": { + "search": { + "index": "foo" + } + }, + "position": 2, + "length": 1 + } + ] } } } @@ -46,7 +58,19 @@ "index": "foo" } } - } + }, + "injectedItems": [ + { + "key": "injectedItem1", + "source": { + "search": { + "index": "foo" + } + }, + "position": 2, + "length": 1 + } + ] } } } From 912e1cf89c3dcdc1ec65b269fa40f89301b5fde2 Mon Sep 17 00:00:00 2001 From: Ben Kalmus Date: Fri, 29 Aug 2025 18:10:31 +0100 Subject: [PATCH 6/8] add 404 comp not found response to upsert rule --- specs/composition-full/paths/rules/rule.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/specs/composition-full/paths/rules/rule.yml b/specs/composition-full/paths/rules/rule.yml index 9a8e69671b2..baccc32088a 100644 --- a/specs/composition-full/paths/rules/rule.yml +++ b/specs/composition-full/paths/rules/rule.yml @@ -60,6 +60,8 @@ put: $ref: '../../../common/responses/FeatureNotEnabled.yml' '403': $ref: '../../../common/responses/MethodNotAllowed.yml' + '404': + $ref: '../../../common/responses/CompositionNotFound.yml' '422': $ref: '../../../common/responses/UnprocessableEntity.yml' From 1a64abba408a363ca1b02c43b6abeb9e13ddfaa1 Mon Sep 17 00:00:00 2001 From: Ben Kalmus Date: Mon, 1 Sep 2025 09:40:41 +0100 Subject: [PATCH 7/8] remove 404 response for delete composition --- specs/composition-full/paths/objects/objects.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/specs/composition-full/paths/objects/objects.yml b/specs/composition-full/paths/objects/objects.yml index 4c2158ee82d..f1673f0bf17 100644 --- a/specs/composition-full/paths/objects/objects.yml +++ b/specs/composition-full/paths/objects/objects.yml @@ -85,5 +85,3 @@ delete: $ref: '../../../common/responses/FeatureNotEnabled.yml' '403': $ref: '../../../common/responses/MethodNotAllowed.yml' - '404': - $ref: '../../../common/responses/CompositionNotFound.yml' From 3ece02d489d3204f3844f4845be1ba5b30fdc31d Mon Sep 17 00:00:00 2001 From: Ben Kalmus Date: Mon, 1 Sep 2025 16:48:35 +0100 Subject: [PATCH 8/8] fix task id response --- .../composition-full/paths/objects/objects.yml | 18 ++++++++++++++++-- specs/composition-full/paths/rules/rule.yml | 18 ++++++++++++++++-- 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/specs/composition-full/paths/objects/objects.yml b/specs/composition-full/paths/objects/objects.yml index f1673f0bf17..d551bfdf7e2 100644 --- a/specs/composition-full/paths/objects/objects.yml +++ b/specs/composition-full/paths/objects/objects.yml @@ -50,7 +50,14 @@ put: content: application/json: schema: - $ref: '../../../common/responses/common.yml#/taskID' + title: taskIDResponse + type: object + additionalProperties: false + properties: + taskID: + $ref: '../../../common/responses/common.yml#/taskID' + required: + - taskID '400': $ref: '../../../common/responses/BadRequest.yml' '402': @@ -78,7 +85,14 @@ delete: content: application/json: schema: - $ref: '../../../common/responses/common.yml#/taskID' + title: taskIDResponse + type: object + additionalProperties: false + properties: + taskID: + $ref: '../../../common/responses/common.yml#/taskID' + required: + - taskID '400': $ref: '../../../common/responses/BadRequest.yml' '402': diff --git a/specs/composition-full/paths/rules/rule.yml b/specs/composition-full/paths/rules/rule.yml index baccc32088a..d00ac5827d5 100644 --- a/specs/composition-full/paths/rules/rule.yml +++ b/specs/composition-full/paths/rules/rule.yml @@ -53,7 +53,14 @@ put: content: application/json: schema: - $ref: '../../../common/responses/common.yml#/taskID' + title: taskIDResponse + type: object + additionalProperties: false + properties: + taskID: + $ref: '../../../common/responses/common.yml#/taskID' + required: + - taskID '400': $ref: '../../../common/responses/BadRequest.yml' '402': @@ -84,7 +91,14 @@ delete: content: application/json: schema: - $ref: '../../../common/responses/common.yml#/taskID' + title: taskIDResponse + type: object + additionalProperties: false + properties: + taskID: + $ref: '../../../common/responses/common.yml#/taskID' + required: + - taskID '400': $ref: '../../../common/responses/BadRequest.yml' '402':