Skip to content

Commit

Permalink
fix(specs): ingestion push task payload [skip-bc] (generated)
Browse files Browse the repository at this point in the history
algolia/api-clients-automation#3607

Co-authored-by: algolia-bot <accounts+algolia-api-client-bot@algolia.com>
Co-authored-by: Clément Vannicatte <vannicattec@gmail.com>
Co-authored-by: Pierre Millot <pierre.millot@algolia.com>
  • Loading branch information
3 people committed Aug 29, 2024
1 parent 2ea29a2 commit 9f1e184
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 16 deletions.
12 changes: 6 additions & 6 deletions src/main/scala/algoliasearch/api/IngestionClient.scala
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ import algoliasearch.ingestion.AuthenticationSortKeys._
import algoliasearch.ingestion.AuthenticationType._
import algoliasearch.ingestion.AuthenticationUpdate
import algoliasearch.ingestion.AuthenticationUpdateResponse
import algoliasearch.ingestion.BatchWriteParams
import algoliasearch.ingestion.DeleteResponse
import algoliasearch.ingestion.Destination
import algoliasearch.ingestion.DestinationCreate
Expand All @@ -38,6 +37,7 @@ import algoliasearch.ingestion.ListTasksResponseV1
import algoliasearch.ingestion.ListTransformationsResponse
import algoliasearch.ingestion.OrderKeys._
import algoliasearch.ingestion.PlatformWithNone
import algoliasearch.ingestion.PushTaskPayload
import algoliasearch.ingestion.Run
import algoliasearch.ingestion.RunListResponse
import algoliasearch.ingestion.RunResponse
Expand Down Expand Up @@ -1217,20 +1217,20 @@ class IngestionClient(
*
* @param taskID
* Unique identifier of a task.
* @param batchWriteParams
* @param pushTaskPayload
* Request body of a Search API `batch` request that will be pushed in the Connectors pipeline.
*/
def pushTask(taskID: String, batchWriteParams: BatchWriteParams, requestOptions: Option[RequestOptions] = None)(
implicit ec: ExecutionContext
def pushTask(taskID: String, pushTaskPayload: PushTaskPayload, requestOptions: Option[RequestOptions] = None)(implicit
ec: ExecutionContext
): Future[RunResponse] = Future {
requireNotNull(taskID, "Parameter `taskID` is required when calling `pushTask`.")
requireNotNull(batchWriteParams, "Parameter `batchWriteParams` is required when calling `pushTask`.")
requireNotNull(pushTaskPayload, "Parameter `pushTaskPayload` is required when calling `pushTask`.")

val request = HttpRequest
.builder()
.withMethod("POST")
.withPath(s"/2/tasks/${escape(taskID)}/push")
.withBody(batchWriteParams)
.withBody(pushTaskPayload)
.build()
execute[RunResponse](request, requestOptions)
}
Expand Down
3 changes: 2 additions & 1 deletion src/main/scala/algoliasearch/ingestion/JsonSupport.scala
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,8 @@ object JsonSupport {
TriggerSerializer

private def classMapSerializers: Seq[Serializer[_]] = Seq[Serializer[_]]() :+
new ErrorBaseSerializer()
new ErrorBaseSerializer() :+
new PushTaskRecordsSerializer()

implicit val format: Formats = DefaultFormats ++ enumSerializers ++ oneOfsSerializers ++ classMapSerializers
implicit val serialization: org.json4s.Serialization = org.json4s.native.Serialization
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,9 @@ package algoliasearch.ingestion

import algoliasearch.ingestion.Action._

/** BatchRequest
*
* @param body
* Operation arguments (varies with specified `action`).
/** PushTaskPayload
*/
case class BatchRequest(
case class PushTaskPayload(
action: Action,
body: Any
records: Seq[PushTaskRecords]
)
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,47 @@
*/
package algoliasearch.ingestion

/** Batch parameters.
import org.json4s.MonadicJValue.jvalueToMonadic
import org.json4s.{Extraction, Formats, JField, JObject, JValue, Serializer, TypeInfo}

/** PushTaskRecords
*
* @param objectID
* Unique record identifier.
*/
case class BatchWriteParams(
requests: Seq[BatchRequest]
case class PushTaskRecords(
objectID: String,
additionalProperties: Option[List[JField]] = None
)

class PushTaskRecordsSerializer extends Serializer[PushTaskRecords] {

override def deserialize(implicit format: Formats): PartialFunction[(TypeInfo, JValue), PushTaskRecords] = {
case (TypeInfo(clazz, _), json) if clazz == classOf[PushTaskRecords] =>
json match {
case jobject: JObject =>
val formats = format - this
val mf = manifest[PushTaskRecords]
val obj = Extraction.extract[PushTaskRecords](jobject)(formats, mf)

val fields = Set("objectID")
val additionalProperties = jobject removeField {
case (name, _) if fields.contains(name) => true
case _ => false
}
additionalProperties.values match {
case JObject(fieldsList) => obj copy (additionalProperties = Some(fieldsList))
case _ => obj
}
case _ => throw new IllegalArgumentException(s"Can't deserialize $json as PushTaskRecords")
}
}

override def serialize(implicit format: Formats): PartialFunction[Any, JValue] = { case value: PushTaskRecords =>
val formats = format - this // remove current serializer from formats to avoid stackoverflow
value.additionalProperties match {
case Some(fields) => Extraction.decompose(value.copy(additionalProperties = None))(formats) merge JObject(fields)
case None => Extraction.decompose(value)(formats)
}
}
}

0 comments on commit 9f1e184

Please sign in to comment.