Categorygithub.com/rqure/qwebgateway
repositorypackage
0.1.10
Repository: https://github.com/rqure/qwebgateway.git
Documentation: pkg.go.dev

# README

qwebgateway

Database Backups and Restores

Example of taking a database backup:

curl localhost:20000/api -d '{"header":{"id":"ea9e4bfb-a208-419e-88cc-8dc694b287ef","timestamp":"2024-07-04T22:37:18.544393318Z"},"payload":{"@type":"type.googleapis.com/qdb.WebConfigCreateSnapshotRequest"}}' | jq '.payload |= (del(.status) | .["@type"] = "type.googleapis.com/qdb.WebConfigRestoreSnapshotRequest")' > snapshot.json

Example of restoring a database backup:

curl localhost:20000/api -d @tmp/snapshot.json

API

Create Entity

Method: POST

Request:

{
  "header": {
    "id": "unique-id",
    "timestamp": "timestamp"
  },
  "payload": {
    "@type": "type.googleapis.com/qdb.WebConfigCreateEntityRequest",
    "type": "entityType",
    "name": "entityName",
    "parentId": "parentEntityId"
  }
}

Response:

{
  "header": {
    "id": "unique-id",
    "timestamp": "timestamp"
  },
  "payload": {
    "@type": "type.googleapis.com/qdb.WebConfigCreateEntityResponse",
    "status": "SUCCESS",
    "id": "newEntityId"
  }
}

Delete Entity

Method: POST

Request:

{
  "header": {
    "id": "unique-id",
    "timestamp": "timestamp"
  },
  "payload": {
    "@type": "type.googleapis.com/qdb.WebConfigDeleteEntityRequest",
    "id": "entityId"
  }
}

Response:

{
  "header": {
    "id": "unique-id",
    "timestamp": "timestamp"
  },
  "payload": {
    "@type": "type.googleapis.com/qdb.WebConfigDeleteEntityResponse",
    "status": "SUCCESS"
  }
}

Get Entity Types

Method: POST

Request:

{
  "header": {
    "id": "unique-id",
    "timestamp": "timestamp"
  },
  "payload": {
    "@type": "type.googleapis.com/qdb.WebConfigGetEntityTypesRequest"
  }
}

Response:

{
  "header": {
    "id": "unique-id",
    "timestamp": "timestamp"
  },
  "payload": {
    "@type": "type.googleapis.com/qdb.WebConfigGetEntityTypesResponse",
    "types": ["type1", "type2", "type3"]
  }
}

Get Entity

Method: POST

Request:

{
  "header": {
    "id": "unique-id",
    "timestamp": "timestamp"
  },
  "payload": {
    "@type": "type.googleapis.com/qdb.WebConfigGetEntityRequest",
    "id": "entityId"
  }
}

Response:

{
  "header": {
    "id": "unique-id",
    "timestamp": "timestamp"
  },
  "payload": {
    "@type": "type.googleapis.com/qdb.WebConfigGetEntityResponse",
    "status": "SUCCESS",
    "entity": {
      "id": "entityId",
      "type": "entityType",
      "name": "entityName",
      "parent": {"raw": "parentEntityId"},
      "children": [{"raw": "childEntityId1"}, {"raw": "childEntityId2"}]
    }
  }
}

Get Field Schema

Method: POST

Request:

{
  "header": {
    "id": "unique-id",
    "timestamp": "timestamp"
  },
  "payload": {
    "@type": "type.googleapis.com/qdb.WebConfigGetFieldSchemaRequest",
    "field": "fieldName"
  }
}

Response:

{
  "header": {
    "id": "unique-id",
    "timestamp": "timestamp"
  },
  "payload": {
    "@type": "type.googleapis.com/qdb.WebConfigGetFieldSchemaResponse",
    "status": "SUCCESS",
    "schema": {
      "name": "fieldName",
      "type": "fieldType"
    }
  }
}

Set Field Schema

Method: POST

Request:

{
  "header": {
    "id": "unique-id",
    "timestamp": "timestamp"
  },
  "payload": {
    "@type": "type.googleapis.com/qdb.WebConfigSetFieldSchemaRequest",
    "field": "fieldName",
    "schema": {
      "name": "fieldName",
      "type": "fieldType"
    }
  }
}

Response:

{
  "header": {
    "id": "unique-id",
    "timestamp": "timestamp"
  },
  "payload": {
    "@type": "type.googleapis.com/qdb.WebConfigSetFieldSchemaResponse",
    "status": "SUCCESS"
  }
}

Get Entity Schema

Method: POST

Request:

{
  "header": {
    "id": "unique-id",
    "timestamp": "timestamp"
  },
  "payload": {
    "@type": "type.googleapis.com/qdb.WebConfigGetEntitySchemaRequest",
    "type": "entityType"
  }
}

Response:

{
  "header": {
    "id": "unique-id",
    "timestamp": "timestamp"
  },
  "payload": {
    "@type": "type.googleapis.com/qdb.WebConfigGetEntitySchemaResponse",
    "status": "SUCCESS",
    "schema": {
      "name": "entityType",
      "fields": ["field1", "field2", "field3"]
    }
  }
}

Set Entity Schema

Method: POST

Request:

{
  "header": {
    "id": "unique-id",
    "timestamp": "timestamp"
  },
  "payload": {
    "@type": "type.googleapis.com/qdb.WebConfigSetEntitySchemaRequest",
    "name": "entityType",
    "fields": ["field1", "field2", "field3"]
  }
}

Response:

{
  "header": {
    "id": "unique-id",
    "timestamp": "timestamp"
  },
  "payload": {
    "@type": "type.googleapis.com/qdb.WebConfigSetEntitySchemaResponse",
    "status": "SUCCESS"
  }
}

Create Snapshot

Method: POST

Request:

{
  "header": {
    "id": "unique-id",
    "timestamp": "timestamp"
  },
  "payload": {
    "@type": "type.googleapis.com/qdb.WebConfigCreateSnapshotRequest"
  }
}

Response:

{
  "header": {
    "id": "unique-id",
    "timestamp": "timestamp"
  },
  "payload": {
    "@type": "type.googleapis.com/qdb.WebConfigCreateSnapshotResponse",
    "status": "SUCCESS",
    "snapshot": {
      "entities": [
        {
          "id": "entityId",
          "type": "entityType",
          "name": "entityName",
          "parent": {"raw": "parentEntityId"},
          "children": [{"raw": "childEntityId1"}, {"raw": "childEntityId2"}]
        }
      ],
      "fields": [
        {
          "id": "fieldId",
          "name": "fieldName",
          "value": {},
          "writeTime": "timestamp",
          "writerId": "writerId"
        }
      ],
      "entitySchemas": [
        {
          "name": "entityType",
          "fields": ["field1", "field2", "field3"]
        }
      ],
      "fieldSchemas": [
        {
          "name": "fieldName",
          "type": "fieldType"
        }
      ]
    }
  }
}

Restore Snapshot

Method: POST

Request:

{
  "header": {
    "id": "unique-id",
    "timestamp": "timestamp"
  },
  "payload": {
    "@type": "type.googleapis.com/qdb.WebConfigRestoreSnapshotRequest",
    "snapshot": {
      "entities": [
        {
          "id": "entityId",
          "type": "entityType",
          "name": "entityName",
          "parent": {"raw": "parentEntityId"},
          "children": [{"raw": "childEntityId1"}, {"raw": "childEntityId2"}]
        }
      ],
      "fields": [
        {
          "id": "fieldId",
          "name": "fieldName",
          "value": {},
          "writeTime": "timestamp",
          "writerId": "writerId"
        }
      ],
      "entitySchemas": [
        {
          "name": "entityType",
          "fields": ["field1", "field2", "field3"]
        }
      ],
      "fieldSchemas": [
        {
          "name": "fieldName",
          "type": "fieldType"
        }
      ]
    }
  }
}

Response:

{
  "header": {
    "id": "unique-id",
    "timestamp": "timestamp"
  },
  "payload": {
    "@type": "type.googleapis.com/qdb.WebConfigRestoreSnapshotResponse",
    "status": "SUCCESS"
  }
}

Get Root Entity

Method: POST

Request:

{
  "header": {
    "id": "unique-id",
    "timestamp": "timestamp"
  },
  "payload": {
    "@type": "type.googleapis.com/qdb.WebConfigGetRootRequest"
  }
}

Response:

{
  "header": {
    "id": "unique-id",
    "timestamp": "timestamp"
  },
  "payload": {
    "@type": "type.googleapis.com/qdb.WebConfigGetRootResponse",
    "rootId": "rootEntityId"
  }
}

Get All Fields

Method: POST

Request:

{
  "header": {
    "id": "unique-id",
    "timestamp": "timestamp"
  },
  "payload": {
    "@type": "type.googleapis.com/qdb.WebConfigGetAllFieldsRequest"
  }
}

Response:

{
  "header": {
    "id": "unique-id",
    "timestamp": "timestamp"
  },
  "payload": {
    "@type": "type.googleapis.com/qdb.WebConfigGetAllFieldsResponse",
    "fields": ["field1", "field2", "field3"]
  }
}

Runtime Database Request

Method: POST

Request:

{
  "header": {
    "id": "unique-id",
    "timestamp": "timestamp"
  },
  "payload": {
    "@type": "type.googleapis.com/qdb.WebRuntimeDatabaseRequest",
    "requestType": "READ",
    "requests": [
      {
        "id": "requestId",
        "field": "fieldName",
        "value": {},
        "writeTime": "timestamp",
        "writerId": "writerId",
        "success": true
      }
    ]
  }
}

Response:

{
  "header": {
    "id": "unique-id",
    "timestamp": "timestamp"
  },
  "payload": {
    "@type": "type.googleapis.com/qdb.WebRuntimeDatabaseResponse",
    "response": [
      {
        "id": "requestId",
        "field": "fieldName",
        "value": {},
        "writeTime": "timestamp",
        "writerId": "writerId",
        "success": true
      }
    ]
  }
}

Register Notification

Method: POST

Request:

{
  "header": {
    "id": "unique-id",
    "timestamp": "timestamp"
  },
  "payload": {
    "@type": "type.googleapis.com/qdb.WebRuntimeRegisterNotificationRequest",
    "requests": [
      {
        "id": "notificationId",
        "type": "notificationType",
        "field": "fieldName",
        "contextFields": ["contextField1", "contextField2"],
        "notifyOnChange": true
      }
    ]
  }
}

Response:

{
  "header": {
    "id": "unique-id",
    "timestamp": "timestamp"
  },
  "payload": {
    "@type": "type.googleapis.com/qdb.WebRuntimeRegisterNotificationResponse",
    "tokens": ["notificationToken1", "notificationToken2"]
  }
}

Get Notifications

Method: POST

Request:

{
  "header": {
    "id": "unique-id",
    "timestamp": "timestamp"
  },
  "payload": {
    "@type": "type.googleapis.com/qdb.WebRuntimeGetNotificationsRequest"
  }
}

Response:

{
  "header": {
    "id": "unique-id",
    "timestamp": "timestamp"
  },
  "payload": {
    "@type": "type.googleapis.com/qdb.WebRuntimeGetNotificationsResponse",
    "notifications": [
      {
        "token": "notificationToken",
        "current": {
          "id": "fieldId",
          "name": "fieldName",
          "value": {},
          "writeTime": "timestamp",
          "writerId": "writerId"
        },
        "previous": {
          "id": "fieldId",
          "name": "fieldName",
          "value": {},
          "writeTime": "timestamp",
          "writerId": "writerId"
        },
        "context": [
          {
            "id": "fieldId",
            "name": "fieldName",
            "value": {},
            "writeTime": "timestamp",
            "writerId": "writerId"
          }
        ]
      }
    ]
  }
}

Unregister Notification

Method: POST

Request:

{
  "header": {
    "id": "unique-id",
    "timestamp": "timestamp"
  },
  "payload": {
    "@type": "type.googleapis.com/qdb.WebRuntimeUnregisterNotificationRequest",
    "tokens": ["notificationToken1", "notificationToken2"]
  }
}

Response:

{
  "header": {
    "id": "unique-id",
    "timestamp": "timestamp"
  },
  "payload": {
    "@type": "type.googleapis.com/qdb.WebRuntimeUnregisterNotificationResponse",
    "status": "SUCCESS"
  }
}

Get Database Connection Status

Method: POST

Request:

{
  "header": {
    "id": "unique-id",
    "timestamp": "timestamp"
  },
  "payload": {
    "@type": "type.googleapis.com/qdb.WebRuntimeGetDatabaseConnectionStatusRequest"
  }
}

Response:

{
  "header": {
    "id": "unique-id",
    "timestamp": "timestamp"
  },
  "payload": {
    "@type": "type.googleapis.com/qdb.WebRuntimeGetDatabaseConnectionStatusResponse",
    "status": "CONNECTED"
  }
}

Get Entities

Method: POST

Request:

{
  "header": {
    "id": "unique-id",
    "timestamp": "timestamp"
  },
  "payload": {
    "@type": "type.googleapis.com/qdb.WebRuntimeGetEntitiesRequest",
    "entityType": "entityType"
  }
}

Response:

{
  "header": {
    "id": "unique-id",
    "timestamp": "timestamp"
  },
  "payload": {
    "@type": "type.googleapis.com/qdb.WebRuntimeGetEntitiesResponse",
    "entities": [
      {
        "id": "entityId",
        "type": "entityType",
        "name": "entityName",
        "parent": {"raw": "parentEntityId"},
        "children": [{"raw": "childEntityId1"}, {"raw": "childEntityId2"}]
      }
    ]
  }
}