
type Meta @goModel(model: "go.sour.is/ev/pkg/event.Meta") {
    eventID: String! @goField(name: "getEventID")
    streamID: String! @goField(name: "ActualStreamID")
    position: Int! @goField(name: "ActualPosition")
    created: Time!
}

extend type Query {
    events(streamID: String! paging: PageInput): Connection!
}
extend type Mutation {
    truncateStream(streamID: String! index:Int!): Boolean!
}
extend type Subscription {
    """after == 0 start from begining, after == -1 start from end"""
    eventAdded(streamID: String! after: Int! = -1): Event
}

type Event implements Edge @goModel(model: "go.sour.is/ev/pkg/gql.Event") {
    id: ID!

    eventID: String!
    streamID: String!
    position: Int!

    values: Map!
    bytes: String!
    type: String!
    created: Time!
    meta: Meta!

    linked: Event
}