diff --git a/app/controllers/LineController.scala b/app/controllers/LineController.scala index 6206a1e..385d009 100644 --- a/app/controllers/LineController.scala +++ b/app/controllers/LineController.scala @@ -1,6 +1,7 @@ package controllers -import models.{Line, SearchResult, ServicePlan} +import models.{Line, LineStatus, SearchResult, ServicePlan} +import org.joda.time.DateTime import javax.inject._ import play.api._ @@ -41,4 +42,29 @@ class LineController @Inject()( .map(line => Ok(Json.toJson(line))) } + def findLinesByActivationDate(startDate: Option[DateTime]) = Action.async { + lineRepo.findByActivationDate(startDate.map(date => date.toString())) + .flatMap { line => + var out = List[Line]() + for (l <- line) { + if (l.carrierDetails.lastActivated.isDefined && l.carrierDetails.lastActivated.get.isAfter(startDate.get)) { + out = out ++ Seq(l) + } + } + Future.successful(out) + } + .map(line => Ok(Json.toJson(line))) + } + + def downloadAllLinesThatAreActiveAndHaventSyncedWithNetsuiteInAYear() = Action { + val source = lineRepo.streamAll(Json.obj()) + .filter( line => line.lineStatus.isDefined && line.lineStatus.get.equals(LineStatus.Active) ) + .filter( line => line.lastSyncWithNetsuite.isDefined && line.lastSyncWithNetsuite.get.isAfter(DateTime.now().minusYears(1))) + .map( line => { + Json.toJson(line) + }) + + Ok.streamed(source, None) + } + } diff --git a/app/models/CarrierDetails.scala b/app/models/CarrierDetails.scala index 346d9b6..afe317b 100644 --- a/app/models/CarrierDetails.scala +++ b/app/models/CarrierDetails.scala @@ -3,14 +3,14 @@ package models import org.joda.time.DateTime case class CarrierDetails ( - carrierPlan:Option[String] = None, - carrierPlanStatus:Option[String] = None, - carrierAccount:Option[String] = None, - deviceIds:Seq[DeviceId] = Nil, - ipAddress: Option[String] = None, - created: Option[DateTime] = None, - lastActivated: Option[DateTime] = None - ) { + carrierPlan:Option[String] = None, + carrierPlanStatus:Option[String] = None, + carrierAccount:Option[String] = None, + deviceIds:Seq[DeviceId] = Nil, + ipAddress: Option[String] = None, + created: Option[DateTime] = None, + lastActivated: Option[DateTime] = None +) { def deviceIdOfType(deviceIdType: DeviceIdType.Value): Option[DeviceId] = deviceIds.find(_.kind == deviceIdType) } diff --git a/app/repos/LineRepo.scala b/app/repos/LineRepo.scala index 4a18986..263c601 100644 --- a/app/repos/LineRepo.scala +++ b/app/repos/LineRepo.scala @@ -3,13 +3,15 @@ package repos import akka.actor.ActorSystem import models.Line import org.slf4j.LoggerFactory +import play.api.libs.json.{JsObject, Json} import play.api.libs.json.Json.obj import play.modules.reactivemongo.{NamedDatabase, ReactiveMongoApi} import reactivemongo.api.Cursor import reactivemongo.api.bson.{BSONDocumentReader, BSONDocumentWriter, BSONObjectID} -import reactivemongo.play.json.compat.json2bson.toDocumentWriter +import reactivemongo.play.json.compat.json2bson.{toDocumentReader, toDocumentWriter} import reactivemongo.api.bson.collection.BSONCollection import reactivemongo.play.json.compat._ +import reactivemongo.akkastream.{ State, cursorProducer } import javax.inject.Inject import scala.concurrent.{ExecutionContext, Future} @@ -30,4 +32,17 @@ class LineRepo @Inject()(implicit .cursor[Line]().collect[Seq](defaultMaxDocs, Cursor.FailOnError[Seq[Line]]()) } + def findByActivationDate(startDate: Option[String]): Future[List[Line]] = collection() { col => + col.find( + Json.obj( + "carrierDetails.lastActivated" -> Json.obj("$gt" -> startDate.get) + ) + ).cursor[Line]().collect[List](defaultMaxDocs, Cursor.FailOnError[List[Line]]()) + } + + def streamAll(filter:JsObject, sortCriteria:JsObject = Json.obj("carrierDetails.lastActivated" -> -1)) = streaming() { col => + col.find(filter) + .sort(sortCriteria).cursor[Line]().documentSource() + } + } diff --git a/build.sbt b/build.sbt index d75191c..a1592e2 100644 --- a/build.sbt +++ b/build.sbt @@ -11,6 +11,7 @@ libraryDependencies += guice libraryDependencies += "org.scalatestplus.play" %% "scalatestplus-play" % "5.1.0" % Test libraryDependencies += "com.typesafe.play" %% "play-json-joda" % "2.9.2" libraryDependencies += "org.reactivemongo" %% "play2-reactivemongo" % "1.0.6-play28" +libraryDependencies += "org.reactivemongo" %% "reactivemongo-akkastream" % "1.0.6" libraryDependencies += "org.typelevel" %% "squants" % "1.8.3" // Adds additional packages into Twirl