Skip to content

Commit 0ab9fe7

Browse files
authored
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.
1 parent 077b86f commit 0ab9fe7

File tree

4 files changed

+20
-13
lines changed

4 files changed

+20
-13
lines changed

docs/language-server/project-manager-http-endpoints.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,11 @@ JSONRPC protocol.
1717

1818
<!-- /MarkdownTOC -->
1919

20-
## `/projects/{project_id}/enso-project`
20+
## `/projects/{project_id}/enso-project?projectsDirectory={projects_path}`
2121

22-
HTTP endpoint that returns the project structure in `.enso-project` format.
22+
HTTP endpoint that returns the project structure in `.enso-project` format. The
23+
optional `projectsDirectory` parameter allows the user to specify a custom path
24+
to projects' directory (e.g. if it is in a subfolder).
2325

2426
### `GET`
2527

lib/scala/project-manager/src/main/scala/org/enso/projectmanager/infrastructure/http/ProjectsEndpoint.scala

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ import org.enso.projectmanager.infrastructure.repository.{
1919
ProjectRepositoryFailure
2020
}
2121

22+
import java.io.File
2223
import java.util.UUID
23-
2424
import scala.concurrent.Future
2525
import scala.util.{Failure, Success}
2626

@@ -30,23 +30,25 @@ final class ProjectsEndpoint[
3030
extends Endpoint
3131
with LazyLogging {
3232

33-
private val projectRepository =
34-
projectRepositoryFactory.getProjectRepository(None)
35-
3633
/** @inheritdoc */
3734
override def route: Route =
3835
projectsEndpoint
3936

4037
private val projectsEndpoint = {
4138
path("projects" / JavaUUID / "enso-project") { projectId =>
42-
get {
43-
getEnsoProject(projectId)
39+
parameters("projectsDirectory".optional) { directory =>
40+
get {
41+
getEnsoProject(projectId, directory)
42+
}
4443
}
4544
}
4645
}
4746

48-
private def getEnsoProject(projectId: UUID): Route = {
49-
onComplete(buildEnsoArchive(projectId)) {
47+
private def getEnsoProject(
48+
projectId: UUID,
49+
directory: Option[String]
50+
): Route =
51+
onComplete(buildEnsoArchive(projectId, directory)) {
5052
case Failure(err) =>
5153
logger.error(
5254
"Failure when building an enso-project archive [{}].",
@@ -71,13 +73,14 @@ final class ProjectsEndpoint[
7173
)
7274
)
7375
}
74-
}
7576

7677
private def buildEnsoArchive(
77-
projectId: UUID
78+
projectId: UUID,
79+
projectsDirectory: Option[String]
7880
): Future[Either[ProjectRepositoryFailure, Option[EnsoProjectArchive]]] =
7981
Exec[F].exec {
80-
projectRepository
82+
projectRepositoryFactory
83+
.getProjectRepository(projectsDirectory.map(new File(_)))
8184
.findById(projectId)
8285
.map(projectOpt =>
8386
projectOpt.map(project =>

lib/scala/project-manager/src/main/scala/org/enso/projectmanager/infrastructure/repository/ProjectFileRepositoryFactory.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,5 @@ class ProjectFileRepositoryFactory[
3131
gen
3232
)
3333
}
34+
3435
}

lib/scala/project-manager/src/main/scala/org/enso/projectmanager/infrastructure/repository/ProjectRepositoryFactory.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,5 @@ trait ProjectRepositoryFactory[F[+_, +_]] {
66
def getProjectRepository(
77
projectsDirectory: Option[File]
88
): ProjectRepository[F]
9+
910
}

0 commit comments

Comments
 (0)