Skip to main content

Entities

An entity is the protocol's name for "a queryable thing." It usually maps 1:1 to a database table, but it doesn't have to.

Declaring an entity​

{
"shop": {
"entities": {
"users": {
"table": "users"
}
}
}
}

The key (users) is what you'll use in queries (shop.users). The table value is the actual table name in the database.

Renaming a table for queries​

If your physical table is called usr_acct but you'd rather query it as users:

"users": {
"table": "usr_acct"
}

Now shop.users resolves to the usr_acct table. Frontends never see the underlying name.

Required and optional keys​

KeyRequiredPurpose
tableyesActual table name in the database
fieldsyesColumn → query-name mapping
relationsnoForeign keys to other entities
contextnoAutomatic scoping rules

Multiple entities pointing at the same table​

You can declare two entities for the same physical table with different aliases or contexts. Useful when you want one "admin" view and one "public" view of the same data:

"users":         { "table": "users", "context": { "account": "shop.users[id = $1]" } },
"users_public": { "table": "users", "fields": { "id": "id", "name": "name" } }

The users_public entity intentionally projects only safe-to-share columns.