2443 lines
87 KiB
JSON
2443 lines
87 KiB
JSON
[
|
|
{
|
|
"description": "Queryer Execution",
|
|
"database": {
|
|
"puncs": [
|
|
{
|
|
"name": "get_organization",
|
|
"schemas": {
|
|
"get_organization.response": {
|
|
"type": "organization"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"name": "get_organizations",
|
|
"schemas": {
|
|
"get_organizations.response": {
|
|
"type": "array",
|
|
"items": {
|
|
"family": "organization"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"name": "get_light_organization",
|
|
"schemas": {
|
|
"get_light_organization.response": {
|
|
"family": "light.organization"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"name": "get_full_organization",
|
|
"schemas": {
|
|
"get_full_organization.response": {
|
|
"family": "full.organization"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"name": "get_orders",
|
|
"schemas": {
|
|
"get_orders.response": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "light.order"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"name": "get_widgets",
|
|
"schemas": {
|
|
"get_widgets.response": {
|
|
"type": "array",
|
|
"items": {
|
|
"family": "widget"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"name": "get_counterparty_orders",
|
|
"schemas": {
|
|
"get_counterparty_orders.response": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "counterparty.order"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"enums": [],
|
|
"relations": [
|
|
{
|
|
"type": "relation",
|
|
"id": "00000000-0000-0000-0000-000000000001",
|
|
"constraint": "fk_relationship_source_entity",
|
|
"source_type": "relationship",
|
|
"source_columns": [
|
|
"source_id",
|
|
"source_type"
|
|
],
|
|
"destination_type": "entity",
|
|
"destination_columns": [
|
|
"id",
|
|
"type"
|
|
],
|
|
"prefix": "source"
|
|
},
|
|
{
|
|
"type": "relation",
|
|
"id": "00000000-0000-0000-0000-000000000002",
|
|
"constraint": "fk_relationship_target_entity",
|
|
"source_type": "relationship",
|
|
"source_columns": [
|
|
"target_id",
|
|
"target_type"
|
|
],
|
|
"destination_type": "entity",
|
|
"destination_columns": [
|
|
"id",
|
|
"type"
|
|
],
|
|
"prefix": "target"
|
|
},
|
|
{
|
|
"id": "22222222-2222-2222-2222-222222222222",
|
|
"type": "relation",
|
|
"constraint": "fk_order_customer_person",
|
|
"source_type": "order",
|
|
"source_columns": [
|
|
"customer_id"
|
|
],
|
|
"destination_type": "person",
|
|
"destination_columns": [
|
|
"id"
|
|
],
|
|
"prefix": "customer"
|
|
},
|
|
{
|
|
"id": "22222222-2222-2222-2222-222222222227",
|
|
"type": "relation",
|
|
"constraint": "fk_order_counterparty_entity",
|
|
"source_type": "order",
|
|
"source_columns": [
|
|
"counterparty_id",
|
|
"counterparty_type"
|
|
],
|
|
"destination_type": "entity",
|
|
"destination_columns": [
|
|
"id",
|
|
"type"
|
|
],
|
|
"prefix": "counterparty"
|
|
},
|
|
{
|
|
"id": "33333333-3333-3333-3333-333333333333",
|
|
"type": "relation",
|
|
"constraint": "fk_order_line_order",
|
|
"source_type": "order_line",
|
|
"source_columns": [
|
|
"order_id"
|
|
],
|
|
"destination_type": "order",
|
|
"destination_columns": [
|
|
"id"
|
|
]
|
|
},
|
|
{
|
|
"id": "33333333-3333-3333-3333-333333333334",
|
|
"type": "relation",
|
|
"constraint": "fk_invoice_line_invoice",
|
|
"source_type": "invoice_line",
|
|
"source_columns": [
|
|
"invoice_id"
|
|
],
|
|
"destination_type": "invoice",
|
|
"destination_columns": [
|
|
"id"
|
|
]
|
|
}
|
|
],
|
|
"types": [
|
|
{
|
|
"name": "entity",
|
|
"hierarchy": [
|
|
"entity"
|
|
],
|
|
"grouped_fields": {
|
|
"entity": [
|
|
"id",
|
|
"type",
|
|
"archived",
|
|
"created_at"
|
|
]
|
|
},
|
|
"field_types": {
|
|
"id": "uuid",
|
|
"archived": "boolean",
|
|
"created_at": "timestamptz",
|
|
"type": "text"
|
|
},
|
|
"schemas": {
|
|
"entity": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string",
|
|
"format": "uuid"
|
|
},
|
|
"type": {
|
|
"type": "string"
|
|
},
|
|
"archived": {
|
|
"type": "boolean"
|
|
},
|
|
"created_at": {
|
|
"type": "string",
|
|
"format": "date-time"
|
|
},
|
|
"created": {
|
|
"type": "boolean"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"fields": [
|
|
"id",
|
|
"type",
|
|
"archived",
|
|
"created_at"
|
|
],
|
|
"variations": [
|
|
"address",
|
|
"bot",
|
|
"contact",
|
|
"email_address",
|
|
"entity",
|
|
"order",
|
|
"order_line",
|
|
"organization",
|
|
"person",
|
|
"phone_number",
|
|
"relationship"
|
|
]
|
|
},
|
|
{
|
|
"name": "organization",
|
|
"hierarchy": [
|
|
"entity",
|
|
"organization"
|
|
],
|
|
"fields": [
|
|
"id",
|
|
"type",
|
|
"name",
|
|
"archived",
|
|
"created_at"
|
|
],
|
|
"grouped_fields": {
|
|
"entity": [
|
|
"id",
|
|
"type",
|
|
"archived",
|
|
"created_at"
|
|
],
|
|
"organization": [
|
|
"name"
|
|
]
|
|
},
|
|
"field_types": {
|
|
"id": "uuid",
|
|
"type": "text",
|
|
"archived": "boolean",
|
|
"name": "text",
|
|
"created_at": "timestamptz"
|
|
},
|
|
"lookup_fields": [
|
|
"id"
|
|
],
|
|
"null_fields": [],
|
|
"default_fields": [
|
|
"id",
|
|
"type",
|
|
"created_at",
|
|
"archived"
|
|
],
|
|
"variations": [
|
|
"bot",
|
|
"organization",
|
|
"person"
|
|
],
|
|
"schemas": {
|
|
"organization": {
|
|
"type": "entity",
|
|
"properties": {
|
|
"name": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"name": "bot",
|
|
"hierarchy": [
|
|
"entity",
|
|
"organization",
|
|
"bot"
|
|
],
|
|
"fields": [
|
|
"token",
|
|
"id",
|
|
"type",
|
|
"name",
|
|
"archived",
|
|
"created_at",
|
|
"token",
|
|
"role"
|
|
],
|
|
"grouped_fields": {
|
|
"entity": [
|
|
"id",
|
|
"type",
|
|
"archived",
|
|
"created_at"
|
|
],
|
|
"organization": [
|
|
"name"
|
|
],
|
|
"bot": [
|
|
"token",
|
|
"role"
|
|
]
|
|
},
|
|
"field_types": {
|
|
"id": "uuid",
|
|
"type": "text",
|
|
"archived": "boolean",
|
|
"name": "text",
|
|
"token": "text",
|
|
"role": "text",
|
|
"created_at": "timestamptz"
|
|
},
|
|
"schemas": {
|
|
"bot": {
|
|
"type": "organization",
|
|
"properties": {
|
|
"token": {
|
|
"type": "string"
|
|
},
|
|
"role": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"light.bot": {
|
|
"type": "organization",
|
|
"properties": {
|
|
"token": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"variations": [
|
|
"bot"
|
|
]
|
|
},
|
|
{
|
|
"name": "person",
|
|
"hierarchy": [
|
|
"entity",
|
|
"organization",
|
|
"person"
|
|
],
|
|
"fields": [
|
|
"first_name",
|
|
"last_name",
|
|
"id",
|
|
"type",
|
|
"name",
|
|
"age",
|
|
"archived",
|
|
"created_at"
|
|
],
|
|
"grouped_fields": {
|
|
"entity": [
|
|
"id",
|
|
"type",
|
|
"archived",
|
|
"created_at"
|
|
],
|
|
"organization": [
|
|
"name"
|
|
],
|
|
"person": [
|
|
"first_name",
|
|
"last_name",
|
|
"age"
|
|
]
|
|
},
|
|
"field_types": {
|
|
"id": "uuid",
|
|
"type": "text",
|
|
"archived": "boolean",
|
|
"first_name": "text",
|
|
"last_name": "text",
|
|
"name": "text",
|
|
"age": "numeric",
|
|
"created_at": "timestamptz"
|
|
},
|
|
"schemas": {
|
|
"person": {
|
|
"type": "organization",
|
|
"properties": {
|
|
"first_name": {
|
|
"type": "string"
|
|
},
|
|
"last_name": {
|
|
"type": "string"
|
|
},
|
|
"age": {
|
|
"type": "number"
|
|
}
|
|
}
|
|
},
|
|
"light.person": {
|
|
"type": "organization",
|
|
"properties": {
|
|
"first_name": {
|
|
"type": "string"
|
|
},
|
|
"last_name": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"full.person": {
|
|
"type": "person",
|
|
"properties": {
|
|
"phone_numbers": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "contact",
|
|
"properties": {
|
|
"target": {
|
|
"type": "phone_number"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"email_addresses": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "contact",
|
|
"properties": {
|
|
"target": {
|
|
"type": "email_address"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"addresses": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "contact",
|
|
"properties": {
|
|
"target": {
|
|
"type": "address"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"contacts": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "contact",
|
|
"properties": {
|
|
"target": {
|
|
"oneOf": [
|
|
{
|
|
"type": "phone_number"
|
|
},
|
|
{
|
|
"type": "email_address"
|
|
},
|
|
{
|
|
"type": "address"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"variations": [
|
|
"person"
|
|
]
|
|
},
|
|
{
|
|
"name": "relationship",
|
|
"relationship": true,
|
|
"hierarchy": [
|
|
"entity",
|
|
"relationship"
|
|
],
|
|
"fields": [
|
|
"source_id",
|
|
"source_type",
|
|
"target_id",
|
|
"target_type",
|
|
"id",
|
|
"type",
|
|
"archived",
|
|
"created_at"
|
|
],
|
|
"grouped_fields": {
|
|
"entity": [
|
|
"id",
|
|
"type",
|
|
"archived",
|
|
"created_at"
|
|
],
|
|
"relationship": [
|
|
"source_id",
|
|
"source_type",
|
|
"target_id",
|
|
"target_type"
|
|
]
|
|
},
|
|
"field_types": {
|
|
"id": "uuid",
|
|
"type": "text",
|
|
"archived": "boolean",
|
|
"source_id": "uuid",
|
|
"source_type": "text",
|
|
"target_id": "uuid",
|
|
"target_type": "text",
|
|
"created_at": "timestamptz"
|
|
},
|
|
"schemas": {
|
|
"relationship": {
|
|
"type": "entity",
|
|
"properties": {}
|
|
}
|
|
},
|
|
"variations": [
|
|
"contact",
|
|
"relationship"
|
|
]
|
|
},
|
|
{
|
|
"name": "contact",
|
|
"relationship": true,
|
|
"hierarchy": [
|
|
"entity",
|
|
"relationship",
|
|
"contact"
|
|
],
|
|
"fields": [
|
|
"is_primary",
|
|
"source_id",
|
|
"source_type",
|
|
"target_id",
|
|
"target_type",
|
|
"id",
|
|
"type",
|
|
"archived",
|
|
"created_at"
|
|
],
|
|
"grouped_fields": {
|
|
"entity": [
|
|
"id",
|
|
"type",
|
|
"archived",
|
|
"created_at"
|
|
],
|
|
"relationship": [
|
|
"source_id",
|
|
"source_type",
|
|
"target_id",
|
|
"target_type"
|
|
],
|
|
"contact": [
|
|
"is_primary"
|
|
]
|
|
},
|
|
"field_types": {
|
|
"id": "uuid",
|
|
"type": "text",
|
|
"archived": "boolean",
|
|
"source_id": "uuid",
|
|
"source_type": "text",
|
|
"target_id": "uuid",
|
|
"target_type": "text",
|
|
"is_primary": "boolean",
|
|
"created_at": "timestamptz"
|
|
},
|
|
"schemas": {
|
|
"contact": {
|
|
"type": "relationship",
|
|
"properties": {
|
|
"is_primary": {
|
|
"type": "boolean"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"variations": [
|
|
"contact"
|
|
]
|
|
},
|
|
{
|
|
"name": "phone_number",
|
|
"hierarchy": [
|
|
"entity",
|
|
"phone_number"
|
|
],
|
|
"fields": [
|
|
"number",
|
|
"id",
|
|
"type",
|
|
"archived",
|
|
"created_at"
|
|
],
|
|
"grouped_fields": {
|
|
"entity": [
|
|
"id",
|
|
"type",
|
|
"archived",
|
|
"created_at"
|
|
],
|
|
"phone_number": [
|
|
"number"
|
|
]
|
|
},
|
|
"field_types": {
|
|
"id": "uuid",
|
|
"type": "text",
|
|
"archived": "boolean",
|
|
"number": "text",
|
|
"created_at": "timestamptz"
|
|
},
|
|
"schemas": {
|
|
"phone_number": {
|
|
"type": "entity",
|
|
"properties": {
|
|
"number": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"variations": [
|
|
"phone_number"
|
|
]
|
|
},
|
|
{
|
|
"name": "email_address",
|
|
"hierarchy": [
|
|
"entity",
|
|
"email_address"
|
|
],
|
|
"fields": [
|
|
"address",
|
|
"id",
|
|
"type",
|
|
"archived",
|
|
"created_at"
|
|
],
|
|
"grouped_fields": {
|
|
"entity": [
|
|
"id",
|
|
"type",
|
|
"archived",
|
|
"created_at"
|
|
],
|
|
"email_address": [
|
|
"address"
|
|
]
|
|
},
|
|
"field_types": {
|
|
"id": "uuid",
|
|
"type": "text",
|
|
"archived": "boolean",
|
|
"address": "text",
|
|
"created_at": "timestamptz"
|
|
},
|
|
"schemas": {
|
|
"email_address": {
|
|
"type": "entity",
|
|
"properties": {
|
|
"address": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"variations": [
|
|
"email_address"
|
|
]
|
|
},
|
|
{
|
|
"name": "address",
|
|
"hierarchy": [
|
|
"entity",
|
|
"address"
|
|
],
|
|
"fields": [
|
|
"city",
|
|
"id",
|
|
"type",
|
|
"archived",
|
|
"created_at"
|
|
],
|
|
"grouped_fields": {
|
|
"entity": [
|
|
"id",
|
|
"type",
|
|
"archived",
|
|
"created_at"
|
|
],
|
|
"address": [
|
|
"city"
|
|
]
|
|
},
|
|
"field_types": {
|
|
"id": "uuid",
|
|
"type": "text",
|
|
"archived": "boolean",
|
|
"city": "text",
|
|
"created_at": "timestamptz"
|
|
},
|
|
"schemas": {
|
|
"address": {
|
|
"type": "entity",
|
|
"properties": {
|
|
"city": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"variations": [
|
|
"address"
|
|
]
|
|
},
|
|
{
|
|
"name": "order",
|
|
"schemas": {
|
|
"order": {
|
|
"type": "entity",
|
|
"properties": {
|
|
"total": {
|
|
"type": "number"
|
|
},
|
|
"customer_id": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"counterparty.order": {
|
|
"type": "order",
|
|
"properties": {
|
|
"counterparty": {
|
|
"family": "organization"
|
|
}
|
|
}
|
|
},
|
|
"light.order": {
|
|
"type": "order",
|
|
"properties": {
|
|
"customer": {
|
|
"type": "person"
|
|
}
|
|
}
|
|
},
|
|
"full.order": {
|
|
"type": "order",
|
|
"properties": {
|
|
"customer": {
|
|
"type": "person"
|
|
},
|
|
"lines": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "order_line"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"hierarchy": [
|
|
"entity",
|
|
"order"
|
|
],
|
|
"fields": [
|
|
"id",
|
|
"type",
|
|
"total",
|
|
"customer_id",
|
|
"created_at",
|
|
"archived",
|
|
"counterparty_id",
|
|
"counterparty_type"
|
|
],
|
|
"grouped_fields": {
|
|
"order": [
|
|
"id",
|
|
"type",
|
|
"total",
|
|
"customer_id",
|
|
"counterparty_id",
|
|
"counterparty_type"
|
|
],
|
|
"entity": [
|
|
"id",
|
|
"type",
|
|
"created_at",
|
|
"archived"
|
|
]
|
|
},
|
|
"lookup_fields": [
|
|
"id"
|
|
],
|
|
"historical": true,
|
|
"relationship": false,
|
|
"field_types": {
|
|
"id": "uuid",
|
|
"type": "text",
|
|
"archived": "boolean",
|
|
"total": "numeric",
|
|
"customer_id": "uuid",
|
|
"created_at": "timestamptz",
|
|
"created_by": "uuid",
|
|
"modified_at": "timestamptz",
|
|
"modified_by": "uuid",
|
|
"counterparty_id": "uuid",
|
|
"counterparty_type": "text"
|
|
},
|
|
"variations": [
|
|
"order"
|
|
]
|
|
},
|
|
{
|
|
"name": "order_line",
|
|
"schemas": {
|
|
"order_line": {
|
|
"type": "entity",
|
|
"properties": {
|
|
"order_id": {
|
|
"type": "string"
|
|
},
|
|
"product": {
|
|
"type": "string"
|
|
},
|
|
"price": {
|
|
"type": "number"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"hierarchy": [
|
|
"entity",
|
|
"order_line"
|
|
],
|
|
"fields": [
|
|
"id",
|
|
"type",
|
|
"order_id",
|
|
"product",
|
|
"price",
|
|
"created_at",
|
|
"archived"
|
|
],
|
|
"grouped_fields": {
|
|
"order_line": [
|
|
"id",
|
|
"type",
|
|
"order_id",
|
|
"product",
|
|
"price"
|
|
],
|
|
"entity": [
|
|
"id",
|
|
"type",
|
|
"created_at",
|
|
"archived"
|
|
]
|
|
},
|
|
"lookup_fields": [],
|
|
"historical": true,
|
|
"relationship": false,
|
|
"field_types": {
|
|
"id": "uuid",
|
|
"type": "text",
|
|
"archived": "boolean",
|
|
"order_id": "uuid",
|
|
"product": "text",
|
|
"price": "numeric",
|
|
"created_at": "timestamptz"
|
|
},
|
|
"variations": [
|
|
"order_line"
|
|
]
|
|
},
|
|
{
|
|
"name": "widget",
|
|
"hierarchy": [
|
|
"entity",
|
|
"widget"
|
|
],
|
|
"fields": [
|
|
"id",
|
|
"type",
|
|
"kind",
|
|
"archived",
|
|
"created_at"
|
|
],
|
|
"grouped_fields": {
|
|
"entity": [
|
|
"id",
|
|
"type",
|
|
"archived",
|
|
"created_at"
|
|
],
|
|
"widget": [
|
|
"kind"
|
|
]
|
|
},
|
|
"field_types": {
|
|
"id": "uuid",
|
|
"type": "text",
|
|
"kind": "text",
|
|
"archived": "boolean",
|
|
"created_at": "timestamptz"
|
|
},
|
|
"variations": [
|
|
"widget"
|
|
],
|
|
"schemas": {
|
|
"widget": {
|
|
"type": "entity",
|
|
"properties": {
|
|
"kind": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"stock.widget": {
|
|
"type": "widget",
|
|
"properties": {}
|
|
},
|
|
"tasks.widget": {
|
|
"type": "widget",
|
|
"properties": {}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"name": "account",
|
|
"hierarchy": [
|
|
"entity",
|
|
"account"
|
|
],
|
|
"fields": [
|
|
"id",
|
|
"type",
|
|
"kind",
|
|
"archived",
|
|
"created_at",
|
|
"routing_number",
|
|
"card_number"
|
|
],
|
|
"grouped_fields": {
|
|
"entity": [
|
|
"id",
|
|
"type",
|
|
"archived",
|
|
"created_at"
|
|
],
|
|
"account": [
|
|
"kind",
|
|
"routing_number",
|
|
"card_number"
|
|
]
|
|
},
|
|
"field_types": {
|
|
"id": "uuid",
|
|
"type": "text",
|
|
"kind": "text",
|
|
"archived": "boolean",
|
|
"created_at": "timestamptz",
|
|
"routing_number": "text",
|
|
"card_number": "text"
|
|
},
|
|
"variations": [
|
|
"account"
|
|
],
|
|
"schemas": {
|
|
"account": {
|
|
"type": "entity",
|
|
"properties": {
|
|
"kind": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"cases": [
|
|
{
|
|
"when": {
|
|
"properties": {
|
|
"kind": {
|
|
"const": "checking"
|
|
}
|
|
}
|
|
},
|
|
"then": {
|
|
"properties": {
|
|
"routing_number": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"when": {
|
|
"properties": {
|
|
"kind": {
|
|
"const": "credit"
|
|
}
|
|
}
|
|
},
|
|
"then": {
|
|
"properties": {
|
|
"card_number": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
]
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"name": "invoice",
|
|
"schemas": {
|
|
"invoice": {
|
|
"type": "entity",
|
|
"properties": {
|
|
"total": {
|
|
"type": "number"
|
|
},
|
|
"lines": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "invoice_line"
|
|
}
|
|
},
|
|
"metadata_line": {
|
|
"type": "invoice_line"
|
|
},
|
|
"metadata_lines": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "invoice_line"
|
|
}
|
|
},
|
|
"metadata_nested_line": {
|
|
"type": "object",
|
|
"properties": {
|
|
"line": {
|
|
"type": "invoice_line"
|
|
}
|
|
}
|
|
},
|
|
"metadata_nested_lines": {
|
|
"type": "object",
|
|
"properties": {
|
|
"lines": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "invoice_line"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"hierarchy": [
|
|
"entity",
|
|
"invoice"
|
|
],
|
|
"fields": [
|
|
"id",
|
|
"type",
|
|
"total",
|
|
"metadata_line",
|
|
"metadata_lines",
|
|
"metadata_nested_line",
|
|
"metadata_nested_lines",
|
|
"created_at",
|
|
"archived"
|
|
],
|
|
"grouped_fields": {
|
|
"invoice": [
|
|
"id",
|
|
"type",
|
|
"total",
|
|
"metadata_line",
|
|
"metadata_lines",
|
|
"metadata_nested_line",
|
|
"metadata_nested_lines"
|
|
],
|
|
"entity": [
|
|
"id",
|
|
"type",
|
|
"created_at",
|
|
"archived"
|
|
]
|
|
},
|
|
"lookup_fields": [
|
|
"id"
|
|
],
|
|
"historical": true,
|
|
"relationship": false,
|
|
"field_types": {
|
|
"id": "uuid",
|
|
"type": "text",
|
|
"archived": "boolean",
|
|
"total": "numeric",
|
|
"metadata_line": "jsonb",
|
|
"metadata_lines": "jsonb",
|
|
"metadata_nested_line": "jsonb",
|
|
"metadata_nested_lines": "jsonb",
|
|
"created_at": "timestamptz",
|
|
"created_by": "uuid",
|
|
"modified_at": "timestamptz",
|
|
"modified_by": "uuid"
|
|
},
|
|
"variations": [
|
|
"invoice"
|
|
]
|
|
},
|
|
{
|
|
"name": "invoice_line",
|
|
"schemas": {
|
|
"invoice_line": {
|
|
"type": "entity",
|
|
"properties": {
|
|
"invoice_id": {
|
|
"type": "string"
|
|
},
|
|
"price": {
|
|
"type": "number"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"hierarchy": [
|
|
"entity",
|
|
"invoice_line"
|
|
],
|
|
"fields": [
|
|
"id",
|
|
"type",
|
|
"invoice_id",
|
|
"price",
|
|
"created_at",
|
|
"archived"
|
|
],
|
|
"grouped_fields": {
|
|
"invoice_line": [
|
|
"id",
|
|
"type",
|
|
"invoice_id",
|
|
"price"
|
|
],
|
|
"entity": [
|
|
"id",
|
|
"type",
|
|
"created_at",
|
|
"created_by",
|
|
"modified_at",
|
|
"modified_by",
|
|
"archived"
|
|
]
|
|
},
|
|
"lookup_fields": [],
|
|
"historical": true,
|
|
"relationship": false,
|
|
"field_types": {
|
|
"id": "uuid",
|
|
"type": "text",
|
|
"archived": "boolean",
|
|
"invoice_id": "uuid",
|
|
"price": "numeric",
|
|
"created_at": "timestamptz"
|
|
},
|
|
"variations": [
|
|
"invoice_line"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
"tests": [
|
|
{
|
|
"description": "Simple entity select",
|
|
"action": "query",
|
|
"schema_id": "entity",
|
|
"expect": {
|
|
"success": true,
|
|
"sql": [
|
|
[
|
|
"((SELECT jsonb_strip_nulls((",
|
|
" SELECT jsonb_build_object(",
|
|
" 'id', entity_1.id,",
|
|
" 'type', entity_1.type,",
|
|
" 'archived', entity_1.archived,",
|
|
" 'created_at', entity_1.created_at",
|
|
" )",
|
|
" FROM agreego.entity entity_1",
|
|
" WHERE",
|
|
" NOT entity_1.archived",
|
|
"))))"
|
|
]
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"description": "Simple entity select with multiple filters",
|
|
"action": "query",
|
|
"schema_id": "entity",
|
|
"filter": {
|
|
"id": {
|
|
"$eq": "123e4567-e89b-12d3-a456-426614174000",
|
|
"$ne": "123e4567-e89b-12d3-a456-426614174001",
|
|
"$of": [
|
|
"123e4567-e89b-12d3-a456-426614174000"
|
|
],
|
|
"$nof": [
|
|
"123e4567-e89b-12d3-a456-426614174001"
|
|
]
|
|
},
|
|
"created_at": {
|
|
"$eq": "2023-01-01T00:00:00Z",
|
|
"$ne": "2023-01-02T00:00:00Z",
|
|
"$gt": "2022-01-01T00:00:00Z",
|
|
"$gte": "2022-01-02T00:00:00Z",
|
|
"$lt": "2024-01-01T00:00:00Z",
|
|
"$lte": "2024-01-02T00:00:00Z"
|
|
},
|
|
"archived": {
|
|
"$eq": false,
|
|
"$ne": true
|
|
}
|
|
},
|
|
"expect": {
|
|
"success": true,
|
|
"sql": [
|
|
[
|
|
"((SELECT jsonb_strip_nulls((",
|
|
" SELECT jsonb_build_object(",
|
|
" 'id', entity_1.id,",
|
|
" 'type', entity_1.type,",
|
|
" 'archived', entity_1.archived,",
|
|
" 'created_at', entity_1.created_at",
|
|
" )",
|
|
" FROM agreego.entity entity_1",
|
|
" WHERE",
|
|
" NOT entity_1.archived",
|
|
" AND entity_1.archived = ($1 #>> '{}')::BOOLEAN",
|
|
" AND entity_1.archived <> ($2 #>> '{}')::BOOLEAN",
|
|
" AND entity_1.created_at = ($3 #>> '{}')::TIMESTAMPTZ",
|
|
" AND entity_1.created_at > ($4 #>> '{}')::TIMESTAMPTZ",
|
|
" AND entity_1.created_at >= ($5 #>> '{}')::TIMESTAMPTZ",
|
|
" AND entity_1.created_at < ($6 #>> '{}')::TIMESTAMPTZ",
|
|
" AND entity_1.created_at <= ($7 #>> '{}')::TIMESTAMPTZ",
|
|
" AND entity_1.created_at <> ($8 #>> '{}')::TIMESTAMPTZ",
|
|
" AND entity_1.id = ($9 #>> '{}')::UUID",
|
|
" AND entity_1.id <> ($10 #>> '{}')::UUID",
|
|
" AND entity_1.id NOT IN (SELECT value::UUID FROM jsonb_array_elements_text(($11 #>> '{}')::jsonb))",
|
|
" AND entity_1.id IN (SELECT value::UUID FROM jsonb_array_elements_text(($12 #>> '{}')::jsonb))",
|
|
"))))"
|
|
]
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"description": "Person select on base schema",
|
|
"action": "query",
|
|
"schema_id": "person",
|
|
"expect": {
|
|
"success": true,
|
|
"sql": [
|
|
[
|
|
"((SELECT jsonb_strip_nulls((",
|
|
" SELECT jsonb_build_object(",
|
|
" 'id', entity_1.id,",
|
|
" 'type', entity_1.type,",
|
|
" 'archived', entity_1.archived,",
|
|
" 'created_at', entity_1.created_at,",
|
|
" 'name', organization_2.name,",
|
|
" 'first_name', person_3.first_name,",
|
|
" 'last_name', person_3.last_name,",
|
|
" 'age', person_3.age",
|
|
" )",
|
|
" FROM agreego.entity entity_1",
|
|
" JOIN agreego.organization organization_2 ON organization_2.id = entity_1.id",
|
|
" JOIN agreego.person person_3 ON person_3.id = organization_2.id",
|
|
" WHERE",
|
|
" NOT entity_1.archived",
|
|
"))))"
|
|
]
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"description": "Person select on full schema",
|
|
"action": "query",
|
|
"schema_id": "full.person",
|
|
"expect": {
|
|
"success": true,
|
|
"sql": [
|
|
[
|
|
"((SELECT jsonb_strip_nulls((",
|
|
" SELECT jsonb_build_object(",
|
|
" 'id', entity_1.id,",
|
|
" 'type', entity_1.type,",
|
|
" 'archived', entity_1.archived,",
|
|
" 'created_at', entity_1.created_at,",
|
|
" 'name', organization_2.name,",
|
|
" 'first_name', person_3.first_name,",
|
|
" 'last_name', person_3.last_name,",
|
|
" 'age', person_3.age,",
|
|
" 'phone_numbers', (",
|
|
" SELECT COALESCE(jsonb_agg(jsonb_build_object(",
|
|
" 'id', entity_4.id,",
|
|
" 'type', entity_4.type,",
|
|
" 'archived', entity_4.archived,",
|
|
" 'created_at', entity_4.created_at,",
|
|
" 'is_primary', contact_6.is_primary,",
|
|
" 'target', (",
|
|
" SELECT jsonb_build_object(",
|
|
" 'id', entity_7.id,",
|
|
" 'type', entity_7.type,",
|
|
" 'archived', entity_7.archived,",
|
|
" 'created_at', entity_7.created_at,",
|
|
" 'number', phone_number_8.number",
|
|
" )",
|
|
" FROM agreego.entity entity_7",
|
|
" JOIN agreego.phone_number phone_number_8 ON phone_number_8.id = entity_7.id",
|
|
" WHERE",
|
|
" NOT entity_7.archived",
|
|
" AND relationship_5.target_id = entity_7.id",
|
|
" )",
|
|
" )), '[]'::jsonb)",
|
|
" FROM agreego.entity entity_4",
|
|
" JOIN agreego.relationship relationship_5 ON relationship_5.id = entity_4.id",
|
|
" JOIN agreego.contact contact_6 ON contact_6.id = relationship_5.id",
|
|
" WHERE",
|
|
" NOT entity_4.archived",
|
|
" AND relationship_5.target_type = 'phone_number'",
|
|
" AND relationship_5.source_id = entity_1.id",
|
|
" ),",
|
|
" 'email_addresses', (",
|
|
" SELECT COALESCE(jsonb_agg(jsonb_build_object(",
|
|
" 'id', entity_9.id,",
|
|
" 'type', entity_9.type,",
|
|
" 'archived', entity_9.archived,",
|
|
" 'created_at', entity_9.created_at,",
|
|
" 'is_primary', contact_11.is_primary,",
|
|
" 'target', (",
|
|
" SELECT jsonb_build_object(",
|
|
" 'id', entity_12.id,",
|
|
" 'type', entity_12.type,",
|
|
" 'archived', entity_12.archived,",
|
|
" 'created_at', entity_12.created_at,",
|
|
" 'address', email_address_13.address",
|
|
" )",
|
|
" FROM agreego.entity entity_12",
|
|
" JOIN agreego.email_address email_address_13 ON email_address_13.id = entity_12.id",
|
|
" WHERE",
|
|
" NOT entity_12.archived",
|
|
" AND relationship_10.target_id = entity_12.id",
|
|
" )",
|
|
" )), '[]'::jsonb)",
|
|
" FROM agreego.entity entity_9",
|
|
" JOIN agreego.relationship relationship_10 ON relationship_10.id = entity_9.id",
|
|
" JOIN agreego.contact contact_11 ON contact_11.id = relationship_10.id",
|
|
" WHERE",
|
|
" NOT entity_9.archived",
|
|
" AND relationship_10.target_type = 'email_address'",
|
|
" AND relationship_10.source_id = entity_1.id",
|
|
" ),",
|
|
" 'addresses', (",
|
|
" SELECT COALESCE(jsonb_agg(jsonb_build_object(",
|
|
" 'id', entity_14.id,",
|
|
" 'type', entity_14.type,",
|
|
" 'archived', entity_14.archived,",
|
|
" 'created_at', entity_14.created_at,",
|
|
" 'is_primary', contact_16.is_primary,",
|
|
" 'target', (",
|
|
" SELECT jsonb_build_object(",
|
|
" 'id', entity_17.id,",
|
|
" 'type', entity_17.type,",
|
|
" 'archived', entity_17.archived,",
|
|
" 'created_at', entity_17.created_at,",
|
|
" 'city', address_18.city",
|
|
" )",
|
|
" FROM agreego.entity entity_17",
|
|
" JOIN agreego.address address_18 ON address_18.id = entity_17.id",
|
|
" WHERE",
|
|
" NOT entity_17.archived",
|
|
" AND relationship_15.target_id = entity_17.id",
|
|
" )",
|
|
" )), '[]'::jsonb)",
|
|
" FROM agreego.entity entity_14",
|
|
" JOIN agreego.relationship relationship_15 ON relationship_15.id = entity_14.id",
|
|
" JOIN agreego.contact contact_16 ON contact_16.id = relationship_15.id",
|
|
" WHERE",
|
|
" NOT entity_14.archived",
|
|
" AND relationship_15.target_type = 'address'",
|
|
" AND relationship_15.source_id = entity_1.id",
|
|
" ),",
|
|
" 'contacts', (",
|
|
" SELECT COALESCE(jsonb_agg(jsonb_build_object(",
|
|
" 'id', entity_19.id,",
|
|
" 'type', entity_19.type,",
|
|
" 'archived', entity_19.archived,",
|
|
" 'created_at', entity_19.created_at,",
|
|
" 'is_primary', contact_21.is_primary,",
|
|
" 'target', CASE",
|
|
" WHEN relationship_20.target_type = 'phone_number' THEN ((",
|
|
" SELECT jsonb_build_object(",
|
|
" 'id', entity_22.id,",
|
|
" 'type', entity_22.type,",
|
|
" 'archived', entity_22.archived,",
|
|
" 'created_at', entity_22.created_at,",
|
|
" 'number', phone_number_23.number",
|
|
" )",
|
|
" FROM agreego.entity entity_22",
|
|
" JOIN agreego.phone_number phone_number_23 ON phone_number_23.id = entity_22.id",
|
|
" WHERE",
|
|
" NOT entity_22.archived",
|
|
" AND relationship_20.target_id = entity_22.id",
|
|
" ))",
|
|
" WHEN relationship_20.target_type = 'email_address' THEN ((",
|
|
" SELECT jsonb_build_object(",
|
|
" 'id', entity_24.id,",
|
|
" 'type', entity_24.type,",
|
|
" 'archived', entity_24.archived,",
|
|
" 'created_at', entity_24.created_at,",
|
|
" 'address', email_address_25.address",
|
|
" )",
|
|
" FROM agreego.entity entity_24",
|
|
" JOIN agreego.email_address email_address_25 ON email_address_25.id = entity_24.id",
|
|
" WHERE",
|
|
" NOT entity_24.archived",
|
|
" AND relationship_20.target_id = entity_24.id",
|
|
" ))",
|
|
" WHEN relationship_20.target_type = 'address' THEN ((",
|
|
" SELECT jsonb_build_object(",
|
|
" 'id', entity_26.id,",
|
|
" 'type', entity_26.type,",
|
|
" 'archived', entity_26.archived,",
|
|
" 'created_at', entity_26.created_at,",
|
|
" 'city', address_27.city",
|
|
" )",
|
|
" FROM agreego.entity entity_26",
|
|
" JOIN agreego.address address_27 ON address_27.id = entity_26.id",
|
|
" WHERE",
|
|
" NOT entity_26.archived",
|
|
" AND relationship_20.target_id = entity_26.id",
|
|
" ))",
|
|
" ELSE NULL",
|
|
" END",
|
|
" )), '[]'::jsonb)",
|
|
" FROM agreego.entity entity_19",
|
|
" JOIN agreego.relationship relationship_20 ON relationship_20.id = entity_19.id",
|
|
" JOIN agreego.contact contact_21 ON contact_21.id = relationship_20.id",
|
|
" WHERE",
|
|
" NOT entity_19.archived",
|
|
" AND relationship_20.source_id = entity_1.id",
|
|
" )",
|
|
" )",
|
|
" FROM agreego.entity entity_1",
|
|
" JOIN agreego.organization organization_2 ON organization_2.id = entity_1.id",
|
|
" JOIN agreego.person person_3 ON person_3.id = organization_2.id",
|
|
" WHERE",
|
|
" NOT entity_1.archived",
|
|
"))))"
|
|
]
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"description": "Person select on full schema with filters",
|
|
"action": "query",
|
|
"schema_id": "full.person",
|
|
"filter": {
|
|
"age": {
|
|
"$eq": 30,
|
|
"$gt": 20,
|
|
"$gte": 20,
|
|
"$of": [
|
|
30,
|
|
40
|
|
],
|
|
"$lt": 50,
|
|
"$lte": 50,
|
|
"$ne": 25,
|
|
"$nof": [
|
|
1,
|
|
2
|
|
]
|
|
},
|
|
"archived": {
|
|
"$eq": true,
|
|
"$ne": false
|
|
},
|
|
"contacts": {
|
|
"is_primary": {
|
|
"$eq": true
|
|
}
|
|
},
|
|
"created_at": {
|
|
"$eq": "2020-01-01T00:00:00Z",
|
|
"$gt": "2019-01-01T00:00:00Z",
|
|
"$gte": "2019-01-01T00:00:00Z",
|
|
"$lt": "2021-01-01T00:00:00Z",
|
|
"$lte": "2021-01-01T00:00:00Z",
|
|
"$ne": "2022-01-01T00:00:00Z"
|
|
},
|
|
"first_name": {
|
|
"$eq": "Jane%",
|
|
"$gt": "A",
|
|
"$gte": "A",
|
|
"$of": [
|
|
"Jane",
|
|
"John"
|
|
],
|
|
"$lt": "Z",
|
|
"$lte": "Z",
|
|
"$ne": "Doe",
|
|
"$nof": [
|
|
"Bob"
|
|
]
|
|
},
|
|
"id": {
|
|
"$eq": "00000000-0000-0000-0000-000000000001",
|
|
"$of": [
|
|
"00000000-0000-0000-0000-000000000001"
|
|
],
|
|
"$ne": "00000000-0000-0000-0000-000000000002",
|
|
"$nof": [
|
|
"00000000-0000-0000-0000-000000000002"
|
|
]
|
|
},
|
|
"last_name": {
|
|
"$eq": "%Doe%",
|
|
"$ne": "%Smith%"
|
|
},
|
|
"phone_numbers": {
|
|
"target": {
|
|
"number": {
|
|
"$eq": "555-1234"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"expect": {
|
|
"success": true,
|
|
"sql": [
|
|
[
|
|
"((SELECT jsonb_strip_nulls((",
|
|
" SELECT jsonb_build_object(",
|
|
" 'id', entity_1.id,",
|
|
" 'type', entity_1.type,",
|
|
" 'archived', entity_1.archived,",
|
|
" 'created_at', entity_1.created_at,",
|
|
" 'name', organization_2.name,",
|
|
" 'first_name', person_3.first_name,",
|
|
" 'last_name', person_3.last_name,",
|
|
" 'age', person_3.age,",
|
|
" 'phone_numbers', (",
|
|
" SELECT COALESCE(jsonb_agg(jsonb_build_object(",
|
|
" 'id', entity_4.id,",
|
|
" 'type', entity_4.type,",
|
|
" 'archived', entity_4.archived,",
|
|
" 'created_at', entity_4.created_at,",
|
|
" 'is_primary', contact_6.is_primary,",
|
|
" 'target', (",
|
|
" SELECT jsonb_build_object(",
|
|
" 'id', entity_7.id,",
|
|
" 'type', entity_7.type,",
|
|
" 'archived', entity_7.archived,",
|
|
" 'created_at', entity_7.created_at,",
|
|
" 'number', phone_number_8.number",
|
|
" )",
|
|
" FROM agreego.entity entity_7",
|
|
" JOIN agreego.phone_number phone_number_8 ON phone_number_8.id = entity_7.id",
|
|
" WHERE",
|
|
" NOT entity_7.archived",
|
|
" AND phone_number_8.number ILIKE $32 #>> '{}'",
|
|
" AND relationship_5.target_id = entity_7.id",
|
|
" )",
|
|
" )), '[]'::jsonb)",
|
|
" FROM agreego.entity entity_4",
|
|
" JOIN agreego.relationship relationship_5 ON relationship_5.id = entity_4.id",
|
|
" JOIN agreego.contact contact_6 ON contact_6.id = relationship_5.id",
|
|
" WHERE",
|
|
" NOT entity_4.archived",
|
|
" AND relationship_5.target_type = 'phone_number'",
|
|
" AND relationship_5.source_id = entity_1.id",
|
|
" ),",
|
|
" 'email_addresses', (",
|
|
" SELECT COALESCE(jsonb_agg(jsonb_build_object(",
|
|
" 'id', entity_9.id,",
|
|
" 'type', entity_9.type,",
|
|
" 'archived', entity_9.archived,",
|
|
" 'created_at', entity_9.created_at,",
|
|
" 'is_primary', contact_11.is_primary,",
|
|
" 'target', (",
|
|
" SELECT jsonb_build_object(",
|
|
" 'id', entity_12.id,",
|
|
" 'type', entity_12.type,",
|
|
" 'archived', entity_12.archived,",
|
|
" 'created_at', entity_12.created_at,",
|
|
" 'address', email_address_13.address",
|
|
" )",
|
|
" FROM agreego.entity entity_12",
|
|
" JOIN agreego.email_address email_address_13 ON email_address_13.id = entity_12.id",
|
|
" WHERE",
|
|
" NOT entity_12.archived",
|
|
" AND relationship_10.target_id = entity_12.id",
|
|
" )",
|
|
" )), '[]'::jsonb)",
|
|
" FROM agreego.entity entity_9",
|
|
" JOIN agreego.relationship relationship_10 ON relationship_10.id = entity_9.id",
|
|
" JOIN agreego.contact contact_11 ON contact_11.id = relationship_10.id",
|
|
" WHERE",
|
|
" NOT entity_9.archived",
|
|
" AND relationship_10.target_type = 'email_address'",
|
|
" AND relationship_10.source_id = entity_1.id",
|
|
" ),",
|
|
" 'addresses', (",
|
|
" SELECT COALESCE(jsonb_agg(jsonb_build_object(",
|
|
" 'id', entity_14.id,",
|
|
" 'type', entity_14.type,",
|
|
" 'archived', entity_14.archived,",
|
|
" 'created_at', entity_14.created_at,",
|
|
" 'is_primary', contact_16.is_primary,",
|
|
" 'target', (",
|
|
" SELECT jsonb_build_object(",
|
|
" 'id', entity_17.id,",
|
|
" 'type', entity_17.type,",
|
|
" 'archived', entity_17.archived,",
|
|
" 'created_at', entity_17.created_at,",
|
|
" 'city', address_18.city",
|
|
" )",
|
|
" FROM agreego.entity entity_17",
|
|
" JOIN agreego.address address_18 ON address_18.id = entity_17.id",
|
|
" WHERE",
|
|
" NOT entity_17.archived",
|
|
" AND relationship_15.target_id = entity_17.id",
|
|
" )",
|
|
" )), '[]'::jsonb)",
|
|
" FROM agreego.entity entity_14",
|
|
" JOIN agreego.relationship relationship_15 ON relationship_15.id = entity_14.id",
|
|
" JOIN agreego.contact contact_16 ON contact_16.id = relationship_15.id",
|
|
" WHERE",
|
|
" NOT entity_14.archived",
|
|
" AND relationship_15.target_type = 'address'",
|
|
" AND relationship_15.source_id = entity_1.id",
|
|
" ),",
|
|
" 'contacts', (",
|
|
" SELECT COALESCE(jsonb_agg(jsonb_build_object(",
|
|
" 'id', entity_19.id,",
|
|
" 'type', entity_19.type,",
|
|
" 'archived', entity_19.archived,",
|
|
" 'created_at', entity_19.created_at,",
|
|
" 'is_primary', contact_21.is_primary,",
|
|
" 'target', CASE",
|
|
" WHEN relationship_20.target_type = 'phone_number' THEN ((",
|
|
" SELECT jsonb_build_object(",
|
|
" 'id', entity_22.id,",
|
|
" 'type', entity_22.type,",
|
|
" 'archived', entity_22.archived,",
|
|
" 'created_at', entity_22.created_at,",
|
|
" 'number', phone_number_23.number",
|
|
" )",
|
|
" FROM agreego.entity entity_22",
|
|
" JOIN agreego.phone_number phone_number_23 ON phone_number_23.id = entity_22.id",
|
|
" WHERE",
|
|
" NOT entity_22.archived",
|
|
" AND relationship_20.target_id = entity_22.id",
|
|
" ))",
|
|
" WHEN relationship_20.target_type = 'email_address' THEN ((",
|
|
" SELECT jsonb_build_object(",
|
|
" 'id', entity_24.id,",
|
|
" 'type', entity_24.type,",
|
|
" 'archived', entity_24.archived,",
|
|
" 'created_at', entity_24.created_at,",
|
|
" 'address', email_address_25.address",
|
|
" )",
|
|
" FROM agreego.entity entity_24",
|
|
" JOIN agreego.email_address email_address_25 ON email_address_25.id = entity_24.id",
|
|
" WHERE",
|
|
" NOT entity_24.archived",
|
|
" AND relationship_20.target_id = entity_24.id",
|
|
" ))",
|
|
" WHEN relationship_20.target_type = 'address' THEN ((",
|
|
" SELECT jsonb_build_object(",
|
|
" 'id', entity_26.id,",
|
|
" 'type', entity_26.type,",
|
|
" 'archived', entity_26.archived,",
|
|
" 'created_at', entity_26.created_at,",
|
|
" 'city', address_27.city",
|
|
" )",
|
|
" FROM agreego.entity entity_26",
|
|
" JOIN agreego.address address_27 ON address_27.id = entity_26.id",
|
|
" WHERE",
|
|
" NOT entity_26.archived",
|
|
" AND relationship_20.target_id = entity_26.id",
|
|
" ))",
|
|
" ELSE NULL",
|
|
" END",
|
|
" )), '[]'::jsonb)",
|
|
" FROM agreego.entity entity_19",
|
|
" JOIN agreego.relationship relationship_20 ON relationship_20.id = entity_19.id",
|
|
" JOIN agreego.contact contact_21 ON contact_21.id = relationship_20.id",
|
|
" WHERE",
|
|
" NOT entity_19.archived",
|
|
" AND contact_21.is_primary = ($11 #>> '{}')::BOOLEAN",
|
|
" AND relationship_20.source_id = entity_1.id",
|
|
" )",
|
|
" )",
|
|
" FROM agreego.entity entity_1",
|
|
" JOIN agreego.organization organization_2 ON organization_2.id = entity_1.id",
|
|
" JOIN agreego.person person_3 ON person_3.id = organization_2.id",
|
|
" WHERE",
|
|
" NOT entity_1.archived",
|
|
" AND person_3.age = ($1 #>> '{}')::NUMERIC",
|
|
" AND person_3.age > ($2 #>> '{}')::NUMERIC",
|
|
" AND person_3.age >= ($3 #>> '{}')::NUMERIC",
|
|
" AND person_3.age < ($4 #>> '{}')::NUMERIC",
|
|
" AND person_3.age <= ($5 #>> '{}')::NUMERIC",
|
|
" AND person_3.age <> ($6 #>> '{}')::NUMERIC",
|
|
" AND person_3.age NOT IN (SELECT value::NUMERIC FROM jsonb_array_elements_text(($7 #>> '{}')::jsonb))",
|
|
" AND person_3.age IN (SELECT value::NUMERIC FROM jsonb_array_elements_text(($8 #>> '{}')::jsonb))",
|
|
" AND entity_1.archived = ($9 #>> '{}')::BOOLEAN",
|
|
" AND entity_1.archived <> ($10 #>> '{}')::BOOLEAN",
|
|
" AND entity_1.created_at = ($12 #>> '{}')::TIMESTAMPTZ",
|
|
" AND entity_1.created_at > ($13 #>> '{}')::TIMESTAMPTZ",
|
|
" AND entity_1.created_at >= ($14 #>> '{}')::TIMESTAMPTZ",
|
|
" AND entity_1.created_at < ($15 #>> '{}')::TIMESTAMPTZ",
|
|
" AND entity_1.created_at <= ($16 #>> '{}')::TIMESTAMPTZ",
|
|
" AND entity_1.created_at <> ($17 #>> '{}')::TIMESTAMPTZ",
|
|
" AND person_3.first_name ILIKE $18 #>> '{}'",
|
|
" AND person_3.first_name > ($19 #>> '{)",
|
|
" AND person_3.first_name >= ($20 #>> '{)",
|
|
" AND person_3.first_name < ($21 #>> '{)",
|
|
" AND person_3.first_name <= ($22 #>> '{)",
|
|
" AND person_3.first_name NOT ILIKE $23 #>> '{}'",
|
|
" AND person_3.first_name NOT IN (SELECT value FROM jsonb_array_elements_text(($24 #>> '{}')::jsonb))",
|
|
" AND person_3.first_name IN (SELECT value FROM jsonb_array_elements_text(($25 #>> '{}')::jsonb))",
|
|
" AND entity_1.id = ($26 #>> '{}')::UUID",
|
|
" AND entity_1.id <> ($27 #>> '{}')::UUID",
|
|
" AND entity_1.id NOT IN (SELECT value::UUID FROM jsonb_array_elements_text(($28 #>> '{}')::jsonb))",
|
|
" AND entity_1.id IN (SELECT value::UUID FROM jsonb_array_elements_text(($29 #>> '{}')::jsonb))",
|
|
" AND person_3.last_name ILIKE $30 #>> '{}'",
|
|
" AND person_3.last_name NOT ILIKE $31 #>> '{}'",
|
|
" ))))"
|
|
]
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"description": "Person ad-hoc email addresses select",
|
|
"action": "query",
|
|
"schema_id": "full.person/email_addresses",
|
|
"expect": {
|
|
"success": true,
|
|
"sql": [
|
|
[
|
|
"((SELECT jsonb_strip_nulls((",
|
|
" SELECT COALESCE(jsonb_agg(jsonb_build_object(",
|
|
" 'id', entity_1.id,",
|
|
" 'type', entity_1.type,",
|
|
" 'archived', entity_1.archived,",
|
|
" 'created_at', entity_1.created_at,",
|
|
" 'is_primary', contact_3.is_primary,",
|
|
" 'target', (",
|
|
" SELECT jsonb_build_object(",
|
|
" 'id', entity_4.id,",
|
|
" 'type', entity_4.type,",
|
|
" 'archived', entity_4.archived,",
|
|
" 'created_at', entity_4.created_at,",
|
|
" 'address', email_address_5.address",
|
|
" )",
|
|
" FROM agreego.entity entity_4",
|
|
" JOIN agreego.email_address email_address_5 ON email_address_5.id = entity_4.id",
|
|
" WHERE",
|
|
" NOT entity_4.archived",
|
|
" AND relationship_2.target_id = entity_4.id",
|
|
" )",
|
|
" )), '[]'::jsonb)",
|
|
" FROM agreego.entity entity_1",
|
|
" JOIN agreego.relationship relationship_2 ON relationship_2.id = entity_1.id",
|
|
" JOIN agreego.contact contact_3 ON contact_3.id = relationship_2.id",
|
|
" WHERE",
|
|
" NOT entity_1.archived",
|
|
" AND relationship_2.target_type = 'email_address'",
|
|
"))))"
|
|
]
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"description": "Order select with customer and lines",
|
|
"action": "query",
|
|
"schema_id": "full.order",
|
|
"expect": {
|
|
"success": true,
|
|
"sql": [
|
|
[
|
|
"((SELECT jsonb_strip_nulls((",
|
|
" SELECT jsonb_build_object(",
|
|
" 'id', order_2.id,",
|
|
" 'type', order_2.type,",
|
|
" 'archived', entity_1.archived,",
|
|
" 'created_at', entity_1.created_at,",
|
|
" 'total', order_2.total,",
|
|
" 'customer_id', order_2.customer_id,",
|
|
" 'customer', (",
|
|
" SELECT jsonb_build_object(",
|
|
" 'id', entity_3.id,",
|
|
" 'type', entity_3.type,",
|
|
" 'archived', entity_3.archived,",
|
|
" 'created_at', entity_3.created_at,",
|
|
" 'name', organization_4.name,",
|
|
" 'first_name', person_5.first_name,",
|
|
" 'last_name', person_5.last_name,",
|
|
" 'age', person_5.age",
|
|
" )",
|
|
" FROM agreego.entity entity_3",
|
|
" JOIN agreego.organization organization_4 ON organization_4.id = entity_3.id",
|
|
" JOIN agreego.person person_5 ON person_5.id = organization_4.id",
|
|
" WHERE",
|
|
" NOT entity_3.archived",
|
|
" AND order_2.customer_id = person_5.id",
|
|
" ),",
|
|
" 'lines', (",
|
|
" SELECT COALESCE(jsonb_agg(jsonb_build_object(",
|
|
" 'id', order_line_7.id,",
|
|
" 'type', order_line_7.type,",
|
|
" 'archived', entity_6.archived,",
|
|
" 'created_at', entity_6.created_at,",
|
|
" 'order_id', order_line_7.order_id,",
|
|
" 'product', order_line_7.product,",
|
|
" 'price', order_line_7.price",
|
|
" )), '[]'::jsonb)",
|
|
" FROM agreego.entity entity_6",
|
|
" JOIN agreego.order_line order_line_7 ON order_line_7.id = entity_6.id",
|
|
" WHERE",
|
|
" NOT entity_6.archived",
|
|
" AND order_line_7.order_id = order_2.id",
|
|
" )",
|
|
" )",
|
|
" FROM agreego.entity entity_1",
|
|
" JOIN agreego.order order_2 ON order_2.id = entity_1.id",
|
|
" WHERE",
|
|
" NOT entity_1.archived",
|
|
"))))"
|
|
]
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"description": "Organization select via a punc response with ref",
|
|
"action": "query",
|
|
"schema_id": "get_organization.response",
|
|
"expect": {
|
|
"success": true,
|
|
"sql": [
|
|
[
|
|
"((SELECT jsonb_strip_nulls((",
|
|
" SELECT jsonb_build_object(",
|
|
" 'id', entity_1.id,",
|
|
" 'type', entity_1.type,",
|
|
" 'archived', entity_1.archived,",
|
|
" 'created_at', entity_1.created_at,",
|
|
" 'name', organization_2.name",
|
|
" )",
|
|
" FROM agreego.entity entity_1",
|
|
" JOIN agreego.organization organization_2 ON organization_2.id = entity_1.id",
|
|
" WHERE",
|
|
" NOT entity_1.archived",
|
|
"))))"
|
|
]
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"description": "Organizations select via a punc response with family",
|
|
"action": "query",
|
|
"schema_id": "get_organizations.response",
|
|
"expect": {
|
|
"success": true,
|
|
"sql": [
|
|
[
|
|
"((SELECT jsonb_strip_nulls((",
|
|
" SELECT COALESCE(jsonb_agg(CASE",
|
|
" WHEN organization_2.type = 'bot' THEN ((",
|
|
" SELECT jsonb_build_object(",
|
|
" 'id', entity_3.id,",
|
|
" 'type', entity_3.type,",
|
|
" 'archived', entity_3.archived,",
|
|
" 'created_at', entity_3.created_at,",
|
|
" 'name', organization_4.name,",
|
|
" 'token', bot_5.token,",
|
|
" 'role', bot_5.role",
|
|
" )",
|
|
" FROM agreego.entity entity_3",
|
|
" JOIN agreego.organization organization_4 ON organization_4.id = entity_3.id",
|
|
" JOIN agreego.bot bot_5 ON bot_5.id = organization_4.id",
|
|
" WHERE",
|
|
" NOT entity_3.archived",
|
|
" AND entity_3.id = entity_1.id",
|
|
" ))",
|
|
" WHEN organization_2.type = 'organization' THEN ((",
|
|
" SELECT jsonb_build_object(",
|
|
" 'id', entity_6.id,",
|
|
" 'type', entity_6.type,",
|
|
" 'archived', entity_6.archived,",
|
|
" 'created_at', entity_6.created_at,",
|
|
" 'name', organization_7.name",
|
|
" )",
|
|
" FROM agreego.entity entity_6",
|
|
" JOIN agreego.organization organization_7 ON organization_7.id = entity_6.id",
|
|
" WHERE",
|
|
" NOT entity_6.archived",
|
|
" AND entity_6.id = entity_1.id",
|
|
" ))",
|
|
" WHEN organization_2.type = 'person' THEN ((",
|
|
" SELECT jsonb_build_object(",
|
|
" 'id', entity_8.id,",
|
|
" 'type', entity_8.type,",
|
|
" 'archived', entity_8.archived,",
|
|
" 'created_at', entity_8.created_at,",
|
|
" 'name', organization_9.name,",
|
|
" 'first_name', person_10.first_name,",
|
|
" 'last_name', person_10.last_name,",
|
|
" 'age', person_10.age",
|
|
" )",
|
|
" FROM agreego.entity entity_8",
|
|
" JOIN agreego.organization organization_9 ON organization_9.id = entity_8.id",
|
|
" JOIN agreego.person person_10 ON person_10.id = organization_9.id",
|
|
" WHERE",
|
|
" NOT entity_8.archived",
|
|
" AND entity_8.id = entity_1.id",
|
|
" ))",
|
|
" ELSE NULL",
|
|
" END), '[]'::jsonb)",
|
|
" FROM agreego.entity entity_1",
|
|
" JOIN agreego.organization organization_2 ON organization_2.id = entity_1.id",
|
|
" WHERE",
|
|
" NOT entity_1.archived",
|
|
"))))"
|
|
]
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"description": "Light organizations select via a punc response with family",
|
|
"action": "query",
|
|
"schema_id": "get_light_organization.response",
|
|
"expect": {
|
|
"success": true,
|
|
"sql": [
|
|
[
|
|
"((SELECT jsonb_strip_nulls((",
|
|
" SELECT CASE",
|
|
" WHEN organization_2.type = 'bot' THEN ((",
|
|
" SELECT jsonb_build_object(",
|
|
" 'id', entity_3.id,",
|
|
" 'type', entity_3.type,",
|
|
" 'archived', entity_3.archived,",
|
|
" 'created_at', entity_3.created_at,",
|
|
" 'name', organization_4.name,",
|
|
" 'token', bot_5.token",
|
|
" )",
|
|
" FROM agreego.entity entity_3",
|
|
" JOIN agreego.organization organization_4 ON organization_4.id = entity_3.id",
|
|
" JOIN agreego.bot bot_5 ON bot_5.id = organization_4.id",
|
|
" WHERE",
|
|
" NOT entity_3.archived",
|
|
" AND entity_3.id = entity_1.id",
|
|
" ))",
|
|
" WHEN organization_2.type = 'person' THEN ((",
|
|
" SELECT jsonb_build_object(",
|
|
" 'id', entity_6.id,",
|
|
" 'type', entity_6.type,",
|
|
" 'archived', entity_6.archived,",
|
|
" 'created_at', entity_6.created_at,",
|
|
" 'name', organization_7.name,",
|
|
" 'first_name', person_8.first_name,",
|
|
" 'last_name', person_8.last_name",
|
|
" )",
|
|
" FROM agreego.entity entity_6",
|
|
" JOIN agreego.organization organization_7 ON organization_7.id = entity_6.id",
|
|
" JOIN agreego.person person_8 ON person_8.id = organization_7.id",
|
|
" WHERE",
|
|
" NOT entity_6.archived",
|
|
" AND entity_6.id = entity_1.id",
|
|
" ))",
|
|
" ELSE NULL",
|
|
" END",
|
|
" FROM agreego.entity entity_1",
|
|
" JOIN agreego.organization organization_2 ON organization_2.id = entity_1.id",
|
|
" WHERE",
|
|
" NOT entity_1.archived",
|
|
"))))"
|
|
]
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"description": "Full organizations select via a punc response with family",
|
|
"action": "query",
|
|
"schema_id": "get_full_organization.response",
|
|
"expect": {
|
|
"success": true,
|
|
"sql": [
|
|
[
|
|
"((SELECT jsonb_strip_nulls((",
|
|
" SELECT CASE",
|
|
" WHEN organization_2.type = 'person' THEN ((",
|
|
" SELECT jsonb_build_object(",
|
|
" 'id', entity_3.id,",
|
|
" 'type', entity_3.type,",
|
|
" 'archived', entity_3.archived,",
|
|
" 'created_at', entity_3.created_at,",
|
|
" 'name', organization_4.name,",
|
|
" 'first_name', person_5.first_name,",
|
|
" 'last_name', person_5.last_name,",
|
|
" 'age', person_5.age,",
|
|
" 'phone_numbers', (",
|
|
" SELECT COALESCE(jsonb_agg(jsonb_build_object(",
|
|
" 'id', entity_6.id,",
|
|
" 'type', entity_6.type,",
|
|
" 'archived', entity_6.archived,",
|
|
" 'created_at', entity_6.created_at,",
|
|
" 'is_primary', contact_8.is_primary,",
|
|
" 'target', (",
|
|
" SELECT jsonb_build_object(",
|
|
" 'id', entity_9.id,",
|
|
" 'type', entity_9.type,",
|
|
" 'archived', entity_9.archived,",
|
|
" 'created_at', entity_9.created_at,",
|
|
" 'number', phone_number_10.number",
|
|
" )",
|
|
" FROM agreego.entity entity_9",
|
|
" JOIN agreego.phone_number phone_number_10 ON phone_number_10.id = entity_9.id",
|
|
" WHERE",
|
|
" NOT entity_9.archived",
|
|
" AND relationship_7.target_id = entity_9.id",
|
|
" )",
|
|
" )), '[]'::jsonb)",
|
|
" FROM agreego.entity entity_6",
|
|
" JOIN agreego.relationship relationship_7 ON relationship_7.id = entity_6.id",
|
|
" JOIN agreego.contact contact_8 ON contact_8.id = relationship_7.id",
|
|
" WHERE",
|
|
" NOT entity_6.archived",
|
|
" AND relationship_7.target_type = 'phone_number'",
|
|
" AND relationship_7.source_id = entity_3.id",
|
|
" ),",
|
|
" 'email_addresses', (",
|
|
" SELECT COALESCE(jsonb_agg(jsonb_build_object(",
|
|
" 'id', entity_11.id,",
|
|
" 'type', entity_11.type,",
|
|
" 'archived', entity_11.archived,",
|
|
" 'created_at', entity_11.created_at,",
|
|
" 'is_primary', contact_13.is_primary,",
|
|
" 'target', (",
|
|
" SELECT jsonb_build_object(",
|
|
" 'id', entity_14.id,",
|
|
" 'type', entity_14.type,",
|
|
" 'archived', entity_14.archived,",
|
|
" 'created_at', entity_14.created_at,",
|
|
" 'address', email_address_15.address",
|
|
" )",
|
|
" FROM agreego.entity entity_14",
|
|
" JOIN agreego.email_address email_address_15 ON email_address_15.id = entity_14.id",
|
|
" WHERE",
|
|
" NOT entity_14.archived",
|
|
" AND relationship_12.target_id = entity_14.id",
|
|
" )",
|
|
" )), '[]'::jsonb)",
|
|
" FROM agreego.entity entity_11",
|
|
" JOIN agreego.relationship relationship_12 ON relationship_12.id = entity_11.id",
|
|
" JOIN agreego.contact contact_13 ON contact_13.id = relationship_12.id",
|
|
" WHERE",
|
|
" NOT entity_11.archived",
|
|
" AND relationship_12.target_type = 'email_address'",
|
|
" AND relationship_12.source_id = entity_3.id",
|
|
" ),",
|
|
" 'addresses', (",
|
|
" SELECT COALESCE(jsonb_agg(jsonb_build_object(",
|
|
" 'id', entity_16.id,",
|
|
" 'type', entity_16.type,",
|
|
" 'archived', entity_16.archived,",
|
|
" 'created_at', entity_16.created_at,",
|
|
" 'is_primary', contact_18.is_primary,",
|
|
" 'target', (",
|
|
" SELECT jsonb_build_object(",
|
|
" 'id', entity_19.id,",
|
|
" 'type', entity_19.type,",
|
|
" 'archived', entity_19.archived,",
|
|
" 'created_at', entity_19.created_at,",
|
|
" 'city', address_20.city",
|
|
" )",
|
|
" FROM agreego.entity entity_19",
|
|
" JOIN agreego.address address_20 ON address_20.id = entity_19.id",
|
|
" WHERE",
|
|
" NOT entity_19.archived",
|
|
" AND relationship_17.target_id = entity_19.id",
|
|
" )",
|
|
" )), '[]'::jsonb)",
|
|
" FROM agreego.entity entity_16",
|
|
" JOIN agreego.relationship relationship_17 ON relationship_17.id = entity_16.id",
|
|
" JOIN agreego.contact contact_18 ON contact_18.id = relationship_17.id",
|
|
" WHERE",
|
|
" NOT entity_16.archived",
|
|
" AND relationship_17.target_type = 'address'",
|
|
" AND relationship_17.source_id = entity_3.id",
|
|
" ),",
|
|
" 'contacts', (",
|
|
" SELECT COALESCE(jsonb_agg(jsonb_build_object(",
|
|
" 'id', entity_21.id,",
|
|
" 'type', entity_21.type,",
|
|
" 'archived', entity_21.archived,",
|
|
" 'created_at', entity_21.created_at,",
|
|
" 'is_primary', contact_23.is_primary,",
|
|
" 'target', CASE",
|
|
" WHEN relationship_22.target_type = 'phone_number' THEN ((",
|
|
" SELECT jsonb_build_object(",
|
|
" 'id', entity_24.id,",
|
|
" 'type', entity_24.type,",
|
|
" 'archived', entity_24.archived,",
|
|
" 'created_at', entity_24.created_at,",
|
|
" 'number', phone_number_25.number",
|
|
" )",
|
|
" FROM agreego.entity entity_24",
|
|
" JOIN agreego.phone_number phone_number_25 ON phone_number_25.id = entity_24.id",
|
|
" WHERE",
|
|
" NOT entity_24.archived",
|
|
" AND relationship_22.target_id = entity_24.id",
|
|
" ))",
|
|
" WHEN relationship_22.target_type = 'email_address' THEN ((",
|
|
" SELECT jsonb_build_object(",
|
|
" 'id', entity_26.id,",
|
|
" 'type', entity_26.type,",
|
|
" 'archived', entity_26.archived,",
|
|
" 'created_at', entity_26.created_at,",
|
|
" 'address', email_address_27.address",
|
|
" )",
|
|
" FROM agreego.entity entity_26",
|
|
" JOIN agreego.email_address email_address_27 ON email_address_27.id = entity_26.id",
|
|
" WHERE",
|
|
" NOT entity_26.archived",
|
|
" AND relationship_22.target_id = entity_26.id",
|
|
" ))",
|
|
" WHEN relationship_22.target_type = 'address' THEN ((",
|
|
" SELECT jsonb_build_object(",
|
|
" 'id', entity_28.id,",
|
|
" 'type', entity_28.type,",
|
|
" 'archived', entity_28.archived,",
|
|
" 'created_at', entity_28.created_at,",
|
|
" 'city', address_29.city",
|
|
" )",
|
|
" FROM agreego.entity entity_28",
|
|
" JOIN agreego.address address_29 ON address_29.id = entity_28.id",
|
|
" WHERE",
|
|
" NOT entity_28.archived",
|
|
" AND relationship_22.target_id = entity_28.id",
|
|
" ))",
|
|
" ELSE NULL",
|
|
" END",
|
|
" )), '[]'::jsonb)",
|
|
" FROM agreego.entity entity_21",
|
|
" JOIN agreego.relationship relationship_22 ON relationship_22.id = entity_21.id",
|
|
" JOIN agreego.contact contact_23 ON contact_23.id = relationship_22.id",
|
|
" WHERE",
|
|
" NOT entity_21.archived",
|
|
" AND relationship_22.source_id = entity_3.id",
|
|
" )",
|
|
" )",
|
|
" FROM agreego.entity entity_3",
|
|
" JOIN agreego.organization organization_4 ON organization_4.id = entity_3.id",
|
|
" JOIN agreego.person person_5 ON person_5.id = organization_4.id",
|
|
" WHERE",
|
|
" NOT entity_3.archived",
|
|
" AND entity_3.id = entity_1.id",
|
|
" ))",
|
|
" ELSE NULL",
|
|
" END",
|
|
" FROM agreego.entity entity_1",
|
|
" JOIN agreego.organization organization_2 ON organization_2.id = entity_1.id",
|
|
" WHERE",
|
|
" NOT entity_1.archived",
|
|
"))))"
|
|
]
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"description": "Orders select via a punc with items",
|
|
"action": "query",
|
|
"schema_id": "get_orders.response",
|
|
"expect": {
|
|
"success": true,
|
|
"sql": [
|
|
[
|
|
"((SELECT jsonb_strip_nulls((",
|
|
" SELECT COALESCE(jsonb_agg(jsonb_build_object(",
|
|
" 'id', order_2.id,",
|
|
" 'type', order_2.type,",
|
|
" 'archived', entity_1.archived,",
|
|
" 'created_at', entity_1.created_at,",
|
|
" 'total', order_2.total,",
|
|
" 'customer_id', order_2.customer_id,",
|
|
" 'customer', (",
|
|
" SELECT jsonb_build_object(",
|
|
" 'id', entity_3.id,",
|
|
" 'type', entity_3.type,",
|
|
" 'archived', entity_3.archived,",
|
|
" 'created_at', entity_3.created_at,",
|
|
" 'name', organization_4.name,",
|
|
" 'first_name', person_5.first_name,",
|
|
" 'last_name', person_5.last_name,",
|
|
" 'age', person_5.age",
|
|
" )",
|
|
" FROM agreego.entity entity_3",
|
|
" JOIN agreego.organization organization_4 ON organization_4.id = entity_3.id",
|
|
" JOIN agreego.person person_5 ON person_5.id = organization_4.id",
|
|
" WHERE",
|
|
" NOT entity_3.archived",
|
|
" AND order_2.customer_id = person_5.id",
|
|
" )",
|
|
" )), '[]'::jsonb)",
|
|
" FROM agreego.entity entity_1",
|
|
" JOIN agreego.order order_2 ON order_2.id = entity_1.id",
|
|
" WHERE",
|
|
" NOT entity_1.archived",
|
|
"))))"
|
|
]
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"description": "Widgets select via a punc response with family (STI)",
|
|
"action": "query",
|
|
"schema_id": "get_widgets.response",
|
|
"expect": {
|
|
"success": true,
|
|
"sql": [
|
|
[
|
|
"((SELECT jsonb_strip_nulls((",
|
|
" SELECT COALESCE(jsonb_agg(CASE",
|
|
" WHEN widget_2.kind = 'stock' THEN (jsonb_build_object(",
|
|
" 'id', entity_1.id,",
|
|
" 'type', entity_1.type,",
|
|
" 'archived', entity_1.archived,",
|
|
" 'created_at', entity_1.created_at,",
|
|
" 'kind', widget_2.kind",
|
|
" ))",
|
|
" WHEN widget_2.kind = 'tasks' THEN (jsonb_build_object(",
|
|
" 'id', entity_1.id,",
|
|
" 'type', entity_1.type,",
|
|
" 'archived', entity_1.archived,",
|
|
" 'created_at', entity_1.created_at,",
|
|
" 'kind', widget_2.kind",
|
|
" ))",
|
|
" ELSE NULL",
|
|
" END), '[]'::jsonb)",
|
|
" FROM agreego.entity entity_1",
|
|
" JOIN agreego.widget widget_2 ON widget_2.id = entity_1.id",
|
|
" WHERE",
|
|
" NOT entity_1.archived",
|
|
"))))"
|
|
]
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"description": "Query invoice with JSONB metadata fields",
|
|
"action": "query",
|
|
"schema_id": "invoice",
|
|
"expect": {
|
|
"success": true,
|
|
"sql": [
|
|
[
|
|
"((SELECT jsonb_strip_nulls((",
|
|
" SELECT jsonb_build_object(",
|
|
" 'id', invoice_2.id,",
|
|
" 'type', invoice_2.type,",
|
|
" 'archived', entity_1.archived,",
|
|
" 'created_at', entity_1.created_at,",
|
|
" 'total', invoice_2.total,",
|
|
" 'lines', (",
|
|
" SELECT COALESCE(jsonb_agg(jsonb_build_object(",
|
|
" 'id', invoice_line_4.id,",
|
|
" 'type', invoice_line_4.type,",
|
|
" 'archived', entity_3.archived,",
|
|
" 'created_at', entity_3.created_at,",
|
|
" 'invoice_id', invoice_line_4.invoice_id,",
|
|
" 'price', invoice_line_4.price",
|
|
" )), '[]'::jsonb)",
|
|
" FROM agreego.entity entity_3",
|
|
" JOIN agreego.invoice_line invoice_line_4 ON invoice_line_4.id = entity_3.id",
|
|
" WHERE",
|
|
" NOT entity_3.archived",
|
|
" AND invoice_line_4.invoice_id = invoice_2.id",
|
|
" ),",
|
|
" 'metadata_line', invoice_2.metadata_line,",
|
|
" 'metadata_lines', invoice_2.metadata_lines,",
|
|
" 'metadata_nested_line', invoice_2.metadata_nested_line,",
|
|
" 'metadata_nested_lines', invoice_2.metadata_nested_lines",
|
|
" )",
|
|
" FROM agreego.entity entity_1",
|
|
" JOIN agreego.invoice invoice_2 ON invoice_2.id = entity_1.id",
|
|
" WHERE",
|
|
" NOT entity_1.archived",
|
|
"))))"
|
|
]
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"description": "Account select on full schema with cases fields",
|
|
"action": "query",
|
|
"schema_id": "account",
|
|
"expect": {
|
|
"success": true,
|
|
"sql": [
|
|
[
|
|
"((SELECT jsonb_strip_nulls((",
|
|
" SELECT jsonb_build_object(",
|
|
" 'id', entity_1.id,",
|
|
" 'type', entity_1.type,",
|
|
" 'archived', entity_1.archived,",
|
|
" 'created_at', entity_1.created_at,",
|
|
" 'kind', account_2.kind,",
|
|
" 'routing_number', account_2.routing_number,",
|
|
" 'card_number', account_2.card_number",
|
|
" )",
|
|
" FROM agreego.entity entity_1",
|
|
" JOIN agreego.account account_2 ON account_2.id = entity_1.id",
|
|
" WHERE",
|
|
" NOT entity_1.archived",
|
|
"))))"
|
|
]
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"description": "Order select with nested polymorphic counterparty family relation",
|
|
"action": "query",
|
|
"schema_id": "get_counterparty_orders.response",
|
|
"expect": {
|
|
"success": true,
|
|
"sql": [
|
|
[
|
|
"((SELECT jsonb_strip_nulls((",
|
|
" SELECT COALESCE(jsonb_agg(jsonb_build_object(",
|
|
" 'id', order_2.id,",
|
|
" 'type', order_2.type,",
|
|
" 'archived', entity_1.archived,",
|
|
" 'created_at', entity_1.created_at,",
|
|
" 'total', order_2.total,",
|
|
" 'customer_id', order_2.customer_id,",
|
|
" 'counterparty', (",
|
|
" SELECT CASE",
|
|
" WHEN organization_4.type = 'bot' THEN ((",
|
|
" SELECT jsonb_build_object(",
|
|
" 'id', entity_5.id,",
|
|
" 'type', entity_5.type,",
|
|
" 'archived', entity_5.archived,",
|
|
" 'created_at', entity_5.created_at,",
|
|
" 'name', organization_6.name,",
|
|
" 'token', bot_7.token,",
|
|
" 'role', bot_7.role",
|
|
" )",
|
|
" FROM agreego.entity entity_5",
|
|
" JOIN agreego.organization organization_6 ON organization_6.id = entity_5.id",
|
|
" JOIN agreego.bot bot_7 ON bot_7.id = organization_6.id",
|
|
" WHERE",
|
|
" NOT entity_5.archived",
|
|
" AND entity_5.id = entity_3.id",
|
|
" ))",
|
|
" WHEN organization_4.type = 'organization' THEN ((",
|
|
" SELECT jsonb_build_object(",
|
|
" 'id', entity_8.id,",
|
|
" 'type', entity_8.type,",
|
|
" 'archived', entity_8.archived,",
|
|
" 'created_at', entity_8.created_at,",
|
|
" 'name', organization_9.name",
|
|
" )",
|
|
" FROM agreego.entity entity_8",
|
|
" JOIN agreego.organization organization_9 ON organization_9.id = entity_8.id",
|
|
" WHERE",
|
|
" NOT entity_8.archived",
|
|
" AND entity_8.id = entity_3.id",
|
|
" ))",
|
|
" WHEN organization_4.type = 'person' THEN ((",
|
|
" SELECT jsonb_build_object(",
|
|
" 'id', entity_10.id,",
|
|
" 'type', entity_10.type,",
|
|
" 'archived', entity_10.archived,",
|
|
" 'created_at', entity_10.created_at,",
|
|
" 'name', organization_11.name,",
|
|
" 'first_name', person_12.first_name,",
|
|
" 'last_name', person_12.last_name,",
|
|
" 'age', person_12.age",
|
|
" )",
|
|
" FROM agreego.entity entity_10",
|
|
" JOIN agreego.organization organization_11 ON organization_11.id = entity_10.id",
|
|
" JOIN agreego.person person_12 ON person_12.id = organization_11.id",
|
|
" WHERE",
|
|
" NOT entity_10.archived",
|
|
" AND entity_10.id = entity_3.id",
|
|
" ))",
|
|
" ELSE NULL",
|
|
" END",
|
|
" FROM agreego.entity entity_3",
|
|
" JOIN agreego.organization organization_4 ON organization_4.id = entity_3.id",
|
|
" WHERE",
|
|
" NOT entity_3.archived",
|
|
" AND order_2.counterparty_id = entity_3.id",
|
|
" )",
|
|
" )), '[]'::jsonb)",
|
|
" FROM agreego.entity entity_1",
|
|
" JOIN agreego.order order_2 ON order_2.id = entity_1.id",
|
|
" WHERE",
|
|
" NOT entity_1.archived",
|
|
" AND order_2.counterparty_type IN ('bot', 'organization', 'person')",
|
|
"))))"
|
|
]
|
|
]
|
|
}
|
|
}
|
|
]
|
|
}
|
|
] |