package controllers import scala.concurrent.Await import scala.concurrent.duration.Duration import javax.inject._ import models.{Food,Unit,Mass,Measure} import play.api.mvc._ import play.api.libs.json._ import play.api.test._ import org.mongodb.scala.model.Filters import org.mongodb.scala.{MongoDatabase,MongoCollection,Observable,Completed} @Singleton class FoodController(collection: MongoCollection[Food], sync: Boolean = true) extends Controller { def this(db: MongoDatabase, sync: Boolean) { this(db.getCollection[Food]("Food"), sync) } def this() { this(MongoDB.con, false) } def put(): Action[JsValue] = Action(parse.json) { request: Request[JsValue] => try { val food: Food = request.body.as[Food] val query: Observable[Completed] = collection.insertOne(food) if (sync) { Await.result(query.toFuture, Duration.Inf) } Ok(Json.toJson(food)) } catch { case jsre: JsResultException => BadRequest(s"Could not parse json into Food.") } } def update(id: String): Action[JsValue] = Action(parse.json) { request: Request[JsValue] => try { val query: Observable[Food] = collection.find(Filters.equal[String]("_id", id)) val food: Food = Await.result(query.toFuture, Duration.Inf) val newJson: JsObject = Json.toJson(expFood) ++ request.body val save: Observable[Completed] = collection.save(food.as[Food]) if (sync) { Await.result(query.toFuture, Duration.Inf) } Ok(newJson) } catch { case jsre: JsResultException => BadRequest(s"Could not parse json into Food.") } } def get(id: Int): Action[JsValue] = Action(parse.json) { request: Request[JsValue] => Ok(Json.toJson(expFood)) } def query(query: String = ""): Action[JsValue] = Action(parse.json) { request: Request[JsValue] => Ok(Json.toJson(expFood)) } def delete(id: Int): Action[JsValue] = Action(parse.json) { request: Request[JsValue] => Ok(request.body) } }