# YetAnotherToDoList # Copyright © 2023 gilex-dev gilex-dev@proton.me # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, version 3. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # GraphQL schema example # # https://gqlgen.com/getting-started/ type Todo { id: ID! text: String! done: Boolean! user: User! } type User { id: ID! userName: String! fullName: String todos: [Todo!]! roles: [RelationUserRole!]! } type RelationUserRole { role: Role! userIsRoleManager: Boolean! } type RelationRoleUser { user: User! userIsRoleManager: Boolean! } type Role { id: ID! roleName: String! isAdmin: Boolean! isUserCreator: Boolean! roleMembers: [RelationRoleUser!]! } type RefreshToken { id: ID! expiryDate: Int! tokenName: String selector: String token: String userId: String! } type Query { todos: [Todo!]! @hasPrivilege(privilege: isAdmin) users: [User!]! roles: [Role!]! refreshTokens: [RefreshToken!]! @hasPrivilege(privilege: isAdmin) user(id: ID!): User! todo(id: ID!): Todo! role(id: ID!): Role! refreshToken(id: ID!): RefreshToken! } input NewUser { userName: String! fullName: String password: String! } input NewTodo { text: String! userId: ID! } input NewRole { roleName: String! isAdmin: Boolean! isUserCreator: Boolean! } input NewRefreshToken { tokenName: String } input UpdateTodo { text: String done: Boolean } input UpdateUser { userName: String fullName: String password: String } input UpdateRole { roleName: String isAdmin: Boolean isUserCreator: Boolean } input UpdateRefreshToken { tokenName: String } type Mutation { createUser(input: NewUser!): User! @hasPrivilege(privilege: isUserCreator) createTodo(input: NewTodo!): Todo! createRole(input: NewRole!): Role! @hasPrivilege(privilege: isAdmin) createRefreshToken(input: NewRefreshToken!): RefreshToken! updateTodo(id: ID!, changes: UpdateTodo!): Todo! updateUser(id: ID!, changes: UpdateUser!): User! updateRole(id: ID!, changes: UpdateRole!): Role! @hasPrivilege(privilege: isAdmin) updateRefreshToken(id: ID!, changes: UpdateRefreshToken!): RefreshToken! deleteUser(id: ID!): ID @hasPrivilege(privilege: isAdmin) deleteTodo(id: ID!): ID deleteRole(id: ID!): ID @hasPrivilege(privilege: isAdmin) deleteRefreshToken(id: ID!): ID addUserRole( userId: ID! roleId: ID! userIsRoleManager: Boolean! ): [RelationUserRole!]! @hasPrivilege(privilege: isAdmin) updateUserRole( userId: ID! roleId: ID! userIsRoleManager: Boolean! ): [RelationUserRole!]! @hasPrivilege(privilege: isAdmin) removeUserRole(userId: ID!, roleId: ID!): [RelationUserRole!]! @hasPrivilege(privilege: isAdmin) } directive @hasPrivilege(privilege: Privilege!) on FIELD_DEFINITION directive @asUser(id: ID!) on MUTATION | QUERY enum Privilege { isAdmin isUserCreator }