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") )
