Skip to content

Commit aa3fa2f

Browse files
authored
refactor: rename RecommendationClient to PersonalizationClient (#634)
1 parent a32af41 commit aa3fa2f

14 files changed

+288
-61
lines changed

build.sbt

+2-1
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,8 @@ scalacOptions ++= Seq(
6262
"UTF-8",
6363
"-unchecked", //Enable additional warnings where generated code depends on assumptions
6464
"-Ywarn-dead-code",
65-
"-Ywarn-numeric-widen"
65+
"-Ywarn-numeric-widen",
66+
"-deprecation:false"
6667
)
6768

6869
headerLicense := Some(

src/main/scala/algolia/AlgoliaClient.scala

+21-3
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,7 @@
2626
package algolia
2727

2828
import algolia.http.HttpPayload
29-
import algolia.objects.{DictionaryEntry, Query}
30-
import algolia.responses.SearchDictionaryResult
29+
import algolia.objects.Query
3130
import org.slf4j.{Logger, LoggerFactory}
3231

3332
import java.nio.charset.Charset
@@ -94,7 +93,11 @@ class AlgoliaClient(
9493

9594
val analyticsHost: String = "https://analytics.algolia.com"
9695
val insightsHost: String = "https://insights.algolia.io"
97-
/* Recommendation default host is set as 'var' because the region might be overridden. */
96+
97+
/* Personalization default host is set as 'var' because the region might be overridden. */
98+
var personalizationHost: String = "https://personalization.us.algolia.com"
99+
100+
@deprecated("use personalization instead", "1.40.0")
98101
var recommendationHost: String = "https://recommendation.us.algolia.com"
99102

100103
val userAgent =
@@ -172,6 +175,8 @@ class AlgoliaClient(
172175
requestAnalytics(payload)
173176
} else if (payload.isInsights) {
174177
requestInsights(payload)
178+
} else if (payload.isPersonalization) {
179+
requestPersonalization(payload)
175180
} else if (payload.isRecommendation) {
176181
requestRecommendation(payload)
177182
} else {
@@ -190,6 +195,19 @@ class AlgoliaClient(
190195
}
191196
}
192197

198+
private[algolia] def requestPersonalization[T: Manifest](
199+
payload: HttpPayload
200+
)(implicit executor: ExecutionContext): Future[T] = {
201+
httpClient.request[T](personalizationHost, headers, payload).andThen {
202+
case Failure(e) =>
203+
logger.debug("Personalization API call failed", e)
204+
Future.failed(
205+
new AlgoliaClientException("Personalization API call failed", e)
206+
)
207+
}
208+
}
209+
210+
@deprecated("use personalization instead", "1.40.0")
193211
private[algolia] def requestRecommendation[T: Manifest](
194212
payload: HttpPayload
195213
)(implicit executor: ExecutionContext): Future[T] = {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
/*
2+
* The MIT License (MIT)
3+
*
4+
* Copyright (c) 2016 Algolia
5+
* http://www.algolia.com/
6+
*
7+
* Permission is hereby granted, free of charge, to any person obtaining a copy
8+
* of this software and associated documentation files (the "Software"), to deal
9+
* in the Software without restriction, including without limitation the rights
10+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11+
* copies of the Software, and to permit persons to whom the Software is
12+
* furnished to do so, subject to the following conditions:
13+
*
14+
* The above copyright notice and this permission notice shall be included in
15+
* all copies or substantial portions of the Software.
16+
*
17+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23+
* THE SOFTWARE.
24+
*/
25+
26+
package algolia.definitions
27+
28+
import algolia.http.{DELETE, GET, HttpPayload, POST}
29+
import algolia.objects.{RequestOptions, SetStrategyRequest}
30+
import org.json4s.Formats
31+
import org.json4s.native.Serialization.write
32+
33+
case class GeStrategyDefinition(
34+
requestOptions: Option[RequestOptions] = None
35+
)(implicit val formats: Formats)
36+
extends Definition {
37+
38+
override type T = GeStrategyDefinition
39+
40+
override def options(
41+
requestOptions: RequestOptions
42+
): GeStrategyDefinition =
43+
copy(requestOptions = Some(requestOptions))
44+
45+
override private[algolia] def build(): HttpPayload = {
46+
HttpPayload(
47+
GET,
48+
Seq("1", "strategies", "personalization"),
49+
isSearch = false,
50+
isPersonalization = true,
51+
requestOptions = requestOptions
52+
)
53+
}
54+
55+
}
56+
57+
case class SetStrategyDefinition(
58+
s: SetStrategyRequest,
59+
requestOptions: Option[RequestOptions] = None
60+
)(implicit val formats: Formats)
61+
extends Definition {
62+
63+
override type T = SetStrategyDefinition
64+
65+
override def options(
66+
requestOptions: RequestOptions
67+
): SetStrategyDefinition =
68+
copy(requestOptions = Some(requestOptions))
69+
70+
override private[algolia] def build(): HttpPayload = {
71+
HttpPayload(
72+
POST,
73+
Seq("1", "strategies", "personalization"),
74+
body = Some(write(s)),
75+
isSearch = false,
76+
isPersonalization = true,
77+
requestOptions = requestOptions
78+
)
79+
}
80+
81+
}
82+
83+
case class GetPersonalizationProfileDefinition(
84+
userToken: String,
85+
requestOptions: Option[RequestOptions] = None
86+
)(implicit val formats: Formats)
87+
extends Definition {
88+
override type T = GetPersonalizationProfileDefinition
89+
90+
override def options(
91+
requestOptions: RequestOptions
92+
): GetPersonalizationProfileDefinition =
93+
copy(requestOptions = Some(requestOptions))
94+
95+
override private[algolia] def build() = {
96+
HttpPayload(
97+
GET,
98+
Seq("1", "profiles", "personalization", userToken),
99+
isSearch = false,
100+
isPersonalization = true,
101+
requestOptions = requestOptions
102+
)
103+
}
104+
}
105+
106+
case class DeletePersonalizationProfileDefinition(
107+
userToken: String,
108+
requestOptions: Option[RequestOptions] = None
109+
)(implicit val formats: Formats)
110+
extends Definition {
111+
override type T = DeletePersonalizationProfileDefinition
112+
113+
override def options(
114+
requestOptions: RequestOptions
115+
): DeletePersonalizationProfileDefinition =
116+
copy(requestOptions = Some(requestOptions))
117+
118+
override private[algolia] def build() = {
119+
HttpPayload(
120+
DELETE,
121+
Seq("1", "profiles", userToken),
122+
isSearch = false,
123+
isPersonalization = true,
124+
requestOptions = requestOptions
125+
)
126+
}
127+
}

src/main/scala/algolia/definitions/RecommendationDefinition.scala

+2
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import algolia.objects.{RequestOptions, SetStrategyRequest}
3030
import org.json4s.Formats
3131
import org.json4s.native.Serialization.write
3232

33+
@deprecated("use personalization instead", "1.41.0")
3334
case class GetRecommendationStrategyDefinition(
3435
requestOptions: Option[RequestOptions] = None
3536
)(implicit val formats: Formats)
@@ -54,6 +55,7 @@ case class GetRecommendationStrategyDefinition(
5455

5556
}
5657

58+
@deprecated("use personalization instead", "1.41.0")
5759
case class SetRecommendationStrategyDefinition(
5860
s: SetStrategyRequest,
5961
requestOptions: Option[RequestOptions] = None

src/main/scala/algolia/definitions/StrategyDefinition.scala

+2
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import algolia.objects.RequestOptions
3131
import org.json4s.Formats
3232
import org.json4s.native.Serialization.write
3333

34+
@deprecated("use personalization instead", "1.41.0")
3435
case class GetPersonalizationStrategyDefinition(
3536
requestOptions: Option[RequestOptions] = None
3637
)(implicit val formats: Formats)
@@ -54,6 +55,7 @@ case class GetPersonalizationStrategyDefinition(
5455

5556
}
5657

58+
@deprecated("use personalization instead", "1.41.0")
5759
case class SetPersonalizationStrategyDefinition(
5860
s: Strategy,
5961
requestOptions: Option[RequestOptions] = None

src/main/scala/algolia/dsl/DeleteDsl.scala

+20-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ package algolia.dsl
2828
import algolia.definitions._
2929
import algolia.inputs.SafeDeleteObjectOperation
3030
import algolia.objects.{Dictionary, DictionaryEntry}
31-
import algolia.responses.Task
31+
import algolia.responses.{DeletePersonalizationProfileResponse, Task}
3232
import algolia.{AlgoliaClient, Executable}
3333
import org.json4s.Formats
3434

@@ -66,6 +66,10 @@ trait DeleteDsl {
6666

6767
def dictionary(dictionary: Dictionary[_ <: DictionaryEntry]) =
6868
DeleteDictionaryDefinition(dictionary)
69+
70+
// Personalization
71+
def personalizationProfile(userToken: String) =
72+
DeletePersonalizationProfileDefinition(userToken)
6973
}
7074

7175
implicit object DeleteObjectDefinitionExecutable
@@ -105,4 +109,19 @@ trait DeleteDsl {
105109
}
106110
}
107111

112+
implicit object DeletePersonalizationProfileExecutable
113+
extends Executable[
114+
DeletePersonalizationProfileDefinition,
115+
DeletePersonalizationProfileResponse
116+
] {
117+
override def apply(
118+
client: AlgoliaClient,
119+
query: DeletePersonalizationProfileDefinition
120+
)(
121+
implicit executor: ExecutionContext
122+
): Future[DeletePersonalizationProfileResponse] = {
123+
client.request[DeletePersonalizationProfileResponse](query.build())
124+
}
125+
}
126+
108127
}

src/main/scala/algolia/dsl/GetDsl.scala

+38-2
Original file line numberDiff line numberDiff line change
@@ -68,15 +68,24 @@ trait GetDsl {
6868
def userID(userID: String) = GetUserIDDefinition(userID)
6969

7070
// Personalization
71+
def strategy(): GeStrategyDefinition = GeStrategyDefinition()
72+
7173
@deprecated(
72-
"Method is deprecated, please use personalizationRecommendationStrategy methods instead",
74+
"Method is deprecated, please use strategy methods instead",
7375
"1.34"
7476
)
7577
def personalizationStrategy() = GetPersonalizationStrategyDefinition()
7678

79+
@deprecated(
80+
"Method is deprecated, please use strategy methods instead",
81+
"1.40.0"
82+
)
7783
def personalizationRecommendationStrategy() =
7884
GetRecommendationStrategyDefinition()
7985

86+
def personalizationProfile(userToken: String) =
87+
GetPersonalizationProfileDefinition(userToken)
88+
8089
def dictionarySettings: GetSettingsDictionaryDefinition =
8190
GetSettingsDictionaryDefinition()
8291

@@ -122,8 +131,17 @@ trait GetDsl {
122131
}
123132
}
124133

134+
implicit object GetStrategyExecutable
135+
extends Executable[GeStrategyDefinition, GetStrategyResponse] {
136+
override def apply(client: AlgoliaClient, query: GeStrategyDefinition)(
137+
implicit executor: ExecutionContext
138+
): Future[GetStrategyResponse] = {
139+
client.request[GetStrategyResponse](query.build())
140+
}
141+
}
142+
125143
@deprecated(
126-
"Method is deprecated, please use personalizationRecommendationStrategy methods instead",
144+
"Method is deprecated, please use strategy methods instead",
127145
"1.34"
128146
)
129147
implicit object GetPersonalizationStrategyExecutable
@@ -136,6 +154,10 @@ trait GetDsl {
136154
}
137155
}
138156

157+
@deprecated(
158+
"Method is deprecated, please use strategy methods instead",
159+
"1.40.0"
160+
)
139161
implicit object GetPersonalizationRecommendationStrategy
140162
extends Executable[
141163
GetRecommendationStrategyDefinition,
@@ -149,4 +171,18 @@ trait GetDsl {
149171
}
150172
}
151173

174+
implicit object GetPersonalizationProfileExecutable
175+
extends Executable[
176+
GetPersonalizationProfileDefinition,
177+
PersonalizationProfileResponse
178+
] {
179+
override def apply(
180+
client: AlgoliaClient,
181+
query: GetPersonalizationProfileDefinition
182+
)(
183+
implicit executor: ExecutionContext
184+
): Future[PersonalizationProfileResponse] = {
185+
client.request[PersonalizationProfileResponse](query.build())
186+
}
187+
}
152188
}

0 commit comments

Comments
 (0)