Skip to content

Commit 9057e3c

Browse files
authored
Fix Create and Update request models (#22)
* Fix Create and Update request models * Minor changes
1 parent ce07a04 commit 9057e3c

File tree

5 files changed

+21
-17
lines changed

5 files changed

+21
-17
lines changed

spra-api/shared/src/main/scala/net/wiringbits/spra/api/AdminDataExplorerApiClient.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ trait AdminDataExplorerApiClient {
2424

2525
def createItem(tableName: String, request: AdminCreateTable.Request): Future[AdminCreateTable.Response]
2626

27-
def updateItem(tableName: String, id: String, request: Map[String, String]): Future[AdminUpdateTable.Response]
27+
def updateItem(tableName: String, id: String, request: AdminUpdateTable.Request): Future[AdminUpdateTable.Response]
2828

2929
def deleteItem(tableName: String, id: String): Future[AdminDeleteTable.Response]
3030
}
@@ -152,7 +152,7 @@ object AdminDataExplorerApiClient {
152152
override def updateItem(
153153
tableName: String,
154154
id: String,
155-
request: Map[String, String]
155+
request: AdminUpdateTable.Request
156156
): Future[AdminUpdateTable.Response] = {
157157
val path = ServerAPI.path :+ "admin" :+ "tables" :+ tableName :+ id
158158
val uri = ServerAPI.withPath(path)

spra-api/shared/src/main/scala/net/wiringbits/spra/api/models/AdminCreateTable.scala

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
package net.wiringbits.spra.api.models
22

3-
import play.api.libs.json.{Format, Json}
3+
import play.api.libs.json.{Format, Json, Reads, Writes}
44

55
object AdminCreateTable {
66
case class Request(data: Map[String, String])
77

88
case class Response(id: String)
99

10-
implicit val adminCreateTableRequestFormat: Format[Request] =
11-
Json.format[Request]
10+
implicit val adminCreateTableRequestFormat: Format[Request] = Format[Request](
11+
fjs = implicitly[Reads[Map[String, String]]].map(Request.apply),
12+
tjs = Writes[Request](x => Json.toJson(x.data))
13+
)
1214

1315
implicit val adminCreateTableResponseFormat: Format[Response] =
1416
Json.format[Response]

spra-api/shared/src/main/scala/net/wiringbits/spra/api/models/AdminUpdateTable.scala

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
package net.wiringbits.spra.api.models
22

3-
import play.api.libs.json.{Format, Json}
3+
import play.api.libs.json.{Format, Json, Reads, Writes}
44

55
object AdminUpdateTable {
66
case class Request(data: Map[String, String])
77
case class Response(id: String)
88

9-
implicit val adminUpdateTableRequestFormat: Format[Request] =
10-
Json.format[Request]
9+
implicit val adminUpdateTableRequestFormat: Format[Request] = Format[Request](
10+
fjs = implicitly[Reads[Map[String, String]]].map(Request.apply),
11+
tjs = Writes[Request](x => Json.toJson(x.data))
12+
)
1113

1214
implicit val adminUpdateTableResponseFormat: Format[Response] =
1315
Json.format[Response]

spra-play-server/src/main/scala/net/wiringbits/spra/admin/controllers/AdminController.scala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,18 +54,18 @@ class AdminController @Inject() (
5454
} yield Ok(Json.toJson(response.map(Json.toJson(_))))
5555
}
5656

57-
def create(tableName: String) = handleJsonBody[Map[String, String]] { request =>
58-
val body = AdminCreateTable.Request(request.body)
57+
def create(tableName: String) = handleJsonBody[AdminCreateTable.Request] { request =>
58+
val body = request.body
5959
for {
6060
_ <- adminUser(request)
6161
_ = logger.info(s"Create row in $tableName: ${body.data}")
6262
id <- adminService.create(tableName, body)
6363
} yield Ok(Json.toJson(AdminCreateTable.Response(id)))
6464
}
6565

66-
def update(tableName: String, primaryKeyValue: String) = handleJsonBody[Map[String, String]] { request =>
66+
def update(tableName: String, primaryKeyValue: String) = handleJsonBody[AdminUpdateTable.Request] { request =>
6767
val primaryKeyFieldName = dataExplorerConfig.unsafeFindByName(tableName).primaryKeyField
68-
val body = request.body.map {
68+
val body = request.body.data.map {
6969
case ("id", value) => primaryKeyFieldName -> value
7070
case x => x
7171
}

spra-play-server/src/test/scala/controllers/AdminControllerSpec.scala

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import controllers.common.PlayPostgresSpec
55
import net.wiringbits.spra.admin.AppRouter
66
import net.wiringbits.spra.admin.config.{DataExplorerConfig, PrimaryKeyDataType, TableSettings}
77
import net.wiringbits.spra.admin.controllers.{AdminController, ImagesController}
8-
import net.wiringbits.spra.api.models.AdminCreateTable
8+
import net.wiringbits.spra.api.models.{AdminCreateTable, AdminUpdateTable}
99
import org.apache.commons.lang3.StringUtils
1010
import play.api.inject
1111
import play.api.inject.guice.GuiceApplicationBuilder
@@ -758,7 +758,7 @@ class AdminControllerSpec extends PlayPostgresSpec with AdminUtils {
758758
val userId = response.headOption.value.find(_._1 == "id").value._2
759759

760760
val email = "wiringbits@wiringbits.net"
761-
val updateRequest = Map("email" -> email)
761+
val updateRequest = AdminUpdateTable.Request(Map("email" -> email))
762762
val updateResponse = client.updateItem(usersSettings.tableName, userId, updateRequest).futureValue
763763

764764
val newResponse = client.viewItem(usersSettings.tableName, userId).futureValue
@@ -778,7 +778,7 @@ class AdminControllerSpec extends PlayPostgresSpec with AdminUtils {
778778
val id = response.headOption.value.find(_._1 == "id").value._2
779779

780780
val name = "wiringbitsbitsbits"
781-
val updateRequest = Map("name" -> name)
781+
val updateRequest = AdminUpdateTable.Request(Map("name" -> name))
782782
val updateResponse = client.updateItem(table.tableName, id, updateRequest).futureValue
783783

784784
val newResponse = client.viewItem(table.tableName, id).futureValue
@@ -798,7 +798,7 @@ class AdminControllerSpec extends PlayPostgresSpec with AdminUtils {
798798
val userId = response.headOption.value.find(_._1 == "id").value._2
799799

800800
val email = "wiringbits@wiringbits.net"
801-
val updateRequest = Map("nonExistentField" -> email)
801+
val updateRequest = AdminUpdateTable.Request(Map("nonExistentField" -> email))
802802
val error = client.updateItem("users", userId, updateRequest).expectError
803803
error must be("A field doesn't correspond to this table schema")
804804
}
@@ -815,7 +815,7 @@ class AdminControllerSpec extends PlayPostgresSpec with AdminUtils {
815815
val id = response.headOption.value.find(_._1 == "id").value._2
816816

817817
val name = "wiringbits"
818-
val updateRequest = Map("nonExistentField" -> name)
818+
val updateRequest = AdminUpdateTable.Request(Map("nonExistentField" -> name))
819819
val error = client.updateItem(table.tableName, id, updateRequest).expectError
820820
error must be("A field doesn't correspond to this table schema")
821821
}

0 commit comments

Comments
 (0)