Files
speckle-server/modules/core/graph/schemas/streams.graphql
T
2020-08-20 10:00:26 +01:00

135 lines
3.5 KiB
GraphQL
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
extend type Query {
stream( id: String! ): Stream
@hasScope(scope: "streams:write")
"""
All the streams of the current user, pass in the `query` parameter to seach by name, description or ID.
"""
streams( query: String!, limit: Int! = 25, cursor: String ): StreamCollection
}
type Stream {
id: String!
name: String!
description: String
isPublic: Boolean!
createdAt: String!
updatedAt: String!
collaborators: [ StreamCollaborator ]!
}
extend type User {
"""
All the streams that a user has access to.
"""
streams( limit: Int! = 25, cursor: String ): StreamCollection
}
type StreamCollaborator {
id: String!
name: String!
role: String!
}
type StreamCollection {
totalCount: Int!
cursor: String
items: [ Stream ]
}
extend type Mutation {
"""
Creates a new stream.
"""
streamCreate( stream: StreamCreateInput! ): String
@hasRole(role: "server:user")
@hasScope(scope: "streams:write")
"""
Updates an existing stream.
"""
streamUpdate( stream: StreamUpdateInput! ): Boolean!
@hasRole(role: "server:user")
@hasScope(scope: "streams:write")
"""
Deletes an existing stream.
"""
streamDelete( id: String! ): Boolean!
@hasRole(role: "server:user")
@hasScope(scope: "streams:write")
"""
Grants permissions to a user on a given stream.
"""
streamGrantPermission( streamId: String!, userId: String!, role: String! ): Boolean
@hasRole(role: "server:user")
@hasScope(scope: "streams:write")
"""
Revokes the permissions of a user on a given stream.
"""
streamRevokePermission( streamId: String!, userId: String! ): Boolean
@hasRole(role: "server:user")
@hasScope(scope: "streams:write")
}
extend type Subscription {
#
# User bound subscriptions that operate on the stream collection of an user
# Example relevant view/usecase: a given user's profile page.
#
# Source:
# - stream created mutation (target: stream creator)
# - stream grant permissions (target: grantee id)
#
# Payload: maybe just the streamId? as this event will trigger a new call to get the user's streams on the client side?
# 
# TODO: scope check: if context.userId === variables.userId -> profile:read; otherwise users:read
# Q: make the arg optional; if not present -> default to context.user?
"""
Subscribes to new stream created event for a given user.
"""
userStreamCreated( ownerId: String! ): JSONObject
@hasRole(role: "server:user")
@hasScope(scope: "profile:read")
# Source:
# - stream delete mutation (target: all stream users in acl)
# - stream revoke permissions (target: grantee id)
#
# Payload: maybe just the streamId? as this event will trigger a new call to get the user's streams on the client side?
"""
Subscribes to stream deleted event for a given user.
"""
userStreamDeleted( ownerId: String! ): JSONObject
@hasRole(role: "server:user")
@hasScope(scope: "profile:read")
"""
Subscribes to stream updated event.
"""
streamUpdated( streamId: String! ): JSONObject
@hasRole(role: "server:user")
"""
Subscribes to stream permission granted event.
"""
streamPermissionGranted( userId: String! ): JSONObject
@hasRole(role: "server:user")
"""
Subscribes to stream delete event.
"""
streamPermissionRevoked( userId: String! ): JSONObject
@hasRole(role: "server:user")
}
input StreamCreateInput {
name: String
description: String
isPublic: Boolean
}
input StreamUpdateInput {
id: String!
name: String
description: String
isPublic: Boolean
}