William Cheng 4ac054f723
Hide timestamp in Scala Play server samples (#5495)
* hide timestamp in scala play server output

* add chameleon82 to scala tech committee
2020-03-02 14:56:07 +08:00

162 lines
4.2 KiB
Scala

package api
import org.openapitools.OpenApiExceptions
import javax.inject.{Inject, Singleton}
import play.api.libs.json._
import play.api.mvc._
import model.ApiResponse
import model.Pet
import play.api.libs.Files.TemporaryFile
@Singleton
class PetApiController @Inject()(cc: ControllerComponents, api: PetApi) extends AbstractController(cc) {
/**
* POST /v2/pet
*/
def addPet(): Action[AnyContent] = Action { request =>
def executeApi(): Unit = {
val body = request.body.asJson.map(_.as[Pet]).getOrElse {
throw new OpenApiExceptions.MissingRequiredParameterException("body", "body")
}
api.addPet(body)
}
executeApi()
Ok
}
/**
* DELETE /v2/pet/:petId
* @param petId Pet id to delete
*/
def deletePet(petId: Long): Action[AnyContent] = Action { request =>
def executeApi(): Unit = {
val apiKey = request.headers.get("api_key")
api.deletePet(petId, apiKey)
}
executeApi()
Ok
}
/**
* GET /v2/pet/findByStatus?status=[value]
*/
def findPetsByStatus(): Action[AnyContent] = Action { request =>
def executeApi(): List[Pet] = {
val status = request.getQueryString("status")
.map(values => splitCollectionParam(values, "csv"))
.getOrElse {
throw new OpenApiExceptions.MissingRequiredParameterException("status", "query string")
}
api.findPetsByStatus(status)
}
val result = executeApi()
val json = Json.toJson(result)
Ok(json)
}
/**
* GET /v2/pet/findByTags?tags=[value]
*/
def findPetsByTags(): Action[AnyContent] = Action { request =>
def executeApi(): List[Pet] = {
val tags = request.getQueryString("tags")
.map(values => splitCollectionParam(values, "csv"))
.getOrElse {
throw new OpenApiExceptions.MissingRequiredParameterException("tags", "query string")
}
api.findPetsByTags(tags)
}
val result = executeApi()
val json = Json.toJson(result)
Ok(json)
}
/**
* GET /v2/pet/:petId
* @param petId ID of pet to return
*/
def getPetById(petId: Long): Action[AnyContent] = Action { request =>
def executeApi(): Pet = {
api.getPetById(petId)
}
val result = executeApi()
val json = Json.toJson(result)
Ok(json)
}
/**
* PUT /v2/pet
*/
def updatePet(): Action[AnyContent] = Action { request =>
def executeApi(): Unit = {
val body = request.body.asJson.map(_.as[Pet]).getOrElse {
throw new OpenApiExceptions.MissingRequiredParameterException("body", "body")
}
api.updatePet(body)
}
executeApi()
Ok
}
/**
* POST /v2/pet/:petId
* @param petId ID of pet that needs to be updated
*/
def updatePetWithForm(petId: Long): Action[AnyContent] = Action { request =>
def executeApi(): Unit = {
val name = (request.body.asMultipartFormData.map(_.asFormUrlEncoded) orElse request.body.asFormUrlEncoded)
.flatMap(_.get("name"))
.flatMap(_.headOption)
val status = (request.body.asMultipartFormData.map(_.asFormUrlEncoded) orElse request.body.asFormUrlEncoded)
.flatMap(_.get("status"))
.flatMap(_.headOption)
api.updatePetWithForm(petId, name, status)
}
executeApi()
Ok
}
/**
* POST /v2/pet/:petId/uploadImage
* @param petId ID of pet to update
*/
def uploadFile(petId: Long): Action[AnyContent] = Action { request =>
def executeApi(): ApiResponse = {
val additionalMetadata = (request.body.asMultipartFormData.map(_.asFormUrlEncoded) orElse request.body.asFormUrlEncoded)
.flatMap(_.get("additionalMetadata"))
.flatMap(_.headOption)
val file = request.body.asMultipartFormData.flatMap(_.file("file").map(_.ref: TemporaryFile))
api.uploadFile(petId, additionalMetadata, file)
}
val result = executeApi()
val json = Json.toJson(result)
Ok(json)
}
private def splitCollectionParam(paramValues: String, collectionFormat: String): List[String] = {
val splitBy =
collectionFormat match {
case "csv" => ",+"
case "tsv" => "\t+"
case "ssv" => " +"
case "pipes" => "|+"
}
paramValues.split(splitBy).toList
}
}