From 8aee1562349793dec3ffb9458ac08519f0f05e33 Mon Sep 17 00:00:00 2001 From: anatole <anatole.romon@polytechnique.edu> Date: Sat, 3 Mar 2018 13:07:01 +0100 Subject: [PATCH] separation des SimpleGroup et MetaGroup --- src/graphql/schema.js | 51 ++++++++++++++++---- src/graphql/typeDefs.js | 100 ++++++++++++++++++++++++++++------------ 2 files changed, 114 insertions(+), 37 deletions(-) diff --git a/src/graphql/schema.js b/src/graphql/schema.js index 0d96a92..18ff58c 100644 --- a/src/graphql/schema.js +++ b/src/graphql/schema.js @@ -25,12 +25,42 @@ const resolvers = { }); }, + accessGroups: (obj, args, context) => { + return {}; + }, + + accessPosts: (obj, args, context) => { + return {}; + }, + + accessUsers: (obj, args, context) => { + return {}; + }, + }, + + GroupQuery : { allGroups: (obj, args, context) => { return db_utils.getAllVisibleGroups(context.user); }, group: (obj, args, context) => { return db_utils.getGroupIfVisible(context.user, args.uid); }, + simpleGroup: (obj, args, context) => { + return db_utils.getGroupIfVisible(context.user, args.uid); + } + }, + + PostQuery : { + allPosts: (obj, args, context) => { + return knex.select().from('posts'); + }, + post: (obj, args, context) => { + const result = knex.select().from('posts').where('id','=',args.id); + return result.then((res) => res[0]); + }, + }, + + UserQuery: { user: (obj, args, context) => { const refactorer = (data) => { return { @@ -52,14 +82,6 @@ const resolvers = { return result; }, - allPosts: (obj, args, context) => { - return knex.select().from('posts'); - }, - post: (obj, args, context) => { - const result = knex.select().from('posts').where('id','=',args.id); - return result.then((res) => res[0]); - }, - searchTOL: (obj, args, context) => { console.log(args); return db_utils.repliquerTOLdesIds(context.user, { @@ -238,11 +260,24 @@ const resolvers = { }, Group: { + __resolveType: (obj) => { + if(obj.isSpiritual) + return "MetaGroup"; + else + return "SimpleGroup"; + } + }, + + SimpleGroup: { + members: (obj, args, context) => { console.log("Current group is",obj.uid); console.log("\tMembers of the group are:",obj); return db_utils.listerMembres(context.user,obj.uid); } + }, + + MetaGroup: { } }; diff --git a/src/graphql/typeDefs.js b/src/graphql/typeDefs.js index 665461f..0ee5189 100644 --- a/src/graphql/typeDefs.js +++ b/src/graphql/typeDefs.js @@ -1,35 +1,15 @@ const RootTypes = ` # Requêtes type Query { - allGroups: [Group] - group(uid: ID) : Group - user(uid: ID) : User - allMessages: [Message] - allEvents: [Event] - allPosts: [Post] - post(id: ID): Post - allAnnouncements: [Announcement] + accessGroups : GroupQuery + accessPosts : PostQuery + accessUsers : UserQuery asAdmin(groupUID: ID): AdminQuery asSpeaker(groupUID: ID): AdminQuery asMember(groupUID: ID): AdminQuery asViewer(groupUID: ID): AdminQuery - searchTOL( - givenName: String, - lastName: String, - nickname: String, - nationality: String, - school: String, - promotion: String, - groups: String, - studies: String, - sport: String, - phone: String, - mail: String, - adress: String, - ip: String - ): [String] } type Mutation { @@ -86,6 +66,44 @@ const subMutations = ` `; const subQueries = ` + + type GroupQuery{ + allGroups: [Group] + group(uid: ID) : Group + simpleGroup(uid : ID) : SimpleGroup + metaGroup(uid : ID) : MetaGroup + + } + + type PostQuery{ + allMessages: [Message] + allEvents: [Event] + allPosts: [Post] + post(id: ID): Post + allAnnouncements: [Announcement] + } + + type UserQuery{ + + user(uid: ID) : User + + searchTOL( + givenName: String, + lastName: String, + nickname: String, + nationality: String, + school: String, + promotion: String, + groups: String, + studies: String, + sport: String, + phone: String, + mail: String, + adress: String, + ip: String + ): [String] + } + # Requête à la base de donnée nécessitant d'être administrateur. type AdminQuery{ isAdmin: Boolean @@ -126,24 +144,48 @@ const User = ` const Group = ` # Groupes associatifs - type Group { - # Identifiant unique du groupe + + interface Group { + # Identifiant unique de l'union uid: ID - # Nom du groupe + # Nom de l'union name: String # Site du groupe website: String + # Le groupe est-il un spiritualGroup (sinon c'est un materialGroup) + createdAt: String! + updatedAt: String! + + } + + type SimpleGroup implements Group{ + uid: ID + name: String + website: String + createdAt: String! + updatedAt: String! + # Membres du groupe members: [User] # Jour et heure de création du groupe - createdAt: String! - updatedAt: String! description: String # École d'origine du groupe school: String # Groupe parent parent: Group } + + type MetaGroup implements Group { + uid: ID + name: String + website: String + createdAt: String! + updatedAt: String! + + # Les membres sont des groupes + groupMembers: [Group]! + } + `; const Message = ` @@ -240,7 +282,7 @@ const Requests = ` # Demande au récipiendaire de rejoindre l'organisation d'un événement. type YourGroupHostEvent implements Request{ - requestID: ID + id: ID! message: String # Événement concerné event: Event -- GitLab