| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- 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)
- }
- }
|