FoodController.scala 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package com.weEat.controllers
  2. import com.weEat.models.{FoodNode => FoodNodeCollection}
  3. import com.weEat.services.MongoDBService
  4. import com.weEat.shared.models._
  5. import com.weEat.shared.models.UnitType._
  6. import javax.inject.{Inject,Singleton}
  7. import play.api._
  8. import play.api.libs.json._
  9. import play.api.mvc._
  10. import org.bson.types.ObjectId
  11. import org.mongodb.scala.model.Filters._
  12. import scala.concurrent.{ExecutionContext,Future}
  13. import scala.util.{Success,Failure}
  14. @Singleton
  15. class FoodController @Inject()(
  16. val controllerComponents: ControllerComponents,
  17. db: MongoDBService
  18. ) extends BaseController {
  19. implicit val ec = scala.concurrent.ExecutionContext.global
  20. import db.withCollection
  21. def get(id: String) = Action.async
  22. { implicit request: Request[AnyContent] =>
  23. withCollection(FoodNodeCollection) {collection =>
  24. collection.find(equal("id", id))
  25. .first()
  26. .toFuture()
  27. .transform({
  28. case Success(x) => Success(Ok(Json.toJson(x)))
  29. case Failure(x) => throw x
  30. })
  31. }.flatten
  32. }
  33. def query() = Action.async
  34. { implicit request: Request[AnyContent] =>
  35. withCollection(FoodNodeCollection) {collection =>
  36. collection.find()
  37. .toFuture()
  38. .transform({
  39. case Success(x) => Success(Ok(Json.toJson(x)))
  40. case Failure(x) => throw x
  41. })
  42. }.flatten
  43. }
  44. def add() = Action.async(parse.json)
  45. { implicit request: Request[JsValue] =>
  46. try {
  47. val food = request.body.as[FoodNode].withId(new ObjectId)
  48. withCollection(FoodNodeCollection) {collection =>
  49. collection.insertOne(food).map(res =>
  50. Ok(Json.toJson(food.withId(res.getInsertedId().asObjectId().getValue())))
  51. ).head()
  52. }.flatten
  53. }
  54. catch {
  55. case jsre: JsResultException => Future.successful(
  56. BadRequest(s"Could not parse json into a Food node.")
  57. )
  58. }
  59. }
  60. }