Skip to content

Commit eb00a1e

Browse files
committed
Added filter to show only 'accepted' descendant names
1 parent 64dfa1c commit eb00a1e

5 files changed

Lines changed: 15 additions & 8 deletions

File tree

build.sbt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import Dependencies._
33
Global / onChangedBuildSource := ReloadOnSourceChanges
44
Laika / sourceDirectories := Seq(baseDirectory.value / "docs")
55

6-
ThisBuild / scalaVersion := "3.3.1"
6+
ThisBuild / scalaVersion := "3.3.3"
77
ThisBuild / organization := "org.fathomnet"
88
ThisBuild / organizationName := "MBARI"
99
ThisBuild / startYear := Some(2021)

project/Dependencies.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,18 @@ object Dependencies {
99

1010
lazy val jansi = "org.fusesource.jansi" % "jansi" % "2.4.1"
1111

12-
lazy val logback = "ch.qos.logback" % "logback-classic" % "1.5.1"
12+
lazy val logback = "ch.qos.logback" % "logback-classic" % "1.5.3"
1313
lazy val methanol = "com.github.mizosoft.methanol" % "methanol" % "1.7.0"
1414
lazy val munit = "org.scalameta" %% "munit" % "1.0.0-M11"
1515
lazy val picocli = "info.picocli" % "picocli" % "4.7.5"
1616

1717
lazy val slf4jJdk = "org.slf4j" % "slf4j-jdk-platform-logging" % "2.0.12"
1818

19-
private val tapirVersion = "1.9.10"
19+
private val tapirVersion = "1.10.4"
2020
lazy val tapirStubServer = "com.softwaremill.sttp.tapir" %% "tapir-sttp-stub-server" % tapirVersion
2121
lazy val tapirSwagger = "com.softwaremill.sttp.tapir" %% "tapir-swagger-ui-bundle" % tapirVersion
2222
lazy val tapirCirce = "com.softwaremill.sttp.tapir" %% "tapir-json-circe" % tapirVersion
23-
lazy val tapirCirceClient = "com.softwaremill.sttp.client3" %% "circe" % "3.9.3"
23+
lazy val tapirCirceClient = "com.softwaremill.sttp.client3" %% "circe" % "3.9.5"
2424
lazy val tapirNetty = "com.softwaremill.sttp.tapir" %% "tapir-netty-server" % tapirVersion
2525
lazy val tapirVertx = "com.softwaremill.sttp.tapir" %% "tapir-vertx-server" % tapirVersion
2626

src/main/scala/org/fathomnet/worms/StateController.scala

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,11 +99,15 @@ object StateController:
9999

100100
runNodeSearch(search, s"Unable to find a name with aphiaId: $aphiaId")
101101

102-
def descendantNames(name: String): Either[ErrorMsg, List[String]] =
102+
def descendantNames(name: String, acceptedOnly: Boolean = false): Either[ErrorMsg, List[String]] =
103103
def search(data: Data): List[String] =
104104
data.findNodeByName(name) match
105105
case None => Nil
106-
case Some(node) => node.descendantNames.sorted.toList
106+
case Some(node) =>
107+
if (acceptedOnly && node.isAccepted)
108+
node.descendants.filter(_.isAccepted).map(_.name).sorted.toList
109+
else
110+
node.descendantNames.sorted.toList
107111
runSearch(search).fold(
108112
e => Left(e),
109113
v =>

src/main/scala/org/fathomnet/worms/WormsNode.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ final case class WormsNode(
2525
children: Seq[WormsNode]
2626
):
2727

28+
lazy val isAccepted: Boolean = this.aphiaId == this.acceptedAphiaId
29+
2830
def find(name: String): Option[WormsNode] =
2931
if (this.name == name || this.alternateNames.contains(name))
3032
Some(this)

src/main/scala/org/fathomnet/worms/api/NameEndpoints.scala

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,17 +89,18 @@ class NameEndpoints(using ec: ExecutionContext) extends Endpoints:
8989
queryContainsEndpoint.serverLogic(glob => Future(StateController.queryNamesContaining(glob)))
9090

9191
// -- /descendants/:name
92-
val descendantsEndpoint: PublicEndpoint[String, ErrorMsg, List[String], Any] = baseEndpoint
92+
val descendantsEndpoint: Endpoint[Unit, (String, Option[Boolean]), ErrorMsg, List[String], Any] = baseEndpoint
9393
.get
9494
.in("descendants")
9595
.in(path[String]("name"))
96+
.in(query[Option[Boolean]]("accepted").description("Only include accepted names. Allowed values are true or false. Default is false."))
9697
.out(jsonBody[List[String]])
9798
.description(
9899
"Return the primary names of the taxa and all its descendants in alphabetical order."
99100
)
100101

101102
val descendantsServerEndpoint: ServerEndpoint[Any, Future] =
102-
descendantsEndpoint.serverLogic(name => Future(StateController.descendantNames(name)))
103+
descendantsEndpoint.serverLogic((name, accepted) => Future(StateController.descendantNames(name, accepted.getOrElse(false))))
103104

104105
// -- /ancestors/:name
105106
val ancestorsEndpoint: PublicEndpoint[String, ErrorMsg, List[String], Any] = baseEndpoint

0 commit comments

Comments
 (0)