Food.scala 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. package models
  2. import org.bson.types.ObjectId
  3. case class Food (
  4. _id: String = "",
  5. val name: String,
  6. val glutenFree: Boolean = false,
  7. val vegitarian: Boolean = false,
  8. val vegan: Boolean = false,
  9. val nutrients: Map[String, Float],
  10. val source: String,
  11. val category: Seq[String],
  12. val primaryMeasure: Measure,
  13. val density: Float,
  14. val mass_p_u: Float,
  15. val price: Int,
  16. val alternatives: Seq[String] = Nil
  17. //val picture: Image
  18. )
  19. object Food {
  20. import play.api.libs.json._
  21. private def roundJsValue(jsval: JsValue, perc: Int): JsValue = {
  22. jsval match {
  23. case JsNumber(num) => JsNumber(num.setScale(perc, BigDecimal.RoundingMode.HALF_UP))
  24. case JsArray(seq) => JsArray(seq.map(roundJsValue(_, perc)))
  25. case JsObject(map) => JsObject(map.mapValues(roundJsValue(_, perc)))
  26. case _ => jsval
  27. }
  28. }
  29. implicit val foodFormats = Format[Food](
  30. Json.using[Json.WithDefaultValues].reads[Food],
  31. Json.using[Json.WithDefaultValues].writes[Food].transform(roundJsValue(_, 2))
  32. )
  33. }