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
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ trait AdminDataExplorerApiClient {

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

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

def deleteItem(tableName: String, id: String): Future[AdminDeleteTable.Response]
}
Expand Down Expand Up @@ -151,7 +151,7 @@ object AdminDataExplorerApiClient {
override def updateItem(
tableName: String,
id: String,
request: Map[String, String]
request: AdminUpdateTable.Request
): Future[AdminUpdateTable.Response] = {
val path = ServerAPI.path :+ "admin" :+ "tables" :+ tableName :+ id
val uri = ServerAPI.withPath(path)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
package net.wiringbits.spra.api.models

import play.api.libs.json.{Format, Json}
import play.api.libs.json.{Format, Json, Reads, Writes}

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

case class Response(noData: String = "")

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

implicit val adminCreateTableResponseFormat: Format[Response] =
Json.format[Response]
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
package net.wiringbits.spra.api.models

import play.api.libs.json.{Format, Json}
import play.api.libs.json.{Format, Json, Reads, Writes}

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

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

implicit val adminUpdateTableResponseFormat: Format[Response] =
Json.format[Response]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,18 +54,18 @@ class AdminController @Inject() (
} yield Ok(Json.toJson(response.map(Json.toJson(_))))
}

def create(tableName: String) = handleJsonBody[Map[String, String]] { request =>
val body = AdminCreateTable.Request(request.body)
def create(tableName: String) = handleJsonBody[AdminCreateTable.Request] { request =>
val body = request.body
for {
_ <- adminUser(request)
_ = logger.info(s"Create row in $tableName: ${body.data}")
id <- adminService.create(tableName, body)
} yield Ok(Json.toJson(Map("id" -> id)))
}

def update(tableName: String, primaryKeyValue: String) = handleJsonBody[Map[String, String]] { request =>
def update(tableName: String, primaryKeyValue: String) = handleJsonBody[AdminUpdateTable.Request] { request =>
val primaryKeyFieldName = dataExplorerConfig.unsafeFindByName(tableName).primaryKeyField
val body = request.body.map {
val body = request.body.data.map {
case ("id", value) => primaryKeyFieldName -> value
case x => x
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import controllers.common.PlayPostgresSpec
import net.wiringbits.spra.admin.AppRouter
import net.wiringbits.spra.admin.config.{DataExplorerConfig, PrimaryKeyDataType, TableSettings}
import net.wiringbits.spra.admin.controllers.{AdminController, ImagesController}
import net.wiringbits.spra.api.models.AdminCreateTable
import net.wiringbits.spra.api.models.{AdminCreateTable, AdminUpdateTable}
import org.apache.commons.lang3.StringUtils
import play.api.inject
import play.api.inject.guice.GuiceApplicationBuilder
Expand Down Expand Up @@ -697,7 +697,7 @@ class AdminControllerSpec extends PlayPostgresSpec {
val userId = response.headOption.value.find(_._1 == "id").value._2

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

val newResponse = client.viewItem(usersSettings.tableName, userId).futureValue
Expand All @@ -717,7 +717,7 @@ class AdminControllerSpec extends PlayPostgresSpec {
val id = response.headOption.value.find(_._1 == "id").value._2

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

val newResponse = client.viewItem(table.tableName, id).futureValue
Expand All @@ -737,7 +737,7 @@ class AdminControllerSpec extends PlayPostgresSpec {
val userId = response.headOption.value.find(_._1 == "id").value._2

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

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