From c3bba03a2b01c90fe0080694c2ec78faf9fdfb13 Mon Sep 17 00:00:00 2001 From: ManifoldFR <wilson.jallet@gmail.com> Date: Sun, 7 Oct 2018 00:47:06 +0200 Subject: [PATCH] Fix graphql definition files --- src/graphql/typeDefs/actions.graphql | 2 - src/graphql/typeDefs/actions_wish_list.gql | 306 ++++++------- src/graphql/typeDefs/objects.graphql | 2 - src/graphql/typeDefs/objects_wish_list.gql | 489 ++++++++++----------- 4 files changed, 371 insertions(+), 428 deletions(-) diff --git a/src/graphql/typeDefs/actions.graphql b/src/graphql/typeDefs/actions.graphql index fc1a0e5..cb445ff 100644 --- a/src/graphql/typeDefs/actions.graphql +++ b/src/graphql/typeDefs/actions.graphql @@ -1,5 +1,3 @@ -// hawkspar->all ; et la doc ? - # Requêtes type Query { diff --git a/src/graphql/typeDefs/actions_wish_list.gql b/src/graphql/typeDefs/actions_wish_list.gql index 79f7f2e..952a373 100644 --- a/src/graphql/typeDefs/actions_wish_list.gql +++ b/src/graphql/typeDefs/actions_wish_list.gql @@ -1,164 +1,144 @@ -// ce fichier en .gql sert juste a forcer VSCode a colorier correctement le langage graphQL. -// son contenu sera copie dans actions.js tout simplement - -/** - * @file définit les types query et mutation, points d'entree du schéma graphQL. ce fichier est la wish list de kadabra (qui veut avoir un schema clair pour travailler sereinement sur le front) - * @author akka vodol, kadabra -*/ - -// hawkspar->akka ; pas clair - -const RootQuery = ` - # Requêtes - - type Query { - # User queries de base - user(uid:ID!): User - - # Group queries de base - group(uid:ID!): Group - simpleGroup(uid:ID!): SimpleGroup - metaGroup(uid:ID!): MetaGroup - - # Message queries de base - message(id:ID!): Message - announcement(id:ID!): Announcement - event(id:ID!): Event - privatePost(id:ID!): PrivatePost - question(id:ID!): Question - answer(id:ID!): Answer - - # Request queries de base - request(id:ID!): Request - userJoinGroupRequest(id:ID!): UserJoinGroup - groupCoauthorEventRequest(id:ID!): GroupCoauthorEvent - - - - # Messages créés par un AuthorUnion=Group|[Group]|User - messagesFromGroup(uid:ID!): [Message] - announcementsFromGroup(uid:ID!): [Announcement] - eventsFromGroup(uid:ID!): [Event] - privatepostsFromUser(uid:ID!): [Post] - questionsFromUser(uid:ID!): [Question] - answersFromGroup(uid:ID!): [Answer] - - # Messages adressés à un Group - messagesToGroup(uid:ID!): [Message] - announcementsToGroup(uid:ID!): [Announcement] - eventsToGroup(uid:ID!): [Event] - privatepostsToGroup(uid:ID!): [Post] - questionsToGroup(uid:ID!): [Question] - answersToGroup(uid:ID!): [Answer] - - - - # Toutes les Requests auxquelles un groupe doit répondre - requestsToGroup(uid:ID!): [Request] - userJoinGroupRequestsToGroup(id:ID!): UserJoinGroup - groupCoauthorEventRequestsToGroup(id:ID!): GroupCoauthorEvent - - - - # Tous les xxx visibles par un utilisateur - allGroups(uid:ID!): [Group] - allSimpleGroups(uid:ID!): [SimpleGroup] - allMetaGroups(uid:ID!): [MetaGroup] - - allMessages(uid:ID!): [Message] - allAnnouncements(uid:ID!): [Announcement] - allEvents(uid:ID!): [Event] - - - - # TOL - searchTOL( - givenName: String, - lastName: String, - nickname: String, - nationality: String, - school: String, - promotion: String, - groups: String, - studies: String, - sport: String, - phone: String, - mail: String, - address: String, - ip: String - ): [User!] - - } -`; - -const RootMutation = ` - # Mutations - - type Mutation { - # Par rapport à un groupe donné, un user peut avoir différents niveaux de droits : - # none : aucun droit (typiquement, une connection ou l'utilisateur ne s'est pas authentifie) - # viewer : le user sait que le groupe existe et a accès aux infos de base, mais rien de plus - # member : le user est membre du groupe et a acces aux Message dont le groupe est auteur ou destinataire - # speaker : le user peut parler au nom du groupe. Il a le droit de publier des annonces et d'organiser des évènements - # admin : le user a tous les droits sur le groupe - - # Viewer mutations - requestJoin(userid: ID!, groupuid: ID!): Boolean - - - # Member mutations - leave(userid: ID!, groupuid: ID!): Boolean - postInGroup(userid: ID!, groupuid: ID!, postContent: String) - - - - # Speaker mutations - - writeAnnouncement( - from: uid!, - to: [uid!], - title: String, - date: String, - content: String - ) - writeEvent( - from: ID!, - to: [uid!], - title: String, - date: String, - content:String - ) - - - - # Admin mutations - - createSubgroup( - from: ID!, - newUid: ID, - name: String!, - website: String, - description: String, - school: String - ): Group - - addUser(userid: ID!, groupuid: ID!): User - removeUser(userid: String!, groupuid: ID!): User - addAdmin(userid: String!, groupuid: ID!): User - removeAdmin(userid: String!, groupuid: ID!): User - - editGroup( - from: String!, - name: String, - website: String, - description: String, - school: String - ): Group - - } -`; - - -const actionDefs = [RootQuery, RootMutation]; -export default actionDefs; +# Query root type. +type Query { + # User queries de base + user(uid:ID!): User + + # Group queries de base + group(uid:ID!): Group + simpleGroup(uid:ID!): SimpleGroup + metaGroup(uid:ID!): MetaGroup + + # Message queries de base + message(id:ID!): Message + announcement(id:ID!): Announcement + event(id:ID!): Event + privatePost(id:ID!): PrivatePost + question(id:ID!): Question + answer(id:ID!): Answer + + # Request queries de base + request(id:ID!): Request + userJoinGroupRequest(id:ID!): UserJoinGroup + groupCoauthorEventRequest(id:ID!): GroupCoauthorEvent + + + + # Messages créés par un AuthorUnion=Group|[Group]|User + messagesFromGroup(uid:ID!): [Message] + announcementsFromGroup(uid:ID!): [Announcement] + eventsFromGroup(uid:ID!): [Event] + privatepostsFromUser(uid:ID!): [Post] + questionsFromUser(uid:ID!): [Question] + answersFromGroup(uid:ID!): [Answer] + + # Messages adressés à un Group + messagesToGroup(uid:ID!): [Message] + announcementsToGroup(uid:ID!): [Announcement] + eventsToGroup(uid:ID!): [Event] + privatepostsToGroup(uid:ID!): [Post] + questionsToGroup(uid:ID!): [Question] + answersToGroup(uid:ID!): [Answer] + + + + # Toutes les Requests auxquelles un groupe doit répondre + requestsToGroup(uid:ID!): [Request] + userJoinGroupRequestsToGroup(id:ID!): UserJoinGroup + groupCoauthorEventRequestsToGroup(id:ID!): GroupCoauthorEvent + + + + # Tous les xxx visibles par un utilisateur + allGroups(uid:ID!): [Group] + allSimpleGroups(uid:ID!): [SimpleGroup] + allMetaGroups(uid:ID!): [MetaGroup] + + allMessages(uid:ID!): [Message] + allAnnouncements(uid:ID!): [Announcement] + allEvents(uid:ID!): [Event] + + + + # TOL + searchTOL( + givenName: String, + lastName: String, + nickname: String, + nationality: String, + school: String, + promotion: String, + groups: String, + studies: String, + sport: String, + phone: String, + mail: String, + address: String, + ip: String + ): [User!] + +} + +# Mutations +type Mutation { + # Par rapport à un groupe donné, un user peut avoir différents niveaux de droits : + # none : aucun droit (typiquement, une connection ou l'utilisateur ne s'est pas authentifie) + # viewer : le user sait que le groupe existe et a accès aux infos de base, mais rien de plus + # member : le user est membre du groupe et a acces aux Message dont le groupe est auteur ou destinataire + # speaker : le user peut parler au nom du groupe. Il a le droit de publier des annonces et d'organiser des évènements + # admin : le user a tous les droits sur le groupe + + # Viewer mutations + requestJoin(userid: ID!, groupuid: ID!): Boolean + + + # Member mutations + leave(userid: ID!, groupuid: ID!): Boolean + postInGroup(userid: ID!, groupuid: ID!, postContent: String) + + + + # Speaker mutations + + writeAnnouncement( + from: uid!, + to: [uid!], + title: String, + date: String, + content: String + ) + writeEvent( + from: ID!, + to: [uid!], + title: String, + date: String, + content:String + ) + + + + # Admin mutations + + createSubgroup( + from: ID!, + newUid: ID, + name: String!, + website: String, + description: String, + school: String + ): Group + + addUser(userid: ID!, groupuid: ID!): User + removeUser(userid: String!, groupuid: ID!): User + addAdmin(userid: String!, groupuid: ID!): User + removeAdmin(userid: String!, groupuid: ID!): User + + editGroup( + from: String!, + name: String, + website: String, + description: String, + school: String + ): Group + +} diff --git a/src/graphql/typeDefs/objects.graphql b/src/graphql/typeDefs/objects.graphql index 8064102..abe7ba8 100644 --- a/src/graphql/typeDefs/objects.graphql +++ b/src/graphql/typeDefs/objects.graphql @@ -1,5 +1,3 @@ -// hawkspar->all ; doc ? - # Utilisateurs type User { # Prénom de l'utilisateur diff --git a/src/graphql/typeDefs/objects_wish_list.gql b/src/graphql/typeDefs/objects_wish_list.gql index e01d6f8..3aa5bee 100644 --- a/src/graphql/typeDefs/objects_wish_list.gql +++ b/src/graphql/typeDefs/objects_wish_list.gql @@ -1,261 +1,228 @@ - -// ce fichier en .gql sert juste a forcer VSCode a colorier correctement le langage graphQL. -// son contenu sera copie dans objects.js tout simplement - -/** - * @file définit les types de base du schéma graphQL. ce fichier est la wish list de kadabra (qui veut avoir un schema clair pour travailler sereinement sur le front) - * @author akka vodol, kadabra -*/ - -// hawkspar->akka ; pas clair - -const User = ` - # Utilisateurs - - # Un utilisateur - type User { - uid: ID! - - # Pour l'identifier - givenName: String! # Prénom - lastName: String! # Nom de famille - nickname: String # Surnom - nationality: String - birthdate: String! - promotion: String - - # Pour le contacter - mail: String - phone: String - address: [String] # Adresse(s) de l'utilisateur (numero de casert par exemple) - - # Ses interactions avec des groupes - groups: [SimpleGroup] # Groupes dont l'utilisateur est membre - likes: [Group] # Groupes que l'utilisateur sympathise - } -`; - -const Group = ` - # Groupes associatifs - - """ - L'interface Group représente les deux types de groupes implémentés dans Sigma : les groupes - simples, dont les membres sont des utilisateurs, et les métagroupes, dont les membres sont - des groupes simples (tel que Federez, dont les membres incluent le BR et DaTA). - """ - interface Group { - uid: ID! - createdAt: String! # Date et heure de création du groupe. - updatedAt: String! # Date et heure de mise a jour des informations du groupe. - - # Pour l'identifier - name: String! - description: String # Une description tres rapide du groupe - - # Pour le contacter - mail: String - website: String - } - - # Le groupe de base, dont les membres sont des utilisateurs : binets, Kès... - type SimpleGroup implements Group { - uid: ID! - createdAt: String! - updatedAt: String! - name: String - description: String - mail: String - website: String - - # Admin, membres, sympathisants du groupe - admins: [User] - members: [User] - likers: [User] - - # Graphe organique des groupes - parent: SimpleGroup # Groupe parent - children: [SimpleGroup] # Groupes enfants - memberOfMeta: [MetaGroup] - visibilityEdge: [Group] # visible par des groupes en plus du graphe organique - - school: String # École d'origine du groupe (pour information) - - # Activité publique du groupe - announcementsFromGroup: [Announcement] # annonces écrites par le groupe - announcementsToGroup: [Announcement] # annonces adressées au groupe - eventsFromGroup: [Event] - eventsToGroup: [Event] - frontPage: String # page d'accueil du groupe, en markdown - questions: [Question] - answers: [Answer] # permet d'obtenir les questions qui ont eu une réponse - - # Activité interne - posts: [Post] - postsSummary: String # récapitulatif de l'activité interne du groupe, en markdown - } - - # Un groupe dont les membre sont d'autres groupes - type MetaGroup implements Group { - uid: ID! - createdAt: String! - updatedAt: String! - name: String - description: String - mail: String - website: String - - # Admins et Groupes membres - admins: [User] - members: [SimpleGroup] # Par choix de paradigme, on veut éviter d'avoir des méta-méta-groupes. - - visibilityEdge: [Group] # visible par des groupes en plus du graphe organique - } - -`; - -const Message = ` - # Tout type de message adressé à un ou plusieurs groupes. - - # Auteur possible d'un Message - union AuthorUnion = Group | [Group] | User - union RecipientUnion = Group | [Group] - - """ - L'interface Message représente toute information que veut communiquer un groupe ou un user. - Par choix de paradigme, tout Message est adressé à un (ou des) groupe(s). - Les types implémentés sont divisés en deux : - - les Message émanant d'un groupe : Announcement et Event, ainsi que Answer - - les Message émanant d'un user : PrivatePost, ainsi que Question - """ - interface Message { - id: ID! - createdAt: String! - updatedAt: String! - title: String! - content: String! - - authors: AuthorUnion - recipient: RecipientUnion # destinataire du Message. forcement (un ou plusieurs) Group - } - - # Annonce effectuée par un ou plusieurs groupes. - type Announcement implements Message { - id: ID! - createdAt: String! - updatedAt: String! - title: String! - content: String! - - authors: [Group] - recipients: [Group] - - importance: Int # TODO: mettre un commentaire pour expliquer - views: Int # TODO mettre un commentaire pour expliquer - - # Si cette Announcement annonce un événement, référence le Event. Sinon null. - forEvent: Event - } - - # Événements organisés par un ou plusieurs groupes. - type Event implements Message { - id: ID! - createdAt: String! - updatedAt: String! - title: String! - content: String! - - authors: [Group] # Organisateurs de l'événement - recipients: [Group] - - location: String! - startTime: String! - endTime: String! - - # Personnes qui participent à l'événement. - participatingGroups: [Group] - participatingUsers: [User] - - # Si cet Event a été annoncé par un Announcement, le référence. Sinon null. - forAnnouncement: Announcement - } - - # Post interne d'un membre sur la page interne de son groupe - type PrivatePost implements Message { - id: ID! - createdAt: String! - updatedAt: String! - title: String! - content: String! - - authors: User - recipient: Group - } - - # Question posée par un user à un groupe - type Question implements Message { - id: ID! - createdAt: String! - updatedAt: String! - title: String! - content: String! - - authors: User - recipient: Group - - # Référence la réponse donnée par le groupe à cette Question. Si pas encore répondu, null. - forAnswer: Answer - } - - # Réponse à une Question - type Answer implements Message { - id: ID! - createdAt: String! - updatedAt: String! - title: String! - content: String! - - authors: Group - recipient: Group - - # La question à laquelle cette Answer répond. Non-nullable bien sûr - forQuestion: Question! - } -`; - -const Requests = ` - - # Emetteur possible d'une Request - union RequesterUnion = Group | User - - interface Request { - id: ID! - message: String # court message accompagnant la demande - - from: RequesterUnion # Émet la demande - to: Group # Reçoit la demande - } - - # Demande d'un utilisateur désirant rejoindre le groupe. - type UserJoinGroup implements Request{ - id: ID! - message: String - - from: User - to: Group - } - - # Invite un groupe à co-organiser son événement (et pas l'inverse!) - type GroupCoauthorEvent implements Request{ - id: ID! - message: String - - from: Group # Groupe authorant l'évènement et lançant l'invitation - to: Group # Groupe récipiendaire de l'invitation à co-hoster l'événement - forEvent: Event - } - -`; - -const objectDefs = [Group, User, Message, Requests]; -export default objectDefs; - +# Un utilisateur +type User { + uid: ID! + + # Pour l'identifier + givenName: String! # Prénom + lastName: String! # Nom de famille + nickname: String # Surnom + nationality: String + birthdate: String! + promotion: String + + # Pour le contacter + mail: String + phone: String + address: [String] # Adresse(s) de l'utilisateur (numero de casert par exemple) + + # Ses interactions avec des groupes + groups: [SimpleGroup] # Groupes dont l'utilisateur est membre + likes: [Group] # Groupes que l'utilisateur sympathise +} + +""" +L'interface Group représente les deux types de groupes implémentés dans Sigma : les groupes +simples, dont les membres sont des utilisateurs, et les métagroupes, dont les membres sont +des groupes simples (tel que Federez, dont les membres incluent le BR et DaTA). +""" +interface Group { + uid: ID! + createdAt: String! # Date et heure de création du groupe. + updatedAt: String! # Date et heure de mise a jour des informations du groupe. + + # Pour l'identifier + name: String! + description: String # Une description tres rapide du groupe + + # Pour le contacter + mail: String + website: String +} + +# Le groupe de base, dont les membres sont des utilisateurs : binets, Kès... +type SimpleGroup implements Group { + uid: ID! + createdAt: String! + updatedAt: String! + name: String + description: String + mail: String + website: String + + # Admin, membres, sympathisants du groupe + admins: [User] + members: [User] + likers: [User] + + # Graphe organique des groupes + parent: SimpleGroup # Groupe parent + children: [SimpleGroup] # Groupes enfants + memberOfMeta: [MetaGroup] + visibilityEdge: [Group] # visible par des groupes en plus du graphe organique + + school: String # École d'origine du groupe (pour information) + + # Activité publique du groupe + announcementsFromGroup: [Announcement] # annonces écrites par le groupe + announcementsToGroup: [Announcement] # annonces adressées au groupe + eventsFromGroup: [Event] + eventsToGroup: [Event] + frontPage: String # page d'accueil du groupe, en markdown + questions: [Question] + answers: [Answer] # permet d'obtenir les questions qui ont eu une réponse + + # Activité interne + posts: [Post] + postsSummary: String # récapitulatif de l'activité interne du groupe, en markdown +} + +# Un groupe dont les membre sont d'autres groupes +type MetaGroup implements Group { + uid: ID! + createdAt: String! + updatedAt: String! + name: String + description: String + mail: String + website: String + + # Admins et Groupes membres + admins: [User] + members: [SimpleGroup] # Par choix de paradigme, on veut éviter d'avoir des méta-méta-groupes. + + visibilityEdge: [Group] # visible par des groupes en plus du graphe organique +} + +union AuthorUnion = Group | [Group] | User +union RecipientUnion = Group | [Group] + +""" +L'interface Message représente toute information que veut communiquer un groupe ou un user. +Par choix de paradigme, tout Message est adressé à un (ou des) groupe(s). +Les types implémentés sont divisés en deux : +- les Message émanant d'un groupe : Announcement et Event, ainsi que Answer +- les Message émanant d'un user : PrivatePost, ainsi que Question +""" +interface Message { + id: ID! + createdAt: String! + updatedAt: String! + title: String! + content: String! + + authors: AuthorUnion + recipient: RecipientUnion # destinataire du Message. forcement (un ou plusieurs) Group +} + +# Annonce effectuée par un ou plusieurs groupes. +type Announcement implements Message { + id: ID! + createdAt: String! + updatedAt: String! + title: String! + content: String! + + authors: [Group] + recipients: [Group] + + importance: Int # TODO: mettre un commentaire pour expliquer + views: Int # TODO mettre un commentaire pour expliquer + + # Si cette Announcement annonce un événement, référence le Event. Sinon null. + forEvent: Event +} + +# Événements organisés par un ou plusieurs groupes. +type Event implements Message { + id: ID! + createdAt: String! + updatedAt: String! + title: String! + content: String! + + authors: [Group] # Organisateurs de l'événement + recipients: [Group] + + location: String! + startTime: String! + endTime: String! + + # Personnes qui participent à l'événement. + participatingGroups: [Group] + participatingUsers: [User] + + # Si cet Event a été annoncé par un Announcement, le référence. Sinon null. + forAnnouncement: Announcement +} + +# Post interne d'un membre sur la page interne de son groupe +type PrivatePost implements Message { + id: ID! + createdAt: String! + updatedAt: String! + title: String! + content: String! + + authors: User + recipient: Group +} + +# Question posée par un user à un groupe +type Question implements Message { + id: ID! + createdAt: String! + updatedAt: String! + title: String! + content: String! + + authors: User + recipient: Group + + # Référence la réponse donnée par le groupe à cette Question. Si pas encore répondu, null. + forAnswer: Answer +} + +# Réponse à une Question +type Answer implements Message { + id: ID! + createdAt: String! + updatedAt: String! + title: String! + content: String! + + authors: Group + recipient: Group + + # La question à laquelle cette Answer répond. Non-nullable bien sûr + forQuestion: Question! +} + +# Emetteur possible d'une Request +union RequesterUnion = Group | User + +interface Request { + id: ID! + message: String # court message accompagnant la demande + + from: RequesterUnion # Émet la demande + to: Group # Reçoit la demande +} + +# Demande d'un utilisateur désirant rejoindre le groupe. +type UserJoinGroup implements Request{ + id: ID! + message: String + + from: User + to: Group +} + +# Invite un groupe à co-organiser son événement (et pas l'inverse!) +type GroupCoauthorEvent implements Request{ + id: ID! + message: String + + from: Group # Groupe authorant l'évènement et lançant l'invitation + to: Group # Groupe récipiendaire de l'invitation à co-hoster l'événement + forEvent: Event +} -- GitLab