/src/main/scala/com/mycotrack/api/dao/ProjectDao.scala

https://github.com/JanxSpirit/mycotrack-api · Scala · 108 lines · 79 code · 17 blank · 12 comment · 4 complexity · ac6e336fc3d1afb8164401f5f0f94ff9 MD5 · raw file

  1. package com.mycotrack.api.dao
  2. import com.mongodb.casbah.Imports._
  3. import akka.dispatch.Future
  4. import com.novus.salat._
  5. import com.novus.salat.global._
  6. import com.mongodb.casbah.commons.MongoDBObject
  7. import com.mycotrack.api._
  8. import model._
  9. import org.bson.types.ObjectId
  10. /**
  11. * @author chris carrier
  12. */
  13. class ProjectDao(mongoCollection: MongoCollection) extends Dao {
  14. def getProject(key: ObjectId) = {
  15. Future {
  16. val q = MongoDBObject("_id" -> key)
  17. val dbo = mongoCollection.findOne(q)
  18. dbo.map(f => grater[ProjectWrapper].asObject(f))
  19. }
  20. }
  21. def createProject(modelWrapper: ProjectWrapper) = {
  22. Future {
  23. val dbo = grater[ProjectWrapper].asDBObject(modelWrapper)
  24. mongoCollection += dbo
  25. Some(modelWrapper.copy(_id = dbo.getAs[org.bson.types.ObjectId]("_id")))
  26. }
  27. }
  28. def updateProject(key: ObjectId, model: Project) = {
  29. Future {
  30. val query = MongoDBObject("_id" -> key)
  31. val update = $addToSet("content" -> model)
  32. mongoCollection.update(query, update, false, false, WriteConcern.Safe)
  33. val dbo = mongoCollection.findOne(query)
  34. dbo.map(f => grater[ProjectWrapper].asObject(f))
  35. }
  36. }
  37. def searchProject(searchObj: MongoDBObject) = {
  38. Future {
  39. val data = mongoCollection.find(searchObj)
  40. val dataList = data.map(f => grater[ProjectWrapper].asObject(f).content).flatten.toList
  41. if (dataList.isEmpty) {
  42. None
  43. }
  44. else {
  45. Some(dataList)
  46. }
  47. }
  48. }
  49. def getSpecies(key: ObjectId) = {
  50. Future {
  51. val dbo = mongoCollection.findOneByID(key)
  52. dbo.map(f => grater[SpeciesWrapper].asObject(f))
  53. }
  54. }
  55. def createSpecies(speciesWrapper: SpeciesWrapper) = {
  56. Future {
  57. val dbo = grater[SpeciesWrapper].asDBObject(speciesWrapper)
  58. mongoCollection += dbo
  59. Some(speciesWrapper.copy(_id = dbo.getAs[org.bson.types.ObjectId]("_id"))) // TODO grater was not working here. If this were an actor you would just do a "self.channel" as before.
  60. }
  61. }
  62. def updateSpecies(key: ObjectId, model: Species) = {
  63. Future {
  64. val query = MongoDBObject("_id" -> key)
  65. val update = $addToSet("content" -> model)
  66. mongoCollection.update(query, update, false, false, WriteConcern.Safe)
  67. mongoCollection.findOne(query).map(f => grater[SpeciesWrapper].asObject(f))
  68. }
  69. }
  70. /*def searchSpecies(searchObj: MongoDBObject) = {
  71. Future {
  72. mongoCollection.find(searchObj).map(f =>
  73. grater[SpeciesWrapper].asObject(f).content).flatten.toList match {
  74. case l: List[Species] => Some(l)
  75. case Nil => None
  76. }
  77. }
  78. } */
  79. def searchSpecies(searchObj: MongoDBObject) = {
  80. Future {
  81. val data = mongoCollection.find(searchObj)
  82. val dataList = data.map(f => grater[SpeciesWrapper].asObject(f).content).flatten.toList
  83. if (dataList.isEmpty) {
  84. None
  85. }
  86. else {
  87. Some(dataList)
  88. }
  89. }
  90. }
  91. }