From 6796ac68870a3502cee670cf40fdb2166752753c Mon Sep 17 00:00:00 2001 From: Wolfgang Werner Date: Sun, 12 Jan 2020 13:53:19 +0100 Subject: [PATCH 1/4] Support pulling schema versions by reference --- .../resource/SchemaVersionResource.java | 34 ++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/vlingo/schemata/resource/SchemaVersionResource.java b/src/main/java/io/vlingo/schemata/resource/SchemaVersionResource.java index 2229aa48..9b4fc5d0 100644 --- a/src/main/java/io/vlingo/schemata/resource/SchemaVersionResource.java +++ b/src/main/java/io/vlingo/schemata/resource/SchemaVersionResource.java @@ -189,6 +189,35 @@ public Completes pushSchemaVersion(final String reference, final Schem )); } + public Completes retrieveSchemaVersion(final String reference) { + + FullyQualifiedReference fqr; + try { + fqr = FullyQualifiedReference.from(reference); + } catch (IllegalArgumentException ex) { + return Completes.withSuccess(Response.of( + BadRequest, + Headers.of(of(ContentLength, ex.getMessage().length())), + ex.getMessage())); + } + + if (!fqr.isSchemaVersionReference()) { + final String msg = "Include the version of the schema to retrieve"; + return Completes.withSuccess(Response.of( + BadRequest, + Headers.of(of(ContentLength, msg.length())), + msg)); + } + + return Queries.forSchemaVersions().schemaVersionOf( + fqr.organization, + fqr.unit, + fqr.context, + fqr.schema, + fqr.schemaVersion) + .andThenTo(schemaVersionData -> Completes.withSuccess(Response.of(Ok, serialized(schemaVersionData)))); + } + @Override public Resource routes() { return resource("SchemaVersion Resource", 1, @@ -246,7 +275,10 @@ public Resource routes() { post("/versions/{reference}") .param(String.class) .body(SchemaVersionData.class) - .handle(this::pushSchemaVersion)); + .handle(this::pushSchemaVersion), + get("/versions/{reference}") + .param(String.class) + .handle(this::retrieveSchemaVersion)); } private String schemaVersionLocation(final SchemaVersionId schemaVersionId) { From 099eec534aa4b6792d4a8a21f65b98b33a316cb9 Mon Sep 17 00:00:00 2001 From: Wolfgang Werner Date: Sun, 12 Jan 2020 14:26:50 +0100 Subject: [PATCH 2/4] Return 404 if schema version is not found by reference --- .../schemata/query/SchemaVersionQueriesActor.java | 4 +++- .../schemata/resource/SchemaVersionResource.java | 12 +++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/vlingo/schemata/query/SchemaVersionQueriesActor.java b/src/main/java/io/vlingo/schemata/query/SchemaVersionQueriesActor.java index d6341feb..37d00823 100644 --- a/src/main/java/io/vlingo/schemata/query/SchemaVersionQueriesActor.java +++ b/src/main/java/io/vlingo/schemata/query/SchemaVersionQueriesActor.java @@ -202,6 +202,8 @@ private Completes queryGreatestByNames(final String organizat private Completes queryOne(final String query, final Map parameters) { final QueryExpression expression = MapQueryExpression.using(SchemaVersionState.class, query, parameters); - return queryObject(SchemaVersionState.class, expression, (SchemaVersionState state) -> SchemaVersionData.from(state)); + return queryObject(SchemaVersionState.class, expression, (SchemaVersionState state) -> state == null + ? SchemaVersionData.none() + : SchemaVersionData.from(state)); } } diff --git a/src/main/java/io/vlingo/schemata/resource/SchemaVersionResource.java b/src/main/java/io/vlingo/schemata/resource/SchemaVersionResource.java index 9b4fc5d0..028e9393 100644 --- a/src/main/java/io/vlingo/schemata/resource/SchemaVersionResource.java +++ b/src/main/java/io/vlingo/schemata/resource/SchemaVersionResource.java @@ -215,7 +215,17 @@ public Completes retrieveSchemaVersion(final String reference) { fqr.context, fqr.schema, fqr.schemaVersion) - .andThenTo(schemaVersionData -> Completes.withSuccess(Response.of(Ok, serialized(schemaVersionData)))); + .andThenTo(schemaVersionData -> schemaVersionData.isNone() + ? Completes.withSuccess( + Response.of( + NotFound, + "Schema version not found")) + : Completes.withSuccess( + Response.of( + Ok, + Headers.of(of(ContentType, "application/json; charset=UTF-8")), + serialized(schemaVersionData))) + ); } @Override From 91f88a8054a467fdcf2cd8469b98733dd2e560c9 Mon Sep 17 00:00:00 2001 From: Wolfgang Werner Date: Sun, 12 Jan 2020 14:27:27 +0100 Subject: [PATCH 3/4] Add example call for schema version by reference --- src/test/resources/rest-api-calls.http | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/test/resources/rest-api-calls.http b/src/test/resources/rest-api-calls.http index 64e690e2..f669d30b 100644 --- a/src/test/resources/rest-api-calls.http +++ b/src/test/resources/rest-api-calls.http @@ -139,6 +139,11 @@ Accept: application/json GET http://localhost:9019/versions/search?organization=Org3&unit=Unit3&context=io.vlingo.schemata5&schema=SchemaDefinedFoo Accept: application/json +### Retrieve schema versions by reference +GET http://localhost:9019/versions/Org3:Unit3:io.vlingo.schemata5:SchemaDefinedFoo:1.0.0 +Accept: application/json + + ### Search for all schema versions by names From 12c62d0790514e92bab30b6ae11d8b1e8f45d0f5 Mon Sep 17 00:00:00 2001 From: Wolfgang Werner Date: Sun, 12 Jan 2020 14:40:53 +0100 Subject: [PATCH 4/4] Add endpoint to query schema version status --- .../resource/SchemaVersionResource.java | 44 ++++++++++++++++++- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/vlingo/schemata/resource/SchemaVersionResource.java b/src/main/java/io/vlingo/schemata/resource/SchemaVersionResource.java index 028e9393..d4ec6d47 100644 --- a/src/main/java/io/vlingo/schemata/resource/SchemaVersionResource.java +++ b/src/main/java/io/vlingo/schemata/resource/SchemaVersionResource.java @@ -190,7 +190,6 @@ public Completes pushSchemaVersion(final String reference, final Schem } public Completes retrieveSchemaVersion(final String reference) { - FullyQualifiedReference fqr; try { fqr = FullyQualifiedReference.from(reference); @@ -228,6 +227,44 @@ public Completes retrieveSchemaVersion(final String reference) { ); } + public Completes retrieveSchemaVersionStatus(final String reference) { + FullyQualifiedReference fqr; + try { + fqr = FullyQualifiedReference.from(reference); + } catch (IllegalArgumentException ex) { + return Completes.withSuccess(Response.of( + BadRequest, + Headers.of(of(ContentLength, ex.getMessage().length())), + ex.getMessage())); + } + + if (!fqr.isSchemaVersionReference()) { + final String msg = "Include the version of the schema to retrieve"; + return Completes.withSuccess(Response.of( + BadRequest, + Headers.of(of(ContentLength, msg.length())), + msg)); + } + + return Queries.forSchemaVersions().schemaVersionOf( + fqr.organization, + fqr.unit, + fqr.context, + fqr.schema, + fqr.schemaVersion) + .andThenTo(schemaVersionData -> schemaVersionData.isNone() + ? Completes.withSuccess( + Response.of( + NotFound, + "Schema version not found")) + : Completes.withSuccess( + Response.of( + Ok, + Headers.of(of(ContentType, "text/plain; charset=UTF-8")), + schemaVersionData.status)) + ); + } + @Override public Resource routes() { return resource("SchemaVersion Resource", 1, @@ -288,7 +325,10 @@ public Resource routes() { .handle(this::pushSchemaVersion), get("/versions/{reference}") .param(String.class) - .handle(this::retrieveSchemaVersion)); + .handle(this::retrieveSchemaVersion), + get("/versions/{reference}/status") + .param(String.class) + .handle(this::retrieveSchemaVersionStatus)); } private String schemaVersionLocation(final SchemaVersionId schemaVersionId) {