Skip to content
Snippets Groups Projects
Commit c3bba03a authored by Wilson JALLET's avatar Wilson JALLET :money_with_wings:
Browse files

Fix graphql definition files

parent 6a5f26ca
No related branches found
No related tags found
No related merge requests found
// hawkspar->all ; et la doc ?
# Requêtes
type Query {
......
// 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
}
// hawkspar->all ; doc ?
# Utilisateurs
type User {
# Prénom de l'utilisateur
......
// 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 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
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment