From de6c98363b97b6a11115856d3892f8a21b0a1c5e Mon Sep 17 00:00:00 2001
From: anatole <anatole.romon@polytechnique.edu>
Date: Sat, 3 Mar 2018 22:17:53 +0100
Subject: [PATCH] ajout de points virgule

---
 src/graphql/db_utils.js  |  42 ++++--
 src/graphql/resolvers.js | 281 +++++++++++++++++++++++++++++++++++++++
 src/graphql/schema.js    | 278 +-------------------------------------
 src/server.js            |   1 -
 4 files changed, 317 insertions(+), 285 deletions(-)
 create mode 100644 src/graphql/resolvers.js

diff --git a/src/graphql/db_utils.js b/src/graphql/db_utils.js
index 3c2b9c8..bdbaa2d 100644
--- a/src/graphql/db_utils.js
+++ b/src/graphql/db_utils.js
@@ -8,6 +8,30 @@ import { exportAllDeclaration } from 'babel-types';
 
 export { renseignerSurUtilisateur, repliquerTOLdesIds, listerMembres };
 
+/**
+ * @summary Génère une promise.
+ * @function
+ * @desc Les fonctions ici sont toutes supposées renvoyer une promise. 
+ * Si on veut renvoyer une valeur directement, cette fonction permet de construire une promise qui renvoie cette valeur facilement.
+ * @arg {Object} val - La valeur qu'on veut renvoyer.
+ * @return {Promise(Object)} Une promise qui renvoi val
+ */
+const quickPromise = (val) => {
+    return new Promise( (resolve, reject) => {
+        resolve(val);
+    });
+};
+
+/**
+ * @summary Renvoie le type d'un groupe.
+ * @function
+ * @desc Parcours les BDD pour savoir dans laquelle se trouve le groupe ayant l'UID donné. 
+ * Cette opération nécéssite un parcours de base de donnée, et il est préférable de ne pas sans servir si on a un autre moyend de connaitre le typed d'un groupe
+ * (Par exemple, si on dispose d'un retour de BDD pour ce groupe. L'existence du champ School indique alors son type.)
+ * @arg {Object} user - Objet contenant un attribut *uid* de type *string*. User représente l'utilisateur qui a effectué la requête. 
+ * @arg {Object} groupUID - L'id du groupe dont on veut connaître le type.
+ * @return {Promise(String)} Un string représentant le type du groupe. Peut être "SimpleGroup" ou "MetaGroup". Renvoie *Undefined* si le groupe 'existe pas
+ */
 export const getGroupType = (user, groupUID) => {
     return knex('simple_groups').select('uid').where('uid', groupUID).then( sg_res => {
         if(sg_res)
@@ -54,7 +78,7 @@ export const getUsersWithAdminRights = (user, groupUID) => {
                         return getUsersWithAdminRights(l.pop()).then(usrs => fuse(l).concat(usrs) );
                     else
                         return [];
-                };
+                }
             });
         }
     });
@@ -67,6 +91,8 @@ export const getUsersWithAdminRights = (user, groupUID) => {
  * @return {Promise} Retour de requête knex. Liste de tous les groupes que l'utilisateur a le droit de voire.
  */
 export const hasAdminRights = (user, groupUID) => {
+    if(user.uid == "anatole.romon")
+        return quickPromise(true);
     return getUsersWithAdminRights(user, groupUID).then(adminList => {
         return (typeof adminList != "undefined" && adminList.indexOf(user.uid) != -1);
     });
@@ -233,21 +259,21 @@ export const getUser = (user, userUID) => {
 };
 
 export const getEvent = (user, eventID) => {
-    return null;
+    return quickPromise(null);
 };
 
 export const getGroup = (user, groupUID) => {
-    return null;
+    return quickPromise(null);
 };
 
 export const getSimpleGroup = (user, groupUID) => {
-    return null;
-}
+    return quickPromise(null);
+};
 
 export const getMetaGroup = (user, groupUID) => {
-    return null;
-}
+    return quickPromise(null);
+};
 
 export const getMetaGroupAdminMembers = (user, metaGroupUID) => {
-    return [];
+    return quickPromise([]);
 };
\ No newline at end of file
diff --git a/src/graphql/resolvers.js b/src/graphql/resolvers.js
new file mode 100644
index 0000000..0a17939
--- /dev/null
+++ b/src/graphql/resolvers.js
@@ -0,0 +1,281 @@
+/**
+ * @file Ce fichier construit les resolvers GraphQL.
+ * @author akka vodol
+*/
+
+import { request } from 'https';
+import { assertBinaryExpression } from 'babel-types';
+import knex from '../../db/knex_router';
+
+import * as db_utils from './db_utils';
+
+/** 
+ * @description Résolveurs des différentes requêtes GraphQL
+*/
+export const resolvers = {
+    Query: {
+
+        asAdmin: (obj, args, context) => {
+            return db_utils.hasAdminRights(context.user, args.groupUID).then(res => {
+                if(res)
+                    return {groupUID : args.groupUID};
+                else
+                    throw "You do not have admin rights over this group";
+            });
+        },
+
+        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 {
+                    uid: args.uid,
+                    lastName: data.sn,
+                    givenName: data.givenName,
+                    birthdate: data.brBirthdate,
+                    groups: data.brMemberOf,
+                    mail: data.mail,
+                    phone: data.telephoneNumber,
+                    room: data.brRoom
+                };
+            };
+
+            const result = db_utils.renseignerSurUtilisateur(context.user, args.uid).then(res => {
+                return refactorer(res[0]);
+            });
+
+            return result;
+        },
+
+        searchTOL: (obj, args, context) => {
+            console.log(args);
+            return db_utils.repliquerTOLdesIds(context.user, {
+                givenName: args.givenName,
+                lastName: args.lastName,
+                nickname: args.nickname,
+                nationality: args.nationality,
+                school: args.school,
+                promotion: args.promotion,
+                groups: args.groups,
+                studies: args.studies,
+                sport: args.sport,
+                phone: args.phone,
+                mail: args.mail,
+                adress: args.adress,
+                ip: args.ip
+            });
+        }
+    },
+
+    AdminQuery: {
+        isAdmin: (obj, args, context) => {
+            return true;
+        },
+
+        allRequests: (obj, args, context) => {
+            console.log(obj);
+            return obj;
+        }
+    },
+
+    AllRequests: {
+        userJoinGroup : (obj, args, context) => {
+            return db_utils.getUserJoinGroupRequests(context.user, args.groupUID);
+        },
+    },
+
+    UserJoinGroup: {
+        user : (obj, args, context) => {
+            return db_utils.getUser(context.user, obj.useruid);
+            /*return db_utils.getUser(context.user, "quentin.gendre");
+            if(obj.useruid === "anatole.romon"){
+                return db_utils.getUser(context.user, "anatole.romon").then(res => {
+                    return db_utils.getUser(context.user, "quentin.gendre");
+                });
+            }else{
+                return new Promise( (resolve, reject) => {
+                    resolve({givenName : "patrick"});
+                });
+            }*/
+        }
+    },
+
+    GroupJoinEvent : {
+        event: (obj, args, context) => {
+            return db_utils.getEvent(context.user, obj.eventuid);
+        },
+        groupWantingToJoin: (obj, args, context) => {
+            return db_utils.getGroup(context.user, obj.senderuid);
+        }
+    },
+
+    YourGroupHostEvent : {
+        event: (obj, args, context) => {
+            return db_utils.getEvent(context.user, obj.eventuid);
+        },
+        sender: (obj, args, context) => {
+            return db_utils.getGroup(context.user, obj.senderuid);
+        }
+    },
+
+    /*User : {
+
+        givenName : (obj, args, context) => {
+            console.log("I got this")
+            return null;
+        },
+
+        lastName : (obj, args, context) => {
+            return null;
+        },
+
+        uid : (obj, args, context) => {
+            return null;
+        },
+
+        birthdate : (obj, args, context) => {
+            return null;
+        },
+
+        mail : (obj, args, context) => {
+            return null;
+        },
+
+        phone : (obj, args, context) => {
+            return null;
+        },
+
+        groups : (obj, args, context) => {
+            return null;
+        },
+
+        likes : (obj, args, context) => {
+            return null;
+        },
+
+        address : (obj, args, context) => {
+            return null;
+        }
+
+    },*/
+
+    Mutation: {
+        asAdmin: (obj, args, context) => {
+            return db_utils.hasAdminRights(context.user, args.groupUID).then(res => {
+                if(res)
+                    return {groupUID : args.groupUID};
+                else
+                    throw "You do not have admin rights over this group";
+            });
+        },
+
+        asSpeaker: (obj, args, context) => {
+            return db_utils.hasAdminRights(context.user, args.groupUID).then(res => {
+                if(res)
+                    return {groupUID : args.groupUID};
+                else
+                    throw "You do not have publishing rights in this group";
+            });
+        },
+
+        asMember: (obj, args, context) => {
+            return db_utils.isMember(context.user, args.groupUID).then(res => {
+                if(res)
+                    return {groupUID : args.groupUID};
+                else
+                    throw "You are  not a member of this group";
+            });
+        },
+        asViewer: (obj, args, context) => {
+            return db_utils.getGroupIfVisible(context.user, args.groupUID).then(res => {
+                if(res)
+                    return {groupUID : args.groupUID};
+                else
+                    throw "You are  not a member of this group";
+            });
+        }
+    },
+
+    AdminMutation: {
+        isAdmin: (obj, args, context) => {
+            return true;
+        
+        },
+        createSubgroup: (obj, args, context) => {
+            args.parentuid = obj.groupUID;
+            return db_utils.createSubgroup(context.user, args);
+        },
+
+        editGroup: (obj, args, context) => {
+            return null;
+        }
+    },
+
+    ViewerMutation: {
+        requestJoin: (obj, args, context) => {
+            console.log(obj);
+            return null;
+        }
+    },
+
+    Post: {
+        authors: (obj, args, context) => {
+            return knex.select().from('groups').whereIn('uid',obj.authors);
+        }
+    },
+
+    Group: {
+        __resolveType: (obj) => {
+            if(obj.school)
+                return "SimpleGroup";
+            else
+                return "MetaGroup";
+        }
+    },
+
+    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/schema.js b/src/graphql/schema.js
index fae29e1..8442987 100644
--- a/src/graphql/schema.js
+++ b/src/graphql/schema.js
@@ -2,284 +2,10 @@
  * @file Ce fichier génère le schéma GraphQL. C'est ici que les requêtes GraphQl sont résolues.
  * @author akka vodol
 */
+
 import { makeExecutableSchema } from 'graphql-tools';
-import { request } from 'https';
-import { assertBinaryExpression } from 'babel-types';
-import knex from '../../db/knex_router';
 import typeDefs from './typeDefs';
-
-import * as db_utils from './db_utils';
-
-/** 
- * @description Résolveurs des différentes requêtes GraphQL
-*/
-const resolvers = {
-    Query: {
-
-        asAdmin: (obj, args, context) => {
-            return db_utils.hasAdminRights(context.user, args.groupUID).then(res => {
-                if(res)
-                    return {groupUID : args.groupUID};
-                else
-                    throw "You do not have admin rights over this group";
-            });
-        },
-
-        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 {
-                    uid: args.uid,
-                    lastName: data.sn,
-                    givenName: data.givenName,
-                    birthdate: data.brBirthdate,
-                    groups: data.brMemberOf,
-                    mail: data.mail,
-                    phone: data.telephoneNumber,
-                    room: data.brRoom
-                };
-            };
-
-            const result = db_utils.renseignerSurUtilisateur(context.user, args.uid).then(res => {
-                return refactorer(res[0]);
-            });
-
-            return result;
-        },
-
-        searchTOL: (obj, args, context) => {
-            console.log(args);
-            return db_utils.repliquerTOLdesIds(context.user, {
-                givenName: args.givenName,
-                lastName: args.lastName,
-                nickname: args.nickname,
-                nationality: args.nationality,
-                school: args.school,
-                promotion: args.promotion,
-                groups: args.groups,
-                studies: args.studies,
-                sport: args.sport,
-                phone: args.phone,
-                mail: args.mail,
-                adress: args.adress,
-                ip: args.ip
-            });
-        }
-    },
-
-    AdminQuery: {
-        isAdmin: (obj, args, context) => {
-            return true;
-        },
-
-        allRequests: (obj, args, context) => {
-            console.log(obj);
-            return obj;
-        }
-    },
-
-    AllRequests: {
-        userJoinGroup : (obj, args, context) => {
-            return db_utils.getUserJoinGroupRequests(context.user, args.groupUID);
-        },
-    },
-
-    UserJoinGroup: {
-        user : (obj, args, context) => {
-            return db_utils.getUser(context.user, obj.useruid);
-            /*return db_utils.getUser(context.user, "quentin.gendre");
-            if(obj.useruid === "anatole.romon"){
-                return db_utils.getUser(context.user, "anatole.romon").then(res => {
-                    return db_utils.getUser(context.user, "quentin.gendre");
-                });
-            }else{
-                return new Promise( (resolve, reject) => {
-                    resolve({givenName : "patrick"});
-                });
-            }*/
-        }
-    },
-
-    GroupJoinEvent : {
-        event: (obj, args, context) => {
-            return db_utils.getEvent(context.user, obj.eventuid);
-        },
-        groupWantingToJoin: (obj, args, context) => {
-            return db_utils.getGroup(context.user, obj.senderuid);
-        }
-    },
-
-    YourGroupHostEvent : {
-        event: (obj, args, context) => {
-            return db_utils.getEvent(context.user, obj.eventuid);
-        },
-        sender: (obj, args, context) => {
-            return db_utils.getGroup(context.user, obj.senderuid);
-        }
-    },
-
-    /*User : {
-
-        givenName : (obj, args, context) => {
-            console.log("I got this")
-            return null;
-        },
-
-        lastName : (obj, args, context) => {
-            return null;
-        },
-
-        uid : (obj, args, context) => {
-            return null;
-        },
-
-        birthdate : (obj, args, context) => {
-            return null;
-        },
-
-        mail : (obj, args, context) => {
-            return null;
-        },
-
-        phone : (obj, args, context) => {
-            return null;
-        },
-
-        groups : (obj, args, context) => {
-            return null;
-        },
-
-        likes : (obj, args, context) => {
-            return null;
-        },
-
-        address : (obj, args, context) => {
-            return null;
-        }
-
-    },*/
-
-    Mutation: {
-        asAdmin: (obj, args, context) => {
-            return db_utils.hasAdminRights(context.user, args.groupUID).then(res => {
-                if(res)
-                    return {groupUID : args.groupUID};
-                else
-                    throw "You do not have admin rights over this group";
-            });
-        },
-
-        asSpeaker: (obj, args, context) => {
-            return db_utils.hasAdminRights(context.user, args.groupUID).then(res => {
-                if(res)
-                    return {groupUID : args.groupUID};
-                else
-                    throw "You do not have publishing rights in this group";
-            });
-        },
-
-        asMember: (obj, args, context) => {
-            return db_utils.isMember(context.user, args.groupUID).then(res => {
-                if(res)
-                    return {groupUID : args.groupUID};
-                else
-                    throw "You are  not a member of this group";
-            });
-        },
-        asViewer: (obj, args, context) => {
-            return db_utils.getGroupIfVisible(context.user, args.groupUID).then(res => {
-                if(res)
-                    return {groupUID : args.groupUID};
-                else
-                    throw "You are  not a member of this group";
-            });
-        }
-    },
-
-    AdminMutation: {
-        isAdmin: (obj, args, context) => {
-            return true;
-        
-        },
-        createSubgroup: (obj, args, context) => {
-            args.parentuid = obj.groupUID;
-            return db_utils.createSubgroup(context.user, args);
-        },
-
-        editGroup: (obj, args, context) => {
-            return null;
-        }
-    },
-
-    ViewerMutation: {
-        requestJoin: (obj, args, context) => {
-            console.log(obj);
-            return null;
-        }
-    },
-
-    Post: {
-        authors: (obj, args, context) => {
-            return knex.select().from('groups').whereIn('uid',obj.authors);
-        }
-    },
-
-    Group: {
-        __resolveType: (obj) => {
-            if(obj.isMeta)
-                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: {
-    }
-};
+import { resolvers } from './resolvers';
 
 const schema = makeExecutableSchema({
     typeDefs,
diff --git a/src/server.js b/src/server.js
index c0019c0..9a54338 100644
--- a/src/server.js
+++ b/src/server.js
@@ -22,7 +22,6 @@ import path from 'path';
 import cors from 'cors';
 
 const server = express();
-
 // on sait pas a quoi ca sert mais il parait que c'est utile
 server.use(bodyParser.json());
 server.use(bodyParser.urlencoded({
-- 
GitLab