Skip to content

Commit 0ea1d0c

Browse files
raed667bengreenbankshortcuts
authored
feat(clients): add real-time personalization to advanced-personalization [PRED-3870] (#4976)
Co-authored-by: Ben Greenbank <[email protected]> Co-authored-by: Clément Vannicatte <[email protected]>
1 parent fed9be0 commit 0ea1d0c

File tree

26 files changed

+289
-160
lines changed

26 files changed

+289
-160
lines changed

clients/algoliasearch-client-javascript/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
"packages/*"
88
],
99
"scripts": {
10-
"build": "lerna run build --skip-nx-cache --scope '@algolia/requester-testing' --scope '@algolia/logger-console' --scope 'algoliasearch' --scope '@algolia/client-composition' --scope '@algolia/composition' --include-dependencies",
10+
"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 ",
1111
"clean": "lerna run clean",
1212
"release:publish": "tsc --project scripts/tsconfig.json && node scripts/dist/publish.js",
1313
"test": "lerna run test $*",

clients/algoliasearch-client-javascript/yarn.lock

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,23 @@ __metadata:
55
version: 8
66
cacheKey: 10
77

8+
"@algolia/advanced-personalization@workspace:packages/advanced-personalization":
9+
version: 0.0.0-use.local
10+
resolution: "@algolia/advanced-personalization@workspace:packages/advanced-personalization"
11+
dependencies:
12+
"@algolia/client-common": "npm:5.27.0"
13+
"@algolia/requester-browser-xhr": "npm:5.27.0"
14+
"@algolia/requester-fetch": "npm:5.27.0"
15+
"@algolia/requester-node-http": "npm:5.27.0"
16+
"@arethetypeswrong/cli": "npm:0.18.2"
17+
"@types/node": "npm:22.15.30"
18+
publint: "npm:0.3.12"
19+
rollup: "npm:4.41.0"
20+
tsup: "npm:8.5.0"
21+
typescript: "npm:5.8.3"
22+
languageName: unknown
23+
linkType: soft
24+
825
"@algolia/client-abtesting@npm:5.27.0, @algolia/client-abtesting@workspace:packages/client-abtesting":
926
version: 0.0.0-use.local
1027
resolution: "@algolia/client-abtesting@workspace:packages/client-abtesting"

config/clients.config.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,11 @@
163163
"name": "personalization",
164164
"output": "clients/algoliasearch-client-javascript/packages/client-personalization"
165165
},
166+
{
167+
"name": "advanced-personalization",
168+
"output": "clients/algoliasearch-client-javascript/packages/advanced-personalization",
169+
"isStandaloneClient": true
170+
},
166171
{
167172
"name": "query-suggestions",
168173
"output": "clients/algoliasearch-client-javascript/packages/client-query-suggestions"

config/clients.schema.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
"insights",
1919
"monitoring",
2020
"personalization",
21+
"advanced-personalization",
2122
"query-suggestions",
2223
"recommend",
2324
"search"
@@ -41,6 +42,7 @@
4142
"insights",
4243
"monitoring",
4344
"personalization",
45+
"advanced-personalization",
4446
"query-suggestions",
4547
"recommend",
4648
"search"

generators/src/main/java/com/algolia/codegen/cts/tests/TestsRequest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,11 +83,11 @@ public void run(Map<String, CodegenModel> models, Map<String, CodegenOperation>
8383

8484
bundle.put(
8585
"e2eAppID",
86-
client.startsWith("composition") || client.startsWith("realtime") ? "METIS_APPLICATION_ID" : "ALGOLIA_APPLICATION_ID"
86+
client.startsWith("composition") || client.startsWith("advanced-personalization") ? "METIS_APPLICATION_ID" : "ALGOLIA_APPLICATION_ID"
8787
);
8888
bundle.put(
8989
"e2eApiKey",
90-
client.startsWith("composition") || client.startsWith("realtime")
90+
client.startsWith("composition") || client.startsWith("advanced-personalization")
9191
? "METIS_API_KEY"
9292
: (client.equals("monitoring") ? "MONITORING_API_KEY" : "ALGOLIA_ADMIN_KEY")
9393
);
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import { advancedPersonalizationClient } from '@algolia/advanced-personalization';
2+
import { ApiError } from '@algolia/client-common';
3+
4+
const appId = process.env.ALGOLIA_APPLICATION_ID || '**** APP_ID *****';
5+
const apiKey = process.env.ALGOLIA_RECOMMENDATION_KEY || '**** RECOMMENDATION_API_KEY *****';
6+
7+
// Init client with appId and apiKey
8+
const client = advancedPersonalizationClient(appId, apiKey, 'eu');
9+
10+
async function testPersonalization() {
11+
try {
12+
const res = await client.computeRealtimeUser({ userToken: 'userToken' });
13+
14+
console.log(`[OK]`, res);
15+
} catch (e) {
16+
if (e instanceof ApiError) {
17+
return console.log(`[${e.status}] ${e.message}`, e.stackTrace);
18+
}
19+
20+
console.log('[ERROR]', e);
21+
}
22+
}
23+
24+
testPersonalization();

playground/javascript/node/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,14 @@
77
"start": "tsc && node --env-file=../../.env dist/$0.js"
88
},
99
"dependencies": {
10+
"@algolia/advanced-personalization": "link:../../../clients/algoliasearch-client-javascript/packages/advanced-personalization",
1011
"@algolia/client-abtesting": "link:../../../clients/algoliasearch-client-javascript/packages/client-abtesting",
1112
"@algolia/client-analytics": "link:../../../clients/algoliasearch-client-javascript/packages/client-analytics",
1213
"@algolia/client-common": "link:../../../clients/algoliasearch-client-javascript/packages/client-common",
1314
"@algolia/client-composition": "link:../../../clients/algoliasearch-client-javascript/packages/client-composition",
1415
"@algolia/client-insights": "link:../../../clients/algoliasearch-client-javascript/packages/client-insights",
1516
"@algolia/client-personalization": "link:../../../clients/algoliasearch-client-javascript/packages/client-personalization",
1617
"@algolia/client-query-suggestions": "link:../../../clients/algoliasearch-client-javascript/packages/client-query-suggestions",
17-
"@algolia/client-realtime-personalization": "link:../../../clients/algoliasearch-client-javascript/packages/client-realtime-personalization",
1818
"@algolia/client-search": "link:../../../clients/algoliasearch-client-javascript/packages/client-search",
1919
"@algolia/composition": "link:../../../clients/algoliasearch-client-javascript/packages/composition",
2020
"@algolia/ingestion": "link:../../../clients/algoliasearch-client-javascript/packages/ingestion",

scripts/common.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -71,13 +71,9 @@ export const GENERATORS = Object.entries(clientsConfig).reduce(
7171

7272
export const LANGUAGES = [...new Set(Object.values(GENERATORS).map((gen) => gen.language))];
7373

74-
// `crawler` and `advanced-personalization` are manually added so we can still bundled and validate the specs
74+
// `crawler` is manually added so we can still bundled and validate the specs
7575
// the entry can be removed once at least one client is generated
76-
export const CLIENTS = [
77-
...new Set(Object.values(GENERATORS).map((gen) => gen.client)),
78-
'crawler',
79-
'advanced-personalization',
80-
];
76+
export const CLIENTS = [...new Set(Object.values(GENERATORS).map((gen) => gen.client)), 'crawler'];
8177

8278
export async function run(command: string, { errorMessage, cwd, language }: RunOptions = {}): Promise<string> {
8379
const realCwd = path.resolve(ROOT_DIR, cwd ?? '.');

specs/advanced-personalization/common/enums.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,11 @@ sourceType:
2121
title: type
2222
type: string
2323
enum: [insights]
24+
25+
strategy:
26+
type: string
27+
enum:
28+
- session
29+
- historical
30+
- hybrid
31+
example: 'session'

specs/realtime-personalization/paths/computeUser.yml renamed to specs/advanced-personalization/paths/computeRealtimeUser.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
post:
22
tags:
33
- users
4-
operationId: computeUser
4+
operationId: computeRealtimeUser
55
x-acl:
66
- recommendation
77
summary: Compute the user's personalization profile

specs/realtime-personalization/paths/getUser.yml renamed to specs/advanced-personalization/paths/getRealtimeUser.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
get:
22
tags:
33
- users
4-
operationId: getUser
4+
operationId: getRealtimeUser
55
x-acl:
66
- recommendation
77
summary: Retrieve the user's personalization profile
@@ -14,7 +14,7 @@ get:
1414
content:
1515
application/json:
1616
schema:
17-
$ref: '../common/schemas/user.yml#/user'
17+
$ref: '../common/schemas/RealtimeUser.yml#/user'
1818
'400':
1919
$ref: '../../common/responses/BadRequest.yml'
2020
'402':

specs/advanced-personalization/spec.yml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,3 +114,19 @@ paths:
114114

115115
/2/users/{userID}:
116116
$ref: 'paths/user.yml'
117+
118+
# #################
119+
# ### Real-time ###
120+
# #################
121+
122+
/2/realtime/users/{userToken}:
123+
$ref: 'paths/getRealtimeUser.yml'
124+
125+
/2/realtime/users/{userToken}/compute:
126+
$ref: 'paths/computeRealtimeUser.yml'
127+
128+
# ###############
129+
# ### Helpers ###
130+
# ###############
131+
/setClientApiKey:
132+
$ref: '../common/helpers/setClientApiKey.yml#/method'

specs/realtime-personalization/common/enums.yml

Lines changed: 0 additions & 7 deletions
This file was deleted.

specs/realtime-personalization/spec.yml

Lines changed: 0 additions & 54 deletions
This file was deleted.
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
[
2+
{
3+
"testName": "throws when region is not given",
4+
"autoCreateClient": false,
5+
"steps": [
6+
{
7+
"type": "createClient",
8+
"parameters": {
9+
"appId": "my-app-id",
10+
"apiKey": "my-api-key",
11+
"region": ""
12+
},
13+
"expected": {
14+
"error": "`region` is required and must be one of the following: eu, us"
15+
}
16+
}
17+
]
18+
},
19+
{
20+
"testName": "throws when incorrect region is given",
21+
"autoCreateClient": false,
22+
"steps": [
23+
{
24+
"type": "createClient",
25+
"parameters": {
26+
"appId": "my-app-id",
27+
"apiKey": "my-api-key",
28+
"region": "not_a_region"
29+
},
30+
"expected": {
31+
"error": "`region` is required and must be one of the following: eu, us"
32+
}
33+
}
34+
]
35+
},
36+
{
37+
"testName": "does not throw when region is given",
38+
"autoCreateClient": false,
39+
"steps": [
40+
{
41+
"type": "createClient",
42+
"parameters": {
43+
"appId": "my-app-id",
44+
"apiKey": "my-api-key",
45+
"region": "us"
46+
}
47+
}
48+
]
49+
}
50+
]

tests/CTS/client/realtime-personalization/api.json

Lines changed: 0 additions & 19 deletions
This file was deleted.
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
[
2+
{
3+
"parameters": {
4+
"userToken": "foo"
5+
},
6+
"request": {
7+
"path": "/2/realtime/users/foo/compute",
8+
"method": "POST"
9+
}
10+
}
11+
]
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
[
2+
{
3+
"parameters": {
4+
"userID": "user-1"
5+
},
6+
"request": {
7+
"path": "/2/users/user-1",
8+
"method": "DELETE"
9+
}
10+
}
11+
]
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
[
2+
{
3+
"request": {
4+
"path": "/2/config",
5+
"method": "GET"
6+
}
7+
}
8+
]
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
[
2+
{
3+
"parameters": {
4+
"userID": "user-1"
5+
},
6+
"request": {
7+
"path": "/2/users/user-1",
8+
"method": "GET"
9+
}
10+
}
11+
]
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
[
2+
{
3+
"parameters": {
4+
"indices": ["indexName"]
5+
},
6+
"request": {
7+
"path": "/2/users",
8+
"method": "GET",
9+
"queryParameters": {
10+
"indices": "indexName"
11+
}
12+
}
13+
}
14+
]

0 commit comments

Comments
 (0)