mirror of
https://github.com/Unkn0wnCat/matrix-veles.git
synced 2025-04-28 09:46:51 +02:00
347 lines
6.2 KiB
GraphQL
347 lines
6.2 KiB
GraphQL
# GraphQL schema example
|
|
#
|
|
# https://gqlgen.com/getting-started/
|
|
|
|
scalar Time
|
|
|
|
directive @loggedIn on FIELD_DEFINITION
|
|
directive @hasRole(role: UserRole!) on FIELD_DEFINITION
|
|
directive @owner on FIELD_DEFINITION
|
|
|
|
enum UserRole {
|
|
ADMIN
|
|
USER
|
|
UNAUTHENTICATED
|
|
}
|
|
|
|
enum SortDirection {
|
|
ASC
|
|
DESC
|
|
}
|
|
|
|
type PageInfo {
|
|
hasPreviousPage: Boolean!
|
|
hasNextPage: Boolean!
|
|
startCursor: String!
|
|
endCursor: String!
|
|
}
|
|
|
|
input SortRule {
|
|
direction: SortDirection!
|
|
}
|
|
|
|
enum HashCheckerMode {
|
|
NOTICE # Just post a notice
|
|
DELETE # Delete message, post notice
|
|
MUTE # Mute user, delete message, post notice
|
|
BAN # Ban user, delete message, post notice
|
|
}
|
|
|
|
type HashCheckerConfig {
|
|
chatNotice: Boolean!
|
|
hashCheckMode: HashCheckerMode!
|
|
subscribedLists(first: Int, after: String): ListConnection
|
|
}
|
|
|
|
type Room {
|
|
id: ID!
|
|
active: Boolean!
|
|
deactivated: Boolean!
|
|
name: String!
|
|
roomId: String!
|
|
debug: Boolean!
|
|
adminPowerLevel: Int!
|
|
hashCheckerConfig: HashCheckerConfig!
|
|
}
|
|
|
|
type RoomConnection {
|
|
pageInfo: PageInfo!
|
|
edges: [RoomEdge!]!
|
|
}
|
|
|
|
type RoomEdge {
|
|
node: Room!
|
|
cursor: String!
|
|
}
|
|
|
|
type User {
|
|
id: ID!
|
|
|
|
username: String!
|
|
|
|
admin: Boolean
|
|
|
|
matrixLinks: [String!]
|
|
pendingMatrixLinks: [String!]
|
|
}
|
|
|
|
type UserConnection {
|
|
pageInfo: PageInfo!
|
|
edges: [UserEdge!]!
|
|
}
|
|
|
|
type UserEdge {
|
|
node: User!
|
|
cursor: String!
|
|
}
|
|
|
|
type Entry {
|
|
id: ID!
|
|
tags: [String!]
|
|
partOf(first: Int, after: String): ListConnection
|
|
hashValue: String!
|
|
timestamp: Time!
|
|
addedBy: User!
|
|
comments(first: Int, after: String): CommentConnection
|
|
}
|
|
|
|
type EntryConnection {
|
|
pageInfo: PageInfo!
|
|
edges: [EntryEdge!]!
|
|
}
|
|
|
|
type EntryEdge {
|
|
node: Entry!
|
|
cursor: String!
|
|
}
|
|
|
|
type List {
|
|
id: ID!
|
|
name: String!
|
|
tags: [String!]
|
|
creator: User!
|
|
comments(first: Int, after: String): CommentConnection
|
|
maintainers(first: Int, after: String): UserConnection!
|
|
entries(first: Int, after: String): EntryConnection
|
|
}
|
|
|
|
type ListConnection {
|
|
pageInfo: PageInfo!
|
|
edges: [ListEdge!]!
|
|
}
|
|
|
|
type ListEdge {
|
|
node: List!
|
|
cursor: String!
|
|
}
|
|
|
|
type Comment {
|
|
timestamp: Time!
|
|
author: User!
|
|
content: String!
|
|
}
|
|
|
|
type CommentConnection {
|
|
pageInfo: PageInfo!
|
|
edges: [CommentEdge!]!
|
|
}
|
|
|
|
type CommentEdge {
|
|
node: Comment!
|
|
cursor: String!
|
|
}
|
|
|
|
input IntFilter {
|
|
gt: Int
|
|
lt: Int
|
|
eq: Int
|
|
neq: Int
|
|
}
|
|
|
|
input TimestampFilter {
|
|
after: Time
|
|
before: Time
|
|
}
|
|
|
|
input StringFilter {
|
|
eq: String # Equal
|
|
neq: String # Not Equal
|
|
regex: String # Regex Check
|
|
}
|
|
|
|
input StringArrayFilter {
|
|
containsAll: [String]
|
|
elemMatch: StringFilter
|
|
length: Int
|
|
}
|
|
|
|
input UserFilter {
|
|
id: ID
|
|
username: StringFilter
|
|
matrixLinks: StringArrayFilter
|
|
pendingMatrixLinks: StringArrayFilter
|
|
admin: Boolean
|
|
}
|
|
|
|
input UserArrayFilter {
|
|
containsAll: [UserFilter]
|
|
containsOne: [UserFilter]
|
|
length: Int
|
|
}
|
|
|
|
input UserSort {
|
|
id: SortRule
|
|
username: SortRule
|
|
admin: SortRule
|
|
}
|
|
|
|
input ListFilter {
|
|
id: ID
|
|
name: StringFilter
|
|
tags: StringArrayFilter
|
|
maintainers: IDArrayFilter
|
|
# entries: EntryArrayFilter
|
|
}
|
|
|
|
input IDArrayFilter {
|
|
containsAll: [ID]
|
|
length: Int
|
|
}
|
|
|
|
input ListArrayFilter {
|
|
containsAll: [ListFilter]
|
|
containsOne: [ListFilter]
|
|
length: Int
|
|
}
|
|
|
|
input ListSort {
|
|
id: SortRule
|
|
name: SortRule
|
|
}
|
|
|
|
input EntryFilter {
|
|
id: ID
|
|
hashValue: StringFilter
|
|
tags: StringArrayFilter
|
|
addedBy: ID
|
|
timestamp: TimestampFilter
|
|
partOf: IDArrayFilter
|
|
}
|
|
|
|
input EntryArrayFilter {
|
|
containsAll: [EntryFilter]
|
|
containsOne: [EntryFilter]
|
|
length: Int
|
|
}
|
|
|
|
input EntrySort {
|
|
id: SortRule
|
|
hashValue: SortRule
|
|
timestamp: SortRule
|
|
addedBy: SortRule
|
|
}
|
|
|
|
input RoomFilter {
|
|
id: ID
|
|
active: Boolean
|
|
debug: Boolean
|
|
canEdit: Boolean
|
|
}
|
|
|
|
type Query {
|
|
users(first: Int, after: String, filter: UserFilter, sort: UserSort): UserConnection @loggedIn
|
|
lists(first: Int, after: String, filter: ListFilter, sort: ListSort): ListConnection @loggedIn
|
|
entries(first: Int, after: String, filter: EntryFilter, sort: EntrySort): EntryConnection @loggedIn
|
|
rooms(first: Int, after: String, filter: RoomFilter): RoomConnection @loggedIn
|
|
|
|
|
|
room(id: ID): Room @loggedIn
|
|
user(id: ID, username: String): User @loggedIn
|
|
entry(id: ID, hashValue: String): Entry @loggedIn
|
|
list(id: ID, name: String): List @loggedIn
|
|
|
|
self: User @loggedIn
|
|
}
|
|
|
|
input Login {
|
|
username: String!
|
|
password: String!
|
|
}
|
|
|
|
input Register {
|
|
username: String!
|
|
password: String!
|
|
mxID: String!
|
|
}
|
|
|
|
input CreateEntry {
|
|
tags: [String!]
|
|
partOf: [ID!]
|
|
hashValue: String!
|
|
comment: String
|
|
}
|
|
|
|
input CommentEntry {
|
|
entry: ID!
|
|
comment: String!
|
|
}
|
|
|
|
input CreateList {
|
|
name: String!
|
|
tags: [String!]
|
|
comment: String
|
|
maintainers: [ID!]
|
|
entries: [ID!]
|
|
}
|
|
|
|
input CommentList {
|
|
list: ID!
|
|
comment: String!
|
|
}
|
|
|
|
input AddToLists {
|
|
lists: [ID!]!
|
|
entry: ID!
|
|
}
|
|
|
|
input RemoveFromLists {
|
|
lists: [ID!]!
|
|
entry: ID!
|
|
}
|
|
|
|
input AddMXID {
|
|
mxid: String!
|
|
}
|
|
|
|
input RemoveMXID {
|
|
mxid: String!
|
|
}
|
|
|
|
input RoomConfigUpdate {
|
|
id: ID!
|
|
deactivate: Boolean
|
|
debug: Boolean
|
|
adminPowerLevel: Int
|
|
hashChecker: HashCheckerConfigUpdate
|
|
}
|
|
|
|
input HashCheckerConfigUpdate {
|
|
chatNotice: Boolean
|
|
hashCheckMode: HashCheckerMode
|
|
}
|
|
|
|
input ListSubscriptionUpdate {
|
|
roomId: ID!
|
|
listId: ID!
|
|
}
|
|
|
|
type Mutation {
|
|
login(input: Login!): String!
|
|
register(input: Register!): String! @hasRole(role: UNAUTHENTICATED)
|
|
addMXID(input: AddMXID!): User! @loggedIn
|
|
removeMXID(input: RemoveMXID!): User! @loggedIn
|
|
|
|
reconfigureRoom(input: RoomConfigUpdate!): Room! @loggedIn
|
|
subscribeToList(input: ListSubscriptionUpdate!): Room! @loggedIn
|
|
unsubscribeFromList(input: ListSubscriptionUpdate!): Room! @loggedIn
|
|
|
|
createEntry(input: CreateEntry!): Entry! @loggedIn
|
|
commentEntry(input: CommentEntry!): Entry! @loggedIn
|
|
addToLists(input: AddToLists!): Entry! @loggedIn
|
|
removeFromLists(input: RemoveFromLists!): Entry! @loggedIn
|
|
|
|
createList(input: CreateList!): List! @loggedIn
|
|
commentList(input: CommentList!): List! @loggedIn
|
|
deleteList(input: ID!): Boolean! @loggedIn @owner
|
|
|
|
}
|