# =============================================== # USERS # =============================================== extend type Query { users: UserQuery } extend type Mutation { users: UserMutation } # ----------------------------------------------- # QUERIES # ----------------------------------------------- type UserQuery { list( filter: String orderBy: String ): [UserMinimal] @auth(requires: ["write:users", "manage:users", "manage:system"]) search( query: String! ): [UserMinimal] @auth(requires: ["write:groups", "manage:groups", "write:users", "manage:users", "manage:system"]) single( id: Int! ): User @auth(requires: ["manage:users", "manage:system"]) profile: UserProfile lastLogins: [UserLastLogin] @auth(requires: ["write:groups", "manage:groups", "write:users", "manage:users", "manage:system"]) } # ----------------------------------------------- # MUTATIONS # ----------------------------------------------- type UserMutation { create( email: String! name: String! passwordRaw: String providerKey: String! groups: [Int]! mustChangePassword: Boolean sendWelcomeEmail: Boolean ): UserResponse @auth(requires: ["write:users", "manage:users", "manage:system"]) update( id: Int! email: String name: String newPassword: String groups: [Int] location: String jobTitle: String timezone: String dateFormat: String appearance: String ): DefaultResponse @auth(requires: ["manage:users", "manage:system"]) delete( id: Int! replaceId: Int! ): DefaultResponse @auth(requires: ["manage:users", "manage:system"]) verify( id: Int! ): DefaultResponse @auth(requires: ["manage:users", "manage:system"]) activate( id: Int! ): DefaultResponse @auth(requires: ["manage:users", "manage:system"]) deactivate( id: Int! ): DefaultResponse @auth(requires: ["manage:users", "manage:system"]) enableTFA( id: Int! ): DefaultResponse @auth(requires: ["manage:users", "manage:system"]) disableTFA( id: Int! ): DefaultResponse @auth(requires: ["manage:users", "manage:system"]) resetPassword( id: Int! ): DefaultResponse updateProfile( name: String! location: String! jobTitle: String! timezone: String! dateFormat: String! appearance: String! ): UserTokenResponse changePassword( current: String! new: String! ): UserTokenResponse } # ----------------------------------------------- # TYPES # ----------------------------------------------- type UserResponse { responseResult: ResponseStatus! user: User } type UserLastLogin { id: Int! name: String! lastLoginAt: Date! } type UserMinimal { id: Int! name: String! email: String! providerKey: String! isSystem: Boolean! isActive: Boolean! createdAt: Date! lastLoginAt: Date } type User { id: Int! name: String! email: String! providerKey: String! providerName: String providerId: String providerIs2FACapable: Boolean isSystem: Boolean! isActive: Boolean! isVerified: Boolean! location: String! jobTitle: String! timezone: String! dateFormat: String! appearance: String! createdAt: Date! updatedAt: Date! lastLoginAt: Date tfaIsActive: Boolean! groups: [Group]! } type UserProfile { id: Int! name: String! email: String! providerKey: String providerName: String isSystem: Boolean! isVerified: Boolean! location: String! jobTitle: String! timezone: String! dateFormat: String! appearance: String! createdAt: Date! updatedAt: Date! lastLoginAt: Date groups: [String]! pagesTotal: Int! } type UserTokenResponse { responseResult: ResponseStatus! jwt: String }