Skip to content

feat(clients): add collections #5224

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 8 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion clients/algoliasearch-client-javascript/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
"packages/*"
],
"scripts": {
"build": "lerna run build --skip-nx-cache --scope '@algolia/requester-testing' --scope '@algolia/logger-console' --scope 'algoliasearch' --scope '@algolia/client-composition' --scope '@algolia/composition' --scope '@algolia/advanced-personalization' --include-dependencies ",
"build": "lerna run build --skip-nx-cache --scope '@algolia/requester-testing' --scope '@algolia/logger-console' --scope 'algoliasearch' --scope '@algolia/collections' --scope '@algolia/client-composition' --scope '@algolia/composition' --scope '@algolia/advanced-personalization' --include-dependencies ",
"clean": "lerna run clean",
"release:publish": "tsc --project scripts/tsconfig.json && node scripts/dist/publish.js",
"test": "lerna run test $*",
Expand Down
17 changes: 17 additions & 0 deletions clients/algoliasearch-client-javascript/yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,23 @@ __metadata:
languageName: unknown
linkType: soft

"@algolia/collections@workspace:packages/collections":
version: 0.0.0-use.local
resolution: "@algolia/collections@workspace:packages/collections"
dependencies:
"@algolia/client-common": "npm:5.35.0"
"@algolia/requester-browser-xhr": "npm:5.35.0"
"@algolia/requester-fetch": "npm:5.35.0"
"@algolia/requester-node-http": "npm:5.35.0"
"@arethetypeswrong/cli": "npm:0.18.2"
"@types/node": "npm:22.17.0"
publint: "npm:0.3.12"
rollup: "npm:4.41.0"
tsup: "npm:8.5.0"
typescript: "npm:5.9.2"
languageName: unknown
linkType: soft

"@algolia/composition@workspace:packages/composition":
version: 0.0.0-use.local
resolution: "@algolia/composition@workspace:packages/composition"
Expand Down
19 changes: 19 additions & 0 deletions config/clients.config.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
"abtesting",
"abtesting-v3",
"analytics",
"collections",
"composition",
"ingestion",
"insights",
Expand Down Expand Up @@ -39,6 +40,10 @@
"name": "abtesting-v3",
"output": "clients/algoliasearch-client-dart/packages/client_abtesting_v3"
},
{
"name": "collections",
"output": "clients/algoliasearch-client-dart/packages/client_collections"
},
{
"name": "composition",
"output": "clients/algoliasearch-client-dart/packages/client_composition"
Expand Down Expand Up @@ -76,6 +81,7 @@
"abtesting",
"abtesting-v3",
"analytics",
"collections",
"composition",
"ingestion",
"insights",
Expand Down Expand Up @@ -105,6 +111,7 @@
"abtesting",
"abtesting-v3",
"analytics",
"collections",
"composition",
"ingestion",
"insights",
Expand Down Expand Up @@ -153,6 +160,12 @@
"name": "analytics",
"output": "clients/algoliasearch-client-javascript/packages/client-analytics"
},
{
"name": "collections",
"output": "clients/algoliasearch-client-javascript/packages/collections",
"isStandaloneClient": true,
"clientName": "collections"
},
{
"name": "composition",
"output": "clients/algoliasearch-client-javascript/packages/composition",
Expand Down Expand Up @@ -218,6 +231,7 @@
"abtesting",
"abtesting-v3",
"analytics",
"collections",
"composition",
"ingestion",
"insights",
Expand Down Expand Up @@ -247,6 +261,7 @@
"abtesting",
"abtesting-v3",
"analytics",
"collections",
"composition",
"ingestion",
"insights",
Expand Down Expand Up @@ -276,6 +291,7 @@
"abtesting",
"abtesting-v3",
"analytics",
"collections",
"composition",
"ingestion",
"insights",
Expand Down Expand Up @@ -312,6 +328,7 @@
"abtesting",
"abtesting-v3",
"analytics",
"collections",
"composition",
"ingestion",
"insights",
Expand Down Expand Up @@ -341,6 +358,7 @@
"abtesting",
"abtesting-v3",
"analytics",
"collections",
"composition",
"ingestion",
"insights",
Expand Down Expand Up @@ -370,6 +388,7 @@
"abtesting",
"abtesting-v3",
"analytics",
"collections",
"composition",
"ingestion",
"insights",
Expand Down
2 changes: 2 additions & 0 deletions config/clients.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
"abtesting",
"abtesting-v3",
"analytics",
"collections",
"composition",
"ingestion",
"insights",
Expand All @@ -38,6 +39,7 @@
"abtesting",
"abtesting-v3",
"analytics",
"collections",
"composition",
"composition-full",
"ingestion",
Expand Down
3 changes: 2 additions & 1 deletion config/generation.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -30,14 +30,14 @@ export const patterns = [
// Dart
'!clients/algoliasearch-client-dart/**',
'clients/algoliasearch-client-dart/packages/*/pubspec.yaml',
'clients/algoliasearch-client-dart/packages/*/build.yaml',
'clients/algoliasearch-client-dart/packages/*/lib/*.dart',
'clients/algoliasearch-client-dart/packages/*/lib/src/*.dart',
'clients/algoliasearch-client-dart/packages/client_core/pubspec.yaml',
'clients/algoliasearch-client-dart/packages/*/lib/src/api/**',
'clients/algoliasearch-client-dart/packages/*/lib/src/model/**',
'!clients/algoliasearch-client-dart/packages/client_core/**',
'clients/algoliasearch-client-dart/packages/client_core/lib/src/version.dart',
'!clients/algoliasearch-client-dart/packages/*/lib/src/extension.dart',
'!clients/algoliasearch-client-dart/packages/algoliasearch/lib/algoliasearch.dart',

// GO
Expand Down Expand Up @@ -90,6 +90,7 @@ export const patterns = [

// PHP
'!clients/algoliasearch-client-php/**',
'clients/algoliasearch-client-php/lib/FormDataProcessor.php',
'clients/algoliasearch-client-php/lib/Api/*',
'clients/algoliasearch-client-php/lib/Model/**',
'!clients/algoliasearch-client-php/lib/Model/AbstractModel.php',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,7 @@ public void processOpts() {
supportingFiles.removeIf(file -> file.getTemplateFile().contains("README"));

supportingFiles.add(new SupportingFile("version.mustache", srcFolder, "version.dart"));
supportingFiles.add(new SupportingFile("extension.mustache", srcFolder, "extension.dart"));
supportingFiles.add(new SupportingFile("LICENSE", "", "LICENSE"));
supportingFiles.add(new SupportingFile("LICENSE", "../client_core/", "LICENSE"));

Expand Down
24 changes: 24 additions & 0 deletions playground/javascript/node/collections.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import { ApiError } from '@algolia/client-common';
import { collectionsClient } from '@algolia/collections';

const appId = process.env.ALGOLIA_APPLICATION_ID || '**** APP_ID *****';
const apiKey = process.env.ALGOLIA_ADMIN_KEY || '**** ADMIN_KEY *****';
const indexName = process.env.SEARCH_INDEX || '**** INDEX_NAME *****';

// Init client with appId and apiKey
const client = collectionsClient(appId, apiKey);

async function testCollections() {
try {
// list collections
console.log(await client.listCollections({ indexName }));
} catch (e) {
if (e instanceof ApiError) {
return console.log(`[${e.status}] ${e.message}`, e.stackTrace, e);

Check warning on line 17 in playground/javascript/node/collections.ts

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

playground/javascript/node/collections.ts#L17

Detected string concatenation with a non-literal variable in a util.format / console.log function.
}

console.log('[ERROR]', e);
}
}

testCollections();
1 change: 1 addition & 0 deletions playground/javascript/node/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
"@algolia/client-personalization": "link:../../../clients/algoliasearch-client-javascript/packages/client-personalization",
"@algolia/client-query-suggestions": "link:../../../clients/algoliasearch-client-javascript/packages/client-query-suggestions",
"@algolia/client-search": "link:../../../clients/algoliasearch-client-javascript/packages/client-search",
"@algolia/collections": "link:../../../clients/algoliasearch-client-javascript/packages/collections",
"@algolia/composition": "link:../../../clients/algoliasearch-client-javascript/packages/composition",
"@algolia/ingestion": "link:../../../clients/algoliasearch-client-javascript/packages/ingestion",
"@algolia/monitoring": "link:../../../clients/algoliasearch-client-javascript/packages/monitoring",
Expand Down
40 changes: 40 additions & 0 deletions specs/collections/common/parameters.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
indexName:
name: indexName
in: query
required: true
description: Name of the index.
schema:
type: string
example: ALGOLIA_INDEX_NAME

paginationLimit:
name: limit
in: query
description: Number of items to fetch.
required: false
schema:
$ref: './schemas/pagination.yml#/limit'

paginationOffset:
name: offset
in: query
description: Number of items to skip.
required: false
schema:
$ref: './schemas/pagination.yml#/offset'

pathCollectionID:
name: collectionID
in: path
required: true
description: Unique identifier of a collection.
schema:
$ref: './schemas/common.yml#/collectionID'

query:
name: query
in: query
required: false
description: Query to filter collections.
schema:
$ref: './schemas/common.yml#/query'
10 changes: 10 additions & 0 deletions specs/collections/common/responses/CollectionNotFound.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
description: Collection not found.
content:
application/json:
schema:
title: collectionNotFoundResponse
type: object
properties:
message:
type: string
example: 'Collection not found'
85 changes: 85 additions & 0 deletions specs/collections/common/schemas/collection.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
Collection:
type: object
properties:
id:
type: string
example: '5db3039e-04b5-4ed6-a00e-ba3304032c5a'
name:
type: string
example: 'Summer Deals'
indexName:
type: string
example: 'prod_products_EN'
createdAt:
type: string
# format: date-time
description: |
Date and time when the collection was created, in RFC 3339 format.
example: '2024-10-07T00:00:00Z'
updatedAt:
type: string
# format: date-time
description: |
Date and time when the collection was last updated, in RFC 3339 format.
example: '2024-10-07T00:00:00Z'
status:
$ref: '#/CollectionStatus'
conditions:
$ref: 'condition.yml#/Conditions'
records:
type: array
items:
type: string

CollectionStatus:
type: string
description: |
Collection commit status.
Only returned if the request API key has write ACLs.
enum:
- COMMITTED
- COMMITTING
- TO_COMMIT

CollectionUpsert:
type: object
description: API request body for upserting a Collection.
properties:
id:
type: string
indexName:
type: string
name:
type: string
description:
type: string
add:
type: array
description: a list of objectIDs.
minItems: 0
items:
type: string
remove:
type: array
description: a list of objectIDs.
minItems: 0
items:
type: string
conditions:
$ref: 'condition.yml#/Conditions'
required:
- indexName
- name

CollectionsResponse:
type: object
allOf:
- type: object
properties:
items:
type: array
items:
$ref: '#/Collection'
required:
- items
- $ref: 'pagination.yml#/CollectionPagination'
10 changes: 10 additions & 0 deletions specs/collections/common/schemas/common.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
collectionID:
type: string
# format: uuid
description: Universally unique identifier (UUID) of a collection.
example: 6c02aeb1-775e-418e-870b-1faccd4b2c0f

query:
type: string
description: Query to filter collections.
example: Summer collection
8 changes: 8 additions & 0 deletions specs/collections/common/schemas/condition.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
Conditions:
type: object
description: Conditions to filter records.
properties:
facetFilters:
$ref: '../../../common/schemas/SearchParams.yml#/facetFilters'
numericFilters:
$ref: '../../../common/schemas/SearchParams.yml#/numericFilters'
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

do we actually support everything? I think the no-code/go transformation didn't implement TO in numeric right?

30 changes: 30 additions & 0 deletions specs/collections/common/schemas/pagination.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
CollectionPagination:
type: object
description: Paginated API response.
additionalProperties: false
properties:
total:
type: integer
minimum: 0
description: Total number of items across all pages.
limit:
$ref: '#/limit'
offset:
$ref: '#/offset'
required:
- total
- limit
- offset

limit:
type: integer
description: Number of items to fetch.
minimum: 1
maximum: 50
default: 10

offset:
type: integer
description: Number of items to skip.
minimum: 0
default: 0
Loading
Loading