From 36d2ead596ad6e44e45954218988efbde658d380 Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Tue, 16 Feb 2021 10:53:17 +0100 Subject: [PATCH] fix search api --- .../routes/api/SearchApi.scala | 45 ++++++++++++------- .../routes/package.scala | 10 ++++- 2 files changed, 37 insertions(+), 18 deletions(-) diff --git a/server/src/main/scala/ch.epfl.scala.index.server/routes/api/SearchApi.scala b/server/src/main/scala/ch.epfl.scala.index.server/routes/api/SearchApi.scala index 1dd37f72b..20f6381c6 100644 --- a/server/src/main/scala/ch.epfl.scala.index.server/routes/api/SearchApi.scala +++ b/server/src/main/scala/ch.epfl.scala.index.server/routes/api/SearchApi.scala @@ -20,6 +20,7 @@ import com.softwaremill.session.SessionOptions.{refreshable, usingCookies} import play.api.libs.json._ import scala.concurrent.ExecutionContext +import akka.http.scaladsl.model.HttpHeader object SearchApi { implicit val formatProject: OFormat[Project] = @@ -91,7 +92,8 @@ class SearchApi( val routes: Route = pathPrefix("api") { cors() { - path("search") { + // deprecated endpoint replaced by api/search endpoint + path("search-old") { get { parameters( ( @@ -125,17 +127,6 @@ class SearchApi( sbtVersion ) - def convert(project: Project): SearchApi.Project = { - import project._ - val artifacts0 = if (cli) cliArtifacts.toList else artifacts - SearchApi.Project( - organization, - repository, - project.github.flatMap(_.logo.map(_.target)), - artifacts0 - ) - } - scalaTarget match { case Some(_) => val searchParams = SearchParams( @@ -147,7 +138,7 @@ class SearchApi( ) val result = dataRepository .findProjects(searchParams) - .map(page => page.items.map(p => convert(p))) + .map(page => page.items.map(convertProject(cli))) complete(OK, result) case None => @@ -158,6 +149,19 @@ class SearchApi( } } } ~ + path("search") { + get { + optionalSession(refreshable, usingCookies) { userId => + val user = session.getUser(userId) + searchParams(user) { params => + val result = dataRepository + .findProjects(params) + .map(page => page.items.map(convertProject(params.cli))) + complete(result) + } + } + } + } ~ path("project") { get { parameters( @@ -201,9 +205,8 @@ class SearchApi( optionalSession(refreshable, usingCookies) { userId => val user = session.getUser(userId) searchParams(user) { params => - complete { - autocomplete(params) - } + val autoCompletion = autocomplete(params) + complete(autoCompletion) } } } @@ -211,6 +214,16 @@ class SearchApi( } } + private def convertProject(cli: Boolean)(project: Project): SearchApi.Project = { + val artifacts = if (cli) project.cliArtifacts.toList else project.artifacts + SearchApi.Project( + project.organization, + project.repository, + project.github.flatMap(_.logo.map(_.target)), + project.artifacts + ) + } + private def getReleaseOptions( projectRef: Project.Reference, scalaTarget: Option[ScalaTarget], diff --git a/server/src/main/scala/ch.epfl.scala.index.server/routes/package.scala b/server/src/main/scala/ch.epfl.scala.index.server/routes/package.scala index 7e75f1049..013edc896 100644 --- a/server/src/main/scala/ch.epfl.scala.index.server/routes/package.scala +++ b/server/src/main/scala/ch.epfl.scala.index.server/routes/package.scala @@ -10,6 +10,7 @@ package object routes { ( "q" ? "*", "page".as[Int] ? 1, + "total".as[Int] ? SearchParams.resultsPerPage, "sort".?, "topics".as[String].*, "targetTypes".as[String].*, @@ -17,13 +18,15 @@ package object routes { "scalaJsVersions".as[String].*, "scalaNativeVersions".as[String].*, "sbtVersions".as[String].*, + "contributingSearch".as[Boolean] ? false, + "cli".as[Boolean] ? false, "you".?, - "contributingSearch".as[Boolean] ? false ) ).tmap { case ( q, page, + total, sort, topics, targetTypes, @@ -31,8 +34,9 @@ package object routes { scalaJsVersions, scalaNativeVersions, sbtVersions, + contributingSearch, + cli, you, - contributingSearch ) => val userRepos = you .flatMap(_ => user.map(_.repos)) @@ -42,8 +46,10 @@ package object routes { page, sort, userRepos, + total = total, topics = topics.toList, targetTypes = targetTypes.toList, + cli = cli, scalaVersions = scalaVersions.toList, scalaJsVersions = scalaJsVersions.toList, scalaNativeVersions = scalaNativeVersions.toList,