72 lines
1.5 KiB
GraphQL
72 lines
1.5 KiB
GraphQL
|
schema {
|
||
|
query: Query
|
||
|
}
|
||
|
|
||
|
type Query {
|
||
|
users: [User!]!
|
||
|
}
|
||
|
|
||
|
# Hopefully provided by juniper and chrono
|
||
|
scalar DateTimeUtc
|
||
|
# else it's probably DateTime
|
||
|
# scalar DateTime
|
||
|
|
||
|
# Provided by juniper and url
|
||
|
scalar Url
|
||
|
|
||
|
type User {
|
||
|
id: ID!
|
||
|
userName: String!
|
||
|
displayName: String
|
||
|
activated: Boolean!
|
||
|
created: DateTimeUtc!
|
||
|
lastOnline: DateTimeUtc
|
||
|
preferences: UserPreferences!
|
||
|
}
|
||
|
|
||
|
# All account preferences for a single user
|
||
|
type UserPreferences {
|
||
|
privacyPreference: PrivacyPreference!
|
||
|
# TODO: notifications
|
||
|
notificationPreference: NotificationPreference!
|
||
|
# TODO: external servers
|
||
|
# TODO: security
|
||
|
}
|
||
|
|
||
|
type PrivacyPreference {
|
||
|
# Discovery on other servers
|
||
|
discovery: RestrictionPolicy!
|
||
|
discoveryUserLimit: [String!]
|
||
|
discoveryServerLimit: [Url!]
|
||
|
|
||
|
# Last seen online
|
||
|
lastSeen: RestrictionPolicy!
|
||
|
lastSeenUserLimit: [String!]
|
||
|
lastSeenServerLimit: [Url!]
|
||
|
# For enabled users/servers: Only give vague indications
|
||
|
# e.g. recently, a long time ago
|
||
|
lastSeenCourse: Boolean!
|
||
|
|
||
|
# Describing informational text regarding the user
|
||
|
info: RestrictionPolicy!
|
||
|
infoUserLimit: [String!]
|
||
|
infoServerLimit: [Url!]
|
||
|
|
||
|
# One-purpose-passwords
|
||
|
# TODO: move to security
|
||
|
accountTokens: [ID!]!
|
||
|
}
|
||
|
|
||
|
type NotificationPreference {
|
||
|
lockDetails: Boolean!
|
||
|
doNotDisturb: Boolean!
|
||
|
}
|
||
|
|
||
|
# Everyone = Including all = Excluding none
|
||
|
# None = Including none = Excluding all
|
||
|
enum RestrictionPolicy {
|
||
|
Everyone
|
||
|
Excluding
|
||
|
Including
|
||
|
None
|
||
|
}
|