Motivation
Add more contextual information to entity version objects to navigate historical data more effectively.
Implementation
Add the following fields to the EntityVersion GraphQL object:
type EntityVersion {
# Version id
id: String!
# (NEW) Timestamp of when the edit was proposed (optional since doesn't apply to personal spaces and space imports)
proposedAt: String,
# (NEW) Block number of when the edit was proposed
proposedAtBlock: String,
# (NEW) Timestamp of when the edit was published/executed (null if still a proposal)
publishedAt: String
# (NEW) Block number of when the edit was proposed
publishedAtBlock: String
# (NEW) Author of the proposal for the edit
author: String!
# (NEW) List of attributes changed as part of the edit
updatedAttributes: [Triple!]!
# (NEW) Name of the entity at the time of the edit
name: String
# (NEW) Description of the entity at the time of the edit
description: String
# (NEW) Cover of the entity at the time of the edit
cover: String
# (NEW) Types of the entity at the time of the edit
types: [Entity!]!
# (NEW) Blocks of the entity at the time of the edit
blocks: [Entity!]!
# Entity attributes as of this version
attributes(filter: AttributeFilter): [Triple!]!
}
Alternatives
Since the EntityVersion object is getting quite complex (having both fields related to the version as well as all other entity fields), it might be worth refactoring the API and separating those.
Here would be an alternative design
type Query {
# (NEW) Fetch all versions for an entity
entityVersions(entityId: String): [EntityVersion!]!
}
type EntityVersion {
# Version id
id: String!
# (NEW) Timestamp of when the edit was proposed (optional since doesn't apply to personal spaces and space imports)
proposedAt: String,
# (NEW) Block number of when the edit was proposed
proposedAtBlock: String,
# (NEW) Timestamp of when the edit was published/executed (null if still a proposal)
publishedAt: String
# (NEW) Block number of when the edit was proposed
publishedAtBlock: String
# (NEW) Author of the proposal for the edit
author: String!
# (NEW) List of attributes changed as part of the edit
updatedAttributes: [Triple!]!
# (NEW) Relation to the entity at the time of the edit
entity: Entity!
}
type Entity {
# (REMOVE)
# versions: [EntityVersion!]!
# (NEW) Version of the selected entity
version: EntityVersion!
...
}
With this design, the query to get multiple versions of an entity would look like this:
query {
entityVersions(entityId: "Foo", spaceId: "MySpace") {
entity {
name
}
}
}
Instead of
query {
entity(entityId: "Foo", spaceId: "MySpace") {
versions {
name
}
}
}
Moreover, since versions are not really bound to entities, but rather to edits, it might make sense to change the naming of EntityVersion to EntityEdit, Edit or something along those lines.
Motivation
Add more contextual information to entity version objects to navigate historical data more effectively.
Implementation
Add the following fields to the
EntityVersionGraphQL object:Alternatives
Since the
EntityVersionobject is getting quite complex (having both fields related to the version as well as all other entity fields), it might be worth refactoring the API and separating those.Here would be an alternative design
With this design, the query to get multiple versions of an entity would look like this:
Instead of
Moreover, since versions are not really bound to entities, but rather to edits, it might make sense to change the naming of
EntityVersiontoEntityEdit,Editor something along those lines.