From 0ab9fe78751b8ba8ba961dea449fd142247b852c Mon Sep 17 00:00:00 2001 From: Hubert Plociniczak Date: Thu, 11 Jul 2024 12:18:43 +0200 Subject: [PATCH] Add `projectsDirectory` parameter to project endpoint (#10481) This change adds a possibility to pass an optional parameter describing full path to projects' directory, in addition to the required project id. Enables GUI to fix #10453. --- .../project-manager-http-endpoints.md | 6 +++-- .../http/ProjectsEndpoint.scala | 25 +++++++++++-------- .../ProjectFileRepositoryFactory.scala | 1 + .../repository/ProjectRepositoryFactory.scala | 1 + 4 files changed, 20 insertions(+), 13 deletions(-) diff --git a/docs/language-server/project-manager-http-endpoints.md b/docs/language-server/project-manager-http-endpoints.md index 0523696902..2c01a74146 100644 --- a/docs/language-server/project-manager-http-endpoints.md +++ b/docs/language-server/project-manager-http-endpoints.md @@ -17,9 +17,11 @@ JSONRPC protocol. -## `/projects/{project_id}/enso-project` +## `/projects/{project_id}/enso-project?projectsDirectory={projects_path}` -HTTP endpoint that returns the project structure in `.enso-project` format. +HTTP endpoint that returns the project structure in `.enso-project` format. The +optional `projectsDirectory` parameter allows the user to specify a custom path +to projects' directory (e.g. if it is in a subfolder). ### `GET` diff --git a/lib/scala/project-manager/src/main/scala/org/enso/projectmanager/infrastructure/http/ProjectsEndpoint.scala b/lib/scala/project-manager/src/main/scala/org/enso/projectmanager/infrastructure/http/ProjectsEndpoint.scala index 920050a1a5..bc11b69152 100644 --- a/lib/scala/project-manager/src/main/scala/org/enso/projectmanager/infrastructure/http/ProjectsEndpoint.scala +++ b/lib/scala/project-manager/src/main/scala/org/enso/projectmanager/infrastructure/http/ProjectsEndpoint.scala @@ -19,8 +19,8 @@ import org.enso.projectmanager.infrastructure.repository.{ ProjectRepositoryFailure } +import java.io.File import java.util.UUID - import scala.concurrent.Future import scala.util.{Failure, Success} @@ -30,23 +30,25 @@ final class ProjectsEndpoint[ extends Endpoint with LazyLogging { - private val projectRepository = - projectRepositoryFactory.getProjectRepository(None) - /** @inheritdoc */ override def route: Route = projectsEndpoint private val projectsEndpoint = { path("projects" / JavaUUID / "enso-project") { projectId => - get { - getEnsoProject(projectId) + parameters("projectsDirectory".optional) { directory => + get { + getEnsoProject(projectId, directory) + } } } } - private def getEnsoProject(projectId: UUID): Route = { - onComplete(buildEnsoArchive(projectId)) { + private def getEnsoProject( + projectId: UUID, + directory: Option[String] + ): Route = + onComplete(buildEnsoArchive(projectId, directory)) { case Failure(err) => logger.error( "Failure when building an enso-project archive [{}].", @@ -71,13 +73,14 @@ final class ProjectsEndpoint[ ) ) } - } private def buildEnsoArchive( - projectId: UUID + projectId: UUID, + projectsDirectory: Option[String] ): Future[Either[ProjectRepositoryFailure, Option[EnsoProjectArchive]]] = Exec[F].exec { - projectRepository + projectRepositoryFactory + .getProjectRepository(projectsDirectory.map(new File(_))) .findById(projectId) .map(projectOpt => projectOpt.map(project => diff --git a/lib/scala/project-manager/src/main/scala/org/enso/projectmanager/infrastructure/repository/ProjectFileRepositoryFactory.scala b/lib/scala/project-manager/src/main/scala/org/enso/projectmanager/infrastructure/repository/ProjectFileRepositoryFactory.scala index d29f561056..02204f7552 100644 --- a/lib/scala/project-manager/src/main/scala/org/enso/projectmanager/infrastructure/repository/ProjectFileRepositoryFactory.scala +++ b/lib/scala/project-manager/src/main/scala/org/enso/projectmanager/infrastructure/repository/ProjectFileRepositoryFactory.scala @@ -31,4 +31,5 @@ class ProjectFileRepositoryFactory[ gen ) } + } diff --git a/lib/scala/project-manager/src/main/scala/org/enso/projectmanager/infrastructure/repository/ProjectRepositoryFactory.scala b/lib/scala/project-manager/src/main/scala/org/enso/projectmanager/infrastructure/repository/ProjectRepositoryFactory.scala index e23d307a00..bb579a2320 100644 --- a/lib/scala/project-manager/src/main/scala/org/enso/projectmanager/infrastructure/repository/ProjectRepositoryFactory.scala +++ b/lib/scala/project-manager/src/main/scala/org/enso/projectmanager/infrastructure/repository/ProjectRepositoryFactory.scala @@ -6,4 +6,5 @@ trait ProjectRepositoryFactory[F[+_, +_]] { def getProjectRepository( projectsDirectory: Option[File] ): ProjectRepository[F] + }