FoodController.scala 2.0 KB

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