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