shared/graphql/schema.graphql (171 lines of code) (raw):
schema {
query: Query
mutation: Mutation
subscription: Subscription
}
type Query {
# database-bridge-lambda queries
listItems(pinboardId: String!, maybeAspectRatioFilter: String): [Item]
listLastItemSeenByUsers(pinboardId: String!): [LastItemSeenByUser]
getMyUser: MyUser
searchMentionableUsers(prefix: String!): UsersAndGroups
getUsers(emails: [String!]!): [User]
getGroupPinboardIds: [PinboardIdWithClaimCounts!]!
getItemCounts(pinboardIds: [String!]!): [PinboardIdWithItemCounts!]!
# workflow-bridge-lambda queries
listPinboards(searchText: String): [WorkflowStub]
getPinboardsByIds(ids: [String!]!): [WorkflowStub]
getPinboardsByPaths(paths: [String!]!): [WorkflowStub]
getPinboardByComposerId(composerId: String!): WorkflowStub
# grid-bridge-lambda queries
getGridSearchSummary(apiUrl: String!): GridSearchSummary
asGridPayload(gridUrl: String!): AWSJSON
}
type Mutation {
createItem(input: CreateItemInput!): Item
editItem(itemId: String!, input: EditItemInput!): Item
deleteItem(itemId: String!): Item
claimItem(itemId: String!): Claimed
seenItem(input: LastItemSeenByUserInput!): LastItemSeenByUser
setWebPushSubscriptionForUser(webPushSubscription: AWSJSON): MyUser
addManuallyOpenedPinboardIds(pinboardId: String!, maybeEmailOverride: String): MyUser
removeManuallyOpenedPinboardIds(pinboardIdToClose: String!): MyUser
visitTourStep(tourStepId: String!): MyUser
changeFeatureFlag(flagId: String!, newValue: Boolean!): MyUser
}
type Subscription {
onMutateItem(
pinboardId: String
): Item @aws_subscribe(mutations: ["createItem", "editItem", "deleteItem"])
onClaimItem(
pinboardId: String
): Claimed @aws_subscribe(mutations: ["claimItem"])
onSeenItem(
pinboardId: String
): LastItemSeenByUser @aws_subscribe(mutations: ["seenItem"])
onMyUserChanges(
email: String! # unfortunately this can't be done via 'identity' in the resolver
): MyUser @aws_subscribe(mutations: [
"addManuallyOpenedPinboardIds",
"removeManuallyOpenedPinboardIds",
"changeFeatureFlag"
])
}
type MentionHandle {
label: String!
isMe: Boolean!
}
type Item {
id: ID!
message: String
payload: AWSJSON
timestamp: AWSDateTime!
type: String!
userEmail: String!
pinboardId: String!
mentions: [MentionHandle!]
groupMentions: [MentionHandle!]
claimedByEmail: String
claimable: Boolean!
relatedItemId: String
editHistory: [AWSDateTime!]
deletedAt: AWSDateTime
}
type LastItemSeenByUser {
pinboardId: String!
userEmail: String!
itemID: String!
seenAt: AWSDateTime!
}
type User {
email: String!
firstName: String!
lastName: String!
avatarUrl: String
isMentionable: Boolean
}
type MyUser {
email: String!
firstName: String!
lastName: String!
avatarUrl: String
hasWebPushSubscription: Boolean
manuallyOpenedPinboardIds: [String!]
hasEverUsedTour: Boolean!
featureFlags: AWSJSON
}
type Group {
shorthand: String!
name: String!
memberEmails: [String!]!
}
type UsersAndGroups {
users: [User!]!
groups: [Group!]!
}
type WorkflowStub {
id: String!
title: String
headline: String
composerId: String
path: String
status: String
trashed: Boolean
isNotFound: Boolean
}
type GridBadgeData {
text: String!
color: String!
}
type GridSearchQueryBreakdown {
collections: [GridBadgeData!]
labels: [GridBadgeData!]
chips: [GridBadgeData!]
restOfSearch: String
}
type GridSearchSummary {
total: Int!
thumbnails: [String!]!
queryBreakdown: GridSearchQueryBreakdown
}
input CreateItemInput {
message: String
payload: AWSJSON
type: String!
pinboardId: String!
mentions: [String!]
groupMentions: [String!]
claimable: Boolean
relatedItemId: String
}
input EditItemInput {
message: String
payload: AWSJSON
type: String!
}
input LastItemSeenByUserInput {
pinboardId: String!
itemID: String!
}
type Claimed {
pinboardId: String!
updatedItem: Item!
newItem: Item!
}
type PinboardIdWithClaimCounts {
pinboardId: String!
unclaimedCount: Int!
yourClaimedCount: Int!
othersClaimedCount: Int!
notClaimableCount: Int!
latestGroupMentionItemId: String!
hasUnread: Boolean!
}
type PinboardIdWithItemCounts {
pinboardId: String!
unreadCount: Int!
totalCount: Int!
totalCropCount: Int!
fiveByFourCount: Int!
fourByFiveCount: Int!
}