Skip to content
This repository was archived by the owner on Sep 2, 2022. It is now read-only.

Commit e620b02

Browse files
authored
Merge pull request #4358 from prisma/datamodel-endpoint
implement _datamodel endpoint for project
2 parents 29bccb6 + 8f3dfb6 commit e620b02

6 files changed

Lines changed: 27 additions & 16 deletions

File tree

server/.buildkite/build-cli/src/pipeline_renderer.rb

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -153,12 +153,13 @@ def release_artifacts_steps
153153
end
154154

155155
def build_steps_for(version)
156-
['debian', 'lambda'].map do |target|
157-
PipelineStep.new
158-
.label(":rust: Native image [#{target}] [#{version}]")
159-
.command("./server/.buildkite/pipeline.sh native-image #{target} #{version}")
160-
.queue("native-linux")
161-
end
156+
# ['debian', 'lambda'].map do |target|
157+
# PipelineStep.new
158+
# .label(":rust: Native image [#{target}] [#{version}]")
159+
# .command("./server/.buildkite/pipeline.sh native-image #{target} #{version}")
160+
# .queue("native-linux")
161+
# end
162+
[]
162163
end
163164

164165
def calculate_next_unstable_docker_tag()

server/connectors/deploy-connector-jdbc/src/main/scala/com/prisma/deploy/connector/jdbc/persistence/JdbcProjectPersistence.scala

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ case class JdbcProjectPersistence(slickDatabase: SlickDatabase, dbConfig: Databa
3535

3636
override def load(id: String): Future[Option[Project]] = {
3737
val query = sql
38-
.select(pt.id, pt.secrets, pt.allowQueries, pt.allowMutations, mt.schema, mt.functions, mt.revision)
38+
.select(pt.id, pt.secrets, pt.allowQueries, pt.allowMutations, mt.schema, mt.functions, mt.revision, mt.dataModel)
3939
.from(pt.t)
4040
.join(mt.t)
4141
.on(mt.projectId.equal(pt.id))
@@ -74,7 +74,7 @@ case class JdbcProjectPersistence(slickDatabase: SlickDatabase, dbConfig: Databa
7474
.from(mt.t.as("outer"))
7575

7676
val query = sql
77-
.select(pt.id, pt.secrets, pt.allowQueries, pt.allowMutations, mt.schema, mt.functions, mt.revision)
77+
.select(pt.id, pt.secrets, pt.allowQueries, pt.allowMutations, mt.schema, mt.functions, mt.revision, mt.dataModel)
7878
.from(pt.t)
7979
.join(revisionQuery.asTable("jt"))
8080
.on(field(name("jt", "projectId")).equal(pt.id))
@@ -164,7 +164,8 @@ case class JdbcProjectPersistence(slickDatabase: SlickDatabase, dbConfig: Databa
164164
allowQueries = rs.getBoolean(pt.allowQueries.getName),
165165
allowMutations = rs.getBoolean(pt.allowMutations.getName),
166166
functions = functions,
167-
manifestation = projectManifestation
167+
manifestation = projectManifestation,
168+
rawDataModel = rs.getString(mt.dataModel.getName)
168169
)
169170
}
170171
}

server/connectors/deploy-connector-mongo/src/main/scala/com/prisma/deploy/connector/mongo/impl/DbMapper.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,8 @@ object DbMapper extends JsonBsonConversion with MongoExtensions {
5353
revision = migration.revision,
5454
schema = schemaWithAddedBackRelations,
5555
functions = migration.functions.toList,
56-
manifestation = manifestation
56+
manifestation = manifestation,
57+
rawDataModel = migration.rawDataModel
5758
)
5859
}
5960

server/images/prisma-image-shared/src/main/scala/com/prisma/image/SangriaHandlerImpl.scala

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,11 @@ case class SangriaHandlerImpl(managementApiEnabled: Boolean)(
7474
sys.error(s"The connector is missing the import / export capability.")
7575
}
7676
}
77+
case Some("_datamodel") =>
78+
verifyAuth(projectIdAsString, rawRequest) { project =>
79+
val response = Response(Json.toJson(project.rawDataModel))
80+
Future.successful(response)
81+
}
7782

7883
case _ =>
7984
requestThrottler.throttleCallIfNeeded(projectIdAsString, isManagementApiRequest = isManagementApiRequest(rawRequest)) {
@@ -175,7 +180,7 @@ case class SangriaHandlerImpl(managementApiEnabled: Boolean)(
175180
}
176181

177182
private def splitReservedSegment(elements: List[String]): (List[String], Option[String]) = {
178-
val reservedSegments = Set("private", "import", "export")
183+
val reservedSegments = Set("private", "import", "export", "_datamodel")
179184
if (elements.nonEmpty && reservedSegments.contains(elements.last)) {
180185
(elements.dropRight(1), elements.lastOption)
181186
} else {

server/servers/deploy/src/test/scala/com/prisma/deploy/persistence/ProjectPersistenceSpec.scala

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,9 @@ class ProjectPersistenceSpec extends FlatSpec with Matchers with DeploySpecBase
2727
}
2828

2929
// Load the applied revision, which is 2 (2 steps are done in setupProject)
30-
loadProject.get.revision shouldEqual 2
30+
val project1 = loadProject.get
31+
project1.revision shouldEqual 2
32+
project1.rawDataModel should equal(basicTypesGql)
3133

3234
// After another migration is completed, the revision is bumped to the revision of the latest migration
3335
migrationPersistence.updateMigrationStatus(MigrationId(project.id, 3), MigrationStatus.Success).await
@@ -48,12 +50,13 @@ class ProjectPersistenceSpec extends FlatSpec with Matchers with DeploySpecBase
4850
setupProject(basicTypesGql, stage = "stage1")
4951
setupProject(basicTypesGql, stage = "stage2")
5052

51-
projectPersistence.loadAll().await should have(size(2))
53+
val projects = projectPersistence.loadAll().await
54+
projects should have(size(2))
55+
projects.foreach(p => p.rawDataModel should equal(basicTypesGql))
5256
}
5357

5458
".update()" should "update a project" in {
5559
val (project, _) = setupProject(basicTypesGql)
56-
println(project.id)
5760

5861
val updatedProject = project.copy(secrets = Vector("Some", "secrets"))
5962
projectPersistence.update(updatedProject).await()
@@ -67,7 +70,6 @@ class ProjectPersistenceSpec extends FlatSpec with Matchers with DeploySpecBase
6770

6871
".delete()" should "delete a project" in {
6972
val (project, _) = setupProject(basicTypesGql)
70-
println(project.id)
7173

7274
projectPersistence.delete(project.id).await()
7375
projectPersistence.load(project.id).await should be(None)

server/shared-models/src/main/scala/com/prisma/shared/models/Project.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ case class Project(
1010
allowQueries: Boolean = true,
1111
allowMutations: Boolean = true,
1212
functions: List[Function] = List.empty,
13-
manifestation: ProjectManifestation = ProjectManifestation.empty
13+
manifestation: ProjectManifestation = ProjectManifestation.empty,
14+
rawDataModel: String = ""
1415
) {
1516
def models = schema.models
1617
def relations = schema.relations

0 commit comments

Comments
 (0)