schema { query: Query } type Query { users: [User!]! } 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 { privacyPreferences: PrivacyPreferences! notificationPreferences: NotificationPreferences! securityPreferences: SecurityPreferences! # TODO: external servers externalServersPreferences: ExternalServersPreferences! } type PrivacyPreferences { # 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!] } type NotificationPreferences { lockDetails: Boolean! doNotDisturb: Boolean! } type SecurityPreferences { # One-purpose-passwords accountTokens: [ID!]! # The account's password hash passwordHash: String! } type ExternalServersPreferences { privacyPreference: PrivacyPreferences externalServers: RestrictionPolicy! externalServersLimit: [Url!] } # Everyone = Including all = Excluding none # None = Including none = Excluding all enum RestrictionPolicy { Everyone Excluding Including None }