Skip to content

Commit

Permalink
Merge pull request #57 from promaster-sdk/feature/graphql-standard-mo…
Browse files Browse the repository at this point in the history
…dules-error-handling

Better error-handling in graphql-queries for standard modules
  • Loading branch information
esakylli authored Dec 4, 2024
2 parents 587b6f8 + 2510e6d commit afff3a0
Show file tree
Hide file tree
Showing 25 changed files with 369 additions and 9 deletions.
15 changes: 15 additions & 0 deletions ...tom-table-columns-diff/files-dir/[email protected]
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"data": {
"id": "342da2d8-7e2c-4ef4-ba2c-1210adfa1a0d",
"key": "DEMODAMPER",
"name": "",
"description": "",
"retired": false,
"tables": {
"custom_tables@table1": 16
}
},
"refs": {
"16": "[email protected]"
}
}
15 changes: 15 additions & 0 deletions ...tom-table-columns-diff/files-dir/[email protected]
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"data": {
"id": "442da2d8-7e2c-4ef4-ba2c-1210adfa1a0e",
"key": "DEMODAMPER2",
"name": "",
"description": "",
"retired": false,
"tables": {
"custom_tables@table1": 16
}
},
"refs": {
"16": "[email protected]"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"data": {
"id": "ddd45f4a-2b29-410c-a054-4266361385a4",
"name": "TEST",
"products": {
"342da2d8-7e2c-4ef4-ba2c-1210adfa1a0d": 1,
"442da2d8-7e2c-4ef4-ba2c-1210adfa1a0e": 2
}
},
"refs": {
"1": "[email protected]",
"2": "[email protected]"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"data": {
"markers": { "PRODUCTION": 0 },
"latest": { "tx": 912752, "transaction": 2, "date": 1695716048809 },
"trees": { "73839479-3059-475a-8282-326c3b27e5b5": 3 }
},
"refs": {
"0": "release_ddd45f4a-2b29-410c-a054-4266361385a4.json"
}
}
16 changes: 16 additions & 0 deletions ...ustom-table-columns-diff/files-dir/[email protected]
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"data": {
"id": "66c88372-ae07-4916-9dcf-4e6908820630",
"module": "custom_tables",
"name": "table1",
"description": "",
"columns": [
{ "type": "PrimaryKey", "name": "builtin@id" },
{ "type": "Number", "name": "sort_no" },
{ "type": "Text", "name": "name" },
{ "type": "Text", "name": "comment" }
],
"rows": [["9a7ddbfb-83ab-4e0f-b7b3-c99ad8b0f50c", 0, "width", "a comment"]]
},
"refs": {}
}
15 changes: 15 additions & 0 deletions ...ustom-table-columns-diff/files-dir/[email protected]
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"data": {
"id": "76c88372-ae07-4916-9dcf-4e6908820631",
"module": "custom_tables",
"name": "table1",
"description": "",
"columns": [
{ "type": "PrimaryKey", "name": "builtin@id" },
{ "type": "Number", "name": "sort_no" },
{ "type": "Text", "name": "name" }
],
"rows": [["aa7ddbfb-83ab-4e0f-b7b3-c99ad8b0f50d", 0, "width"]]
},
"refs": {}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
products {
id
name
modules {
custom_tables {
table1 {
builtin_id
name
comment
}
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
[
{
"errors": [{ "message": "Cannot query field \"table1\" on type \"Module_custom_tables\"." }]
}
]
19 changes: 19 additions & 0 deletions .../property-columns-diff/files-dir/[email protected]
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"data": {
"id": "342da2d8-7e2c-4ef4-ba2c-1210adfa1a0d",
"key": "DEMODAMPER",
"name": "",
"description": "",
"retired": false,
"tables": {
"properties@property": 16,
"[email protected]_value": 17,
"[email protected]": 18
}
},
"refs": {
"16": "[email protected]",
"17": "[email protected]",
"18": "[email protected]"
}
}
19 changes: 19 additions & 0 deletions .../property-columns-diff/files-dir/[email protected]
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"data": {
"id": "442da2d8-7e2c-4ef4-ba2c-1210adfa1a0e",
"key": "DEMODAMPER2",
"name": "",
"description": "",
"retired": false,
"tables": {
"properties@property": 16,
"[email protected]_value": 17,
"[email protected]": 18
}
},
"refs": {
"16": "[email protected]",
"17": "[email protected]",
"18": "[email protected]"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"data": {
"id": "ddd45f4a-2b29-410c-a054-4266361385a4",
"name": "TEST",
"products": {
"342da2d8-7e2c-4ef4-ba2c-1210adfa1a0d": 1,
"442da2d8-7e2c-4ef4-ba2c-1210adfa1a0e": 2
}
},
"refs": {
"1": "[email protected]",
"2": "[email protected]"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"data": {
"markers": { "PRODUCTION": 0 },
"latest": { "tx": 912752, "transaction": 2, "date": 1695716048809 },
"trees": { "73839479-3059-475a-8282-326c3b27e5b5": 3 }
},
"refs": {
"0": "release_ddd45f4a-2b29-410c-a054-4266361385a4.json"
}
}
23 changes: 23 additions & 0 deletions ...es/property-columns-diff/files-dir/[email protected]
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"data": {
"id": "4041926f-f143-4ded-b487-0cfd4a2eac28",
"module": "properties",
"name": "property.value",
"description": "",
"columns": [
{ "type": "PrimaryKey", "name": "builtin@id" },
{ "type": "Number", "name": "sort_no" },
{ "type": "ForeignKey", "name": "builtin@parent_id", "params": "property" },
{ "type": "Text", "name": "value", "key": true },
{ "type": "PropertyFilter", "name": "property_filter" },
{ "type": "Blob", "name": "image", "params": "image_filename" },
{ "type": "Text", "name": "description" }
],
"rows": [
["9d55ce5b-a346-473d-b138-552eb51fe52b", 0, "9a7ddbfb-83ab-4e0f-b7b3-c99ad8b0f50c", "400", null, null, null],
["04bb87bb-ebbe-4936-b2e2-aaa52c9e9d55", 1, "9a7ddbfb-83ab-4e0f-b7b3-c99ad8b0f50c", "600", null, null, null],
["54582389-185b-42d1-a94f-407efa54df23", 2, "9a7ddbfb-83ab-4e0f-b7b3-c99ad8b0f50c", "800", null, null, null]
]
},
"refs": {}
}
23 changes: 23 additions & 0 deletions ...es/property-columns-diff/files-dir/[email protected]
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"data": {
"id": "5041926f-f143-4ded-b487-0cfd4a2eac29",
"module": "properties",
"name": "property.value",
"description": "",
"columns": [
{ "type": "PrimaryKey", "name": "builtin@id" },
{ "type": "Number", "name": "sort_no" },
{ "type": "ForeignKey", "name": "builtin@parent_id", "params": "property" },
{ "type": "Text", "name": "value", "key": true },
{ "type": "PropertyFilter", "name": "property_filter" },
{ "type": "Blob", "name": "image", "params": "image_filename" },
{ "type": "Text", "name": "description" }
],
"rows": [
["ad55ce5b-a346-473d-b138-552eb51fe52c", 0, "aa7ddbfb-83ab-4e0f-b7b3-c99ad8b0f50d", "400", null, null, null],
["14bb87bb-ebbe-4936-b2e2-aaa52c9e9d56", 1, "aa7ddbfb-83ab-4e0f-b7b3-c99ad8b0f50d", "600", null, null, null],
["64582389-185b-42d1-a94f-407efa54df24", 2, "aa7ddbfb-83ab-4e0f-b7b3-c99ad8b0f50d", "800", null, null, null]
]
},
"refs": {}
}
21 changes: 21 additions & 0 deletions ...es/property-columns-diff/files-dir/[email protected]
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
"data": {
"id": "66c88372-ae07-4916-9dcf-4e6908820630",
"module": "properties",
"name": "property",
"description": "",
"columns": [
{ "type": "PrimaryKey", "name": "builtin@id" },
{ "type": "Number", "name": "sort_no" },
{ "type": "Text", "name": "name", "params": "property.name", "key": true },
{ "type": "Text", "name": "group", "params": "property.group" },
{ "type": "Blob", "name": "image", "params": "image_filename" },
{ "type": "PropertyFilter", "name": "visibility_filter" },
{ "type": "PropertyFilter", "name": "validation_filter" },
{ "type": "Quantity", "name": "quantity" },
{ "type": "Text", "name": "comment" }
],
"rows": [["9a7ddbfb-83ab-4e0f-b7b3-c99ad8b0f50c", 0, "width", null, null, null, null, "Discrete", "a comment"]]
},
"refs": {}
}
20 changes: 20 additions & 0 deletions ...es/property-columns-diff/files-dir/[email protected]
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"data": {
"id": "76c88372-ae07-4916-9dcf-4e6908820631",
"module": "properties",
"name": "property",
"description": "",
"columns": [
{ "type": "PrimaryKey", "name": "builtin@id" },
{ "type": "Number", "name": "sort_no" },
{ "type": "Text", "name": "name", "params": "property.name", "key": true },
{ "type": "Text", "name": "group", "params": "property.group" },
{ "type": "Blob", "name": "image", "params": "image_filename" },
{ "type": "PropertyFilter", "name": "visibility_filter" },
{ "type": "PropertyFilter", "name": "validation_filter" },
{ "type": "Quantity", "name": "quantity" }
],
"rows": [["aa7ddbfb-83ab-4e0f-b7b3-c99ad8b0f50d", 0, "width", null, null, null, null, "Discrete"]]
},
"refs": {}
}
16 changes: 16 additions & 0 deletions ...es/property-columns-diff/files-dir/[email protected]
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"data": {
"id": "da231ae4-3a26-4248-800e-647c406de494",
"module": "properties",
"name": "property.def_value",
"description": "",
"columns": [
{ "type": "PrimaryKey", "name": "builtin@id" },
{ "type": "Number", "name": "sort_no" },
{ "type": "Text", "name": "value", "key": true },
{ "type": "PropertyFilter", "name": "property_filter" }
],
"rows": []
},
"refs": {}
}
16 changes: 16 additions & 0 deletions ...es/property-columns-diff/files-dir/[email protected]
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"data": {
"id": "ea231ae4-3a26-4248-800e-647c406de495",
"module": "properties",
"name": "property.def_value",
"description": "",
"columns": [
{ "type": "PrimaryKey", "name": "builtin@id" },
{ "type": "Number", "name": "sort_no" },
{ "type": "Text", "name": "value", "key": true },
{ "type": "PropertyFilter", "name": "property_filter" }
],
"rows": []
},
"refs": {}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
products {
id
name
modules {
properties {
property {
builtin_id
name
comment
}
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
[
{
"errors": [{ "message": "Cannot query field \"property\" on type \"Module_properties\"." }]
}
]
12 changes: 11 additions & 1 deletion src/client-graphql/middleware.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,17 @@ describe("createSchema", async () => {

const result = await readJsonFile(currentTestFilesFolder)("result.json");

expect(responses).toEqual(result);
// GraphQL errors doesn't map to json, so we have to fix it manually
const errorMessages = responses
.filter((r) => r.errors)
.flatMap((r) => r.errors!.map((err) => ({ message: err.message })));
const errors = errorMessages.length > 0 ? [{ errors: errorMessages }] : undefined;

if (errors) {
expect(errors).toEqual(result);
} else {
expect(responses).toEqual(result);
}
});
}
});
13 changes: 11 additions & 2 deletions src/client-graphql/modules/models.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { GraphQLObjectType, GraphQLNonNull, GraphQLFieldConfigMap, GraphQLList } from "graphql";
import { GraphQLObjectType, GraphQLNonNull, GraphQLFieldConfigMap, GraphQLList, GraphQLString } from "graphql";
import { getUniqueTypeName } from "../shared-functions";
import { TableByName } from "../module-plugin";
import { buildTableRowTypeFields, childRowResolver, parentRowResolver } from "./shared-functions";
Expand All @@ -16,10 +16,19 @@ export async function createModuleType(
): Promise<GraphQLObjectType> {
const fields: GraphQLFieldConfigMap<unknown, unknown> = {};
const modelTable = tableByName["model"];
const modelParamsTable = tableByName["model.params"];

if (modelTable === undefined || modelParamsTable === undefined) {
fields["models_type_error"] = {
type: GraphQLString,
description: "models type error: cannot find model/model.params",
};
return new GraphQLObjectType({ name: getUniqueTypeName(`Module_${moduleName}`, usedTypeNames), fields });
}

const modelParamsRowType = new GraphQLObjectType({
name: getUniqueTypeName("Model_Params", usedTypeNames),
fields: buildTableRowTypeFields(tableByName["model.params"].columns),
fields: buildTableRowTypeFields(modelParamsTable.columns),
});

const modelRowType = new GraphQLObjectType({
Expand Down
Loading

0 comments on commit afff3a0

Please sign in to comment.