add addPropToLabel

Project: http://git-wip-us.apache.org/repos/asf/incubator-s2graph/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-s2graph/commit/e1f2bb4f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-s2graph/tree/e1f2bb4f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-s2graph/diff/e1f2bb4f

Branch: refs/heads/master
Commit: e1f2bb4fd2c2d06a7b3aa828457d5efc2df25837
Parents: 2b5d919
Author: daewon <[email protected]>
Authored: Tue Mar 6 11:19:24 2018 +0900
Committer: daewon <[email protected]>
Committed: Tue Mar 6 11:19:24 2018 +0900

----------------------------------------------------------------------
 s2graphql/build.sbt                             |  2 +-
 .../s2graph/graphql/marshaller/package.scala    | 30 ++++++++++++++++++--
 .../graphql/repository/GraphRepository.scala    | 22 ++++++++++----
 .../graphql/types/S2ManagementType.scala        | 28 ++++++++++++++++--
 .../apache/s2graph/graphql/types/S2Type.scala   |  3 ++
 .../apache/s2graph/graphql/types/package.scala  |  2 +-
 6 files changed, 74 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-s2graph/blob/e1f2bb4f/s2graphql/build.sbt
----------------------------------------------------------------------
diff --git a/s2graphql/build.sbt b/s2graphql/build.sbt
index 22cde81..9e74b7d 100644
--- a/s2graphql/build.sbt
+++ b/s2graphql/build.sbt
@@ -26,7 +26,7 @@ description := "GraphQL server with akka-http and sangria and 
s2graph"
 scalacOptions ++= Seq("-deprecation", "-feature")
 
 libraryDependencies ++= Seq(
-  "org.sangria-graphql" %% "sangria" % "1.3.3",
+  "org.sangria-graphql" %% "sangria" % "1.4.0",
   "org.sangria-graphql" %% "sangria-spray-json" % "1.0.0",
 
   "com.typesafe.akka" %% "akka-http" % "10.0.10",

http://git-wip-us.apache.org/repos/asf/incubator-s2graph/blob/e1f2bb4f/s2graphql/src/main/scala/org/apache/s2graph/graphql/marshaller/package.scala
----------------------------------------------------------------------
diff --git 
a/s2graphql/src/main/scala/org/apache/s2graph/graphql/marshaller/package.scala 
b/s2graphql/src/main/scala/org/apache/s2graph/graphql/marshaller/package.scala
index 7584fc2..18f8cf4 100644
--- 
a/s2graphql/src/main/scala/org/apache/s2graph/graphql/marshaller/package.scala
+++ 
b/s2graphql/src/main/scala/org/apache/s2graph/graphql/marshaller/package.scala
@@ -7,7 +7,13 @@ import sangria.marshalling._
 
 package object marshaller {
 
-  def unwrap(map: Map[String, Any]): Map[String, Any] = map.map { case (k, v: 
Some[_]) => k -> v.get }
+  def unwrap(map: Map[String, Any]): Map[String, Any] = map.map {
+    case (k, v: Some[_]) => v.get match {
+      case m: Map[_, _] => k -> unwrap(m.asInstanceOf[Map[String, Any]])
+      case _ => k -> v.get
+    }
+    case org@_ => org
+  }
 
   implicit object IndexFromInput extends FromInput[Index] {
     val marshaller = CoercedScalaResultMarshaller.default
@@ -33,6 +39,24 @@ package object marshaller {
     }
   }
 
+  implicit object PartialLabelMetaFromInput extends 
FromInput[Vector[PartialLabelMeta]] {
+    val marshaller = CoercedScalaResultMarshaller.default
+
+    def fromResult(node: marshaller.Node) = {
+      val input = unwrap(node.asInstanceOf[Map[String, Any]])
+      val partialLabelMetas = input.map { case (labelName, labelPropMap) =>
+        val innerMap = labelPropMap.asInstanceOf[Map[String, Any]]
+        val props = innerMap.get("props").toSeq.flatMap { case vs: Vector[_] =>
+          vs.map(PropFromInput.fromResult)
+        }
+
+        PartialLabelMeta(labelName, props)
+      }
+
+      partialLabelMetas.toVector
+    }
+  }
+
   implicit object PartialServiceColumnFromInput extends 
FromInput[PartialServiceColumn] {
     val marshaller = CoercedScalaResultMarshaller.default
 
@@ -48,8 +72,8 @@ package object marshaller {
       val partialServiceColumns = input.map { case (serviceName, 
serviceColumnMap) =>
         val innerMap = serviceColumnMap.asInstanceOf[Map[String, Any]]
         val columnName = innerMap("columnName").asInstanceOf[String]
-        val props = innerMap.get("props").toSeq.flatMap { case v: Vector[_] =>
-          v.map(PropFromInput.fromResult)
+        val props = innerMap.get("props").toSeq.flatMap { case vs: Vector[_] =>
+          vs.map(PropFromInput.fromResult)
         }
 
         PartialServiceColumn(serviceName, columnName, props)

http://git-wip-us.apache.org/repos/asf/incubator-s2graph/blob/e1f2bb4f/s2graphql/src/main/scala/org/apache/s2graph/graphql/repository/GraphRepository.scala
----------------------------------------------------------------------
diff --git 
a/s2graphql/src/main/scala/org/apache/s2graph/graphql/repository/GraphRepository.scala
 
b/s2graphql/src/main/scala/org/apache/s2graph/graphql/repository/GraphRepository.scala
index 9ec039f..2a0a2bf 100644
--- 
a/s2graphql/src/main/scala/org/apache/s2graph/graphql/repository/GraphRepository.scala
+++ 
b/s2graphql/src/main/scala/org/apache/s2graph/graphql/repository/GraphRepository.scala
@@ -40,7 +40,6 @@ object GraphRepository {
   * @param graph
   */
 class GraphRepository(val graph: S2GraphLike) {
-
   val management = graph.management
   val parser = new RequestParser(graph)
 
@@ -167,16 +166,29 @@ class GraphRepository(val graph: S2GraphLike) {
   }
 
   def deleteServiceColumn(args: Args): List[Try[ServiceColumn]] = {
-    // Args(Map(s2graph -> Some(Map(columnName -> 
_))),Set(),Set(s2graph),Set(),TrieMap())
-    val serviceColumns = args.raw.collect { case (serviceName, Some(map: 
Map[String, _])) =>
-      val columnName = map("columnName").asInstanceOf[String]
+    val partialColumns = args.arg[Vector[PartialServiceColumn]]("serviceName")
+
+    val serviceColumns = partialColumns.map { pc =>
+      val serviceName = pc.serviceName
+      val columnName = pc.columnName
+
       Management.deleteColumn(serviceName, columnName)
     }
 
     serviceColumns.toList
   }
 
-  def addPropsOnServiceColumn(args: Args): List[Try[ServiceColumn]] = {
+  def addPropsToLabel(args: Args): List[Try[Label]] = {
+    val partialLabelMetas = args.arg[Vector[PartialLabelMeta]]("labelName")
+    partialLabelMetas.flatMap { pm =>
+      pm.props.map { prop =>
+        val labelMetaTry = Management.addProp(pm.labelName, prop)
+        labelMetaTry.map(lm => Label.findByName(pm.labelName, false).get)
+      }
+    }.toList
+  }
+
+  def addPropsToServiceColumn(args: Args): List[Try[ServiceColumn]] = {
     val partialColumns = args.arg[Vector[PartialServiceColumn]]("serviceName")
 
     val ret = partialColumns.map { pc =>

http://git-wip-us.apache.org/repos/asf/incubator-s2graph/blob/e1f2bb4f/s2graphql/src/main/scala/org/apache/s2graph/graphql/types/S2ManagementType.scala
----------------------------------------------------------------------
diff --git 
a/s2graphql/src/main/scala/org/apache/s2graph/graphql/types/S2ManagementType.scala
 
b/s2graphql/src/main/scala/org/apache/s2graph/graphql/types/S2ManagementType.scala
index 9c00153..0ea12e1 100644
--- 
a/s2graphql/src/main/scala/org/apache/s2graph/graphql/types/S2ManagementType.scala
+++ 
b/s2graphql/src/main/scala/org/apache/s2graph/graphql/types/S2ManagementType.scala
@@ -32,7 +32,7 @@ import sangria.schema._
 import scala.language.existentials
 import scala.util.{Failure, Success, Try}
 import org.apache.s2graph.graphql.marshaller._
-import org.apache.s2graph.graphql.types.S2Type.PartialServiceColumn
+import org.apache.s2graph.graphql.types.S2Type.{PartialLabelMeta, 
PartialServiceColumn}
 
 object S2ManagementType {
 
@@ -84,6 +84,7 @@ class S2ManagementType(repo: GraphRepository) {
     )))
   }
 
+
   lazy val serviceColumnOnServiceInputObjectFields = repo.allServices.map { 
service =>
     InputField(service.serviceName, OptionInputType(InputObjectType(
       s"column",
@@ -105,6 +106,16 @@ class S2ManagementType(repo: GraphRepository) {
     )
   }
 
+  lazy val labelMetaInputObjectFields = repo.allLabels.map { label =>
+    InputField(label.label, OptionInputType(InputObjectType(
+      s"labelMetaOnLabel",
+      description = "desc here",
+      fields = List(
+        InputField("props", ListInputType(InputPropType))
+      )
+    )))
+  }
+
   lazy val ServiceType = deriveObjectType[GraphRepository, Service](
     ObjectTypeName("Service"),
     ObjectTypeDescription("desc here"),
@@ -211,12 +222,18 @@ class S2ManagementType(repo: GraphRepository) {
     fields = serviceColumnOnServiceWithPropInputObjectFields
   )
 
-  val ServiceColumnSelectType = InputObjectType[PartialServiceColumn](
+  val ServiceColumnSelectType = InputObjectType[Vector[PartialServiceColumn]](
     "serviceColumnSelect",
     description = "desc",
     fields = serviceColumnOnServiceInputObjectFields
   )
 
+  val LabelPropType = InputObjectType[Vector[PartialLabelMeta]](
+    "labelMetaProp",
+    description = "desc",
+    fields = labelMetaInputObjectFields
+  )
+
   val SourceServiceType = InputObjectType[PartialServiceColumn](
     "sourceService",
     description = "desc",
@@ -301,7 +318,12 @@ class S2ManagementType(repo: GraphRepository) {
     Field("addPropsToServiceColumn",
       ListType(ServiceColumnMutationResponseType),
       arguments = Argument("serviceName", AddPropServiceType) :: Nil,
-      resolve = c => c.ctx.addPropsOnServiceColumn(c.args) map 
(MutationResponse(_))
+      resolve = c => c.ctx.addPropsToServiceColumn(c.args) map 
(MutationResponse(_))
+    ),
+    Field("addPropsToLabel",
+      ListType(LabelMutationResponseType),
+      arguments = Argument("labelName", LabelPropType) :: Nil,
+      resolve = c => c.ctx.addPropsToLabel(c.args) map (MutationResponse(_))
     ),
     Field("deleteServiceColumn",
       ListType(ServiceColumnMutationResponseType),

http://git-wip-us.apache.org/repos/asf/incubator-s2graph/blob/e1f2bb4f/s2graphql/src/main/scala/org/apache/s2graph/graphql/types/S2Type.scala
----------------------------------------------------------------------
diff --git 
a/s2graphql/src/main/scala/org/apache/s2graph/graphql/types/S2Type.scala 
b/s2graphql/src/main/scala/org/apache/s2graph/graphql/types/S2Type.scala
index 605cdd3..14e83e8 100644
--- a/s2graphql/src/main/scala/org/apache/s2graph/graphql/types/S2Type.scala
+++ b/s2graphql/src/main/scala/org/apache/s2graph/graphql/types/S2Type.scala
@@ -35,6 +35,9 @@ import scala.util.{Failure, Success, Try}
 import org.apache.s2graph.graphql.marshaller._
 
 object S2Type {
+  case class PartialLabelMeta(labelName: String,
+                              props: Seq[Prop] = Nil)
+
   case class PartialServiceColumn(serviceName: String,
                                   columnName: String,
                                   props: Seq[Prop] = Nil)

http://git-wip-us.apache.org/repos/asf/incubator-s2graph/blob/e1f2bb4f/s2graphql/src/main/scala/org/apache/s2graph/graphql/types/package.scala
----------------------------------------------------------------------
diff --git 
a/s2graphql/src/main/scala/org/apache/s2graph/graphql/types/package.scala 
b/s2graphql/src/main/scala/org/apache/s2graph/graphql/types/package.scala
index 6f3e2ec..1cbf130 100644
--- a/s2graphql/src/main/scala/org/apache/s2graph/graphql/types/package.scala
+++ b/s2graphql/src/main/scala/org/apache/s2graph/graphql/types/package.scala
@@ -137,7 +137,7 @@ package object types {
     ObjectTypeDescription("desc here"),
     AddFields(
       Field("indexes", ListType(LabelIndexType), resolve = c => Nil),
-      Field("props", ListType(LabelMetaType), resolve = c => Nil)
+      Field("props", ListType(LabelMetaType), resolve = c => 
c.value.labelMetas)
     ),
     RenameField("label", "name")
   )


Reply via email to