Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
18 changes: 1 addition & 17 deletions src/main/scala/io/flow/stream/Controller.scala
Original file line number Diff line number Diff line change
Expand Up @@ -363,27 +363,11 @@ case class Controller() extends io.flow.build.Controller {
}
}

// Custom Writes for CapturedType to output both upsertedDiscriminator (for backward compatibility)
// and upsertedDiscriminators (new format). Can remove upsertedDiscriminator once all clients updated.
private[stream] implicit val capturedTypeWrites: play.api.libs.json.Writes[CapturedType] = {
import play.api.libs.json._
import io.apibuilder.spec.v0.models.json._
(ct: CapturedType) =>
Json.obj(
"fieldName" -> ct.fieldName,
"typeName" -> ct.typeName,
"modelType" -> ct.modelType,
"upsertedDiscriminator" -> ct.upsertedDiscriminators.headOption.getOrElse[String](""),
"deletedDiscriminator" -> ct.deletedDiscriminator,
"deletedHasModel" -> ct.deletedHasModel,
"upsertedDiscriminators" -> ct.upsertedDiscriminators,
)
}

def saveDescriptor(buildType: BuildType, output: Path, descriptor: StreamDescriptor): Unit = {
import play.api.libs.json._
import io.apibuilder.spec.v0.models.json._

implicit val w1: Writes[CapturedType] = Json.writes[CapturedType]
implicit val w2: Writes[KinesisStream] = Json.writes[KinesisStream]
implicit val w3: Writes[StreamDescriptor] = Json.writes[StreamDescriptor]
val path = output.resolve(s"flow-$buildType-streams.json").toFile
Expand Down
44 changes: 0 additions & 44 deletions src/test/scala/io/flow/stream/ControllerSpec.scala
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package io.flow.stream
import io.apibuilder.spec.v0.models.{Field, Model}
import org.scalatest.funspec.AnyFunSpec
import org.scalatest.matchers.should.Matchers
import play.api.libs.json.Json

class ControllerSpec extends AnyFunSpec with Matchers {

Expand All @@ -19,49 +18,6 @@ class ControllerSpec extends AnyFunSpec with Matchers {
Field(name = name, `type` = "string", required = true)
}

describe("CapturedType JSON serialization") {
val controller = Controller()
import controller.capturedTypeWrites

it("serializes with single upsertedDiscriminator for backward compatibility") {
val capturedType = CapturedType(
fieldName = "order",
typeName = "order",
modelType = makeModel("order", Seq(makeIdField())),
upsertedDiscriminators = Seq("order_upserted"),
deletedDiscriminator = "order_deleted",
deletedHasModel = true,
)

val json = Json.toJson(capturedType)

(json \ "upsertedDiscriminator").as[String] shouldBe "order_upserted"
(json \ "upsertedDiscriminators").as[Seq[String]] shouldBe Seq("order_upserted")
(json \ "fieldName").as[String] shouldBe "order"
(json \ "typeName").as[String] shouldBe "order"
(json \ "deletedDiscriminator").as[String] shouldBe "order_deleted"
(json \ "deletedHasModel").as[Boolean] shouldBe true
}

it("serializes multiple upsertedDiscriminators (inserted + updated)") {
val capturedType = CapturedType(
fieldName = "item",
typeName = "item",
modelType = makeModel("item", Seq(makeIdField())),
upsertedDiscriminators = Seq("item_inserted", "item_updated"),
deletedDiscriminator = "item_deleted",
deletedHasModel = false,
)

val json = Json.toJson(capturedType)

// Backward compatibility: first discriminator is used
(json \ "upsertedDiscriminator").as[String] shouldBe "item_inserted"
// New format: all discriminators included
(json \ "upsertedDiscriminators").as[Seq[String]] shouldBe Seq("item_inserted", "item_updated")
}
}

describe("UnionMemberRx pattern matching") {
val controller = Controller()
import controller.UnionMemberRx
Expand Down