From 38eaee65fc69dcbc98f410c591ae9cbaf8e5ef7b Mon Sep 17 00:00:00 2001 From: anatole <anatole.romon@polytechnique.edu> Date: Sat, 10 Mar 2018 19:32:08 +0100 Subject: [PATCH] plus de resolvers --- db/seeds/07_make_event.js | 19 +++++ src/graphql/connectors/connectors.js | 112 +++++++++++++++++++++++++-- src/graphql/resolvers.js | 62 +++++++++++---- src/graphql/typeDefs/actions.js | 10 ++- src/graphql/typeDefs/objects.js | 6 -- 5 files changed, 178 insertions(+), 31 deletions(-) create mode 100644 db/seeds/07_make_event.js diff --git a/db/seeds/07_make_event.js b/db/seeds/07_make_event.js new file mode 100644 index 0000000..f0439c8 --- /dev/null +++ b/db/seeds/07_make_event.js @@ -0,0 +1,19 @@ + +exports.seed = function(knex, Promise) { + // Deletes ALL existing entries + return knex('events').del() + .then(function () { + // Inserts seed entries + return knex('events').insert([ + { + id : 42, + title : "coder sigma", + content : "Tous ensemble pour faire du Dev. Que demander de plus ? (a part du sommeil)", + start_time : knex.fn.now(), + end_time : knex.fn.now(), + authors : [], + is_announcement : false + } + ]); + }); +}; diff --git a/src/graphql/connectors/connectors.js b/src/graphql/connectors/connectors.js index 4d721e5..7ec2692 100644 --- a/src/graphql/connectors/connectors.js +++ b/src/graphql/connectors/connectors.js @@ -266,9 +266,13 @@ export async function createGroupIfLegal(user, args){ * @return {Promise(Object)} Retour de requête knex. Toutes les requêtes destinées au groupe. * @rights admin(recipientUID) */ -export function getUserJoinGroupRequests(user, recipientUID){ - return knex.select('id', 'useruid', 'message').from('user_join_group') +export async function getUserJoinGroupRequests(user, recipientUID){ + let result = knex.select('id', 'useruid', 'message').from('user_join_group') .where('recipient', recipientUID); + return result.map( obj => { + obj.type = "UserJoinGroup"; + return obj; + }); } /** @@ -282,9 +286,13 @@ export function getUserJoinGroupRequests(user, recipientUID){ * @return {Promise(Object)} Retour de requête knex. Toutes les requêtes destinées au groupe. * @rights speaker(recipientUID) */ -export function getGroupJoinEventRequests(user, recipientUID){ - return knex.select('id', 'senderuid', 'eventuid', 'message').from('group_join_event') +export async function getGroupJoinEventRequests(user, recipientUID){ + let result = await knex.select('id', 'senderuid', 'eventuid', 'message').from('group_join_event') .where('recipient', recipientUID); + return result.map( obj => { + obj.type = "GroupJoinEvent"; + return obj; + }); } @@ -299,10 +307,14 @@ export function getGroupJoinEventRequests(user, recipientUID){ * @return {Promise(Object)} Retour de requête knex. Toutes les requêtes destinées au groupe. * @rights speaker(recipientUID) */ -export const getYourGroupHostEventRequests = (user, recipientUID) => { - return knex.select('id', 'senderuid', 'eventuid', 'message').from('your_group_host_event') +export async function getYourGroupHostEventRequests(user, recipientUID){ + let result = await knex.select('id', 'senderuid', 'eventuid', 'message').from('your_group_host_event') .where('recipient', recipientUID); -}; + return result.map( obj => { + obj.type = "YourGroupHostEvent"; + return obj; + }); +} //Don't forget the argument user is the guy who makes the request, not the user we want @@ -426,6 +438,91 @@ export const getMetaGroup = (user, groupUID) => { return knex.select().from('meta_groups').where('uid',groupUID).then(results => results [0]); }; +export async function getEvent(user, eventID){ + console.log(eventID); + let event_list = await knex('events').select().where('id', eventID); + console.log(event_list); + return event_list[0]; +} + +/** + * @summary Refuse une requête d'un groupe voulant rejoindre un évènement + * @arg {Object} user - Représente l'utilisateur qui a effectué la requête. + * @arg {Int} requestID - L'id de la requête à refuser. + * @return {Promise(Boolean)} Vrai si l'opération a réussie; + * @rights admin(request.recipient) + */ +export async function denyGroupJoinEventRequest(user, requestID){ + await knex('group_join_event').where('id', requestID).del(); + return true; +} + +/** + * @summary Refuse une requête d'un groupe voulant rejoindre un évènement + * @arg {Object} user - Représente l'utilisateur qui a effectué la requête. + * @arg {Int} requestID - L'id de la requête à refuser. + * @return {Promise(Boolean)} Vrai si l'opération a réussie; + * @rights admin(request.recipient) + */ +export async function acceptGroupJoinEventRequest(user, requestID){ + let request = await knex('group_join_event').select().where('id', requestID); + if( !request) + return false; + await knex('group_join_event').where('id', requestID).del(); + let group = request[0].senderuid; + let event = request[0].eventuid; + await knex('group_participation').insert({ + group : group, + message : event, + status : "join" + }); + return; + +} + + +/** + * @summary Refuse une requête d'un groupe voulant rejoindre un évènement + * @arg {Object} user - Représente l'utilisateur qui a effectué la requête. + * @arg {Int} requestID - L'id de la requête à refuser. + * @return {Promise(Boolean)} Vrai si l'opération a réussie; + * @rights admin(request.recipient) + */ +export async function denyYourGroupHostEventRequest(user, requestID){ + await knex('your_group_host_event').where('id', requestID).del(); + return true; +} + +/** + * @summary Refuse une requête d'un groupe voulant rejoindre un évènement + * @arg {Object} user - Représente l'utilisateur qui a effectué la requête. + * @arg {Int} requestID - L'id de la requête à refuser. + * @return {Promise(Boolean)} Vrai si l'opération a réussie; + * @rights admin(request.recipient) + */ +export async function acceptYourGroupHostEventRequest(user, requestID){ + let request = await knex('your_group_host_event').select().where('id', requestID); + if( !request) + return false; + await knex('group_join_event').where('id', requestID).del(); + let group = request[0].recipient; + let event = request[0].eventuid; + await knex('group_message_relationships').insert({ + group : group, + message : event, + status : "host" + }); + return; + +} + +export function takeAdminRights(user, groupUID, justification){ + return knex('taken_rights').insert({ + user_uid : user.uid, + group_uid : groupUID, + justification : justification + }); +} /** * @summary Renvoie les membres d'un groupe quelquonque. @@ -491,7 +588,6 @@ export async function getGroupsFromCallbacks(user, cbList){ return all_simple_groups.concat(all_meta_groups); } - /* * réflexion sur une façon possible de gérer les utilisateurs sans en demander trop à LDAP * Sans utilité pour le moment, ne faites pas attention diff --git a/src/graphql/resolvers.js b/src/graphql/resolvers.js index a55601e..6682c19 100644 --- a/src/graphql/resolvers.js +++ b/src/graphql/resolvers.js @@ -110,9 +110,11 @@ export const resolvers = { return true; }, - allRequests: (obj, args, context) => { - console.log(obj); - return obj; + allRequests: async function(obj, args, context){ + let ujg_requests = await connectors.getUserJoinGroupRequests(context.user, obj.groupUID); + let gje_requests = await connectors.getGroupJoinEventRequests(context.user, obj.groupUID); + let yghe_requests = await connectors.getYourGroupHostEventRequests(context.user, obj.groupUID); + return ujg_requests.concat(gje_requests).concat(yghe_requests); } }, @@ -128,19 +130,19 @@ export const resolvers = { } }, - // @rights admin(obj.groupUID) - AllRequests: { - userJoinGroup : (obj, args, context) => { - return connectors.getUserJoinGroupRequests(context.user, obj.groupUID); - }, + SpeakerQuery: { - groupJoinEvent : (obj, args, context) => { - return connectors.getGroupJoinEventRequests(context.user, obj.groupUID); - }, + allRequests: async function(obj, args, context){ + let gje_requests = await connectors.getGroupJoinEventRequests(context.user, obj.groupUID); + let yghe_requests = await connectors.getYourGroupHostEventRequests(context.user, obj.groupUID); + return gje_requests.concat(yghe_requests); + } + }, - yourGroupHostEvent : (obj, args, context) => { - return connectors.getYourGroupHostEventRequests(context.user, obj.groupUID); - }, + Request : { + __resolveType : function(obj){ + return obj.type; + } }, // @rights admin(obj.groupUID) @@ -196,6 +198,11 @@ export const resolvers = { // @rights user Mutation: { + + asSuperviser : function (obj, args, context){ + return {groupUID : args.groupUID, justification : "kes"}; + }, + asAdmin: (obj, args, context) => { return connectors.hasAdminRights(context.user, args.groupUID).then(res => { if(res) @@ -232,7 +239,21 @@ export const resolvers = { } }, - // @rights admin(group.UID) + // @rights : superviser(obj.groupUID) + SuperviserMutation: { + + runAdminOperation : function (obj, args, context){ + return obj; + }, + + takeAdminRights : async function(obj, args, context){ + console.log(obj); + await connectors.takeAdminRights(context.user, obj.groupUID, obj.justification); + return connectors.getGroup(context.user, obj.groupUID); + } + }, + + // @rights admin(obj.groupUID) AdminMutation: { isAdmin: (obj, args, context) => { return true; @@ -248,7 +269,7 @@ export const resolvers = { } }, - // @rights viewer(group.UID) + // @rights viewer(obj.groupUID) ViewerMutation: { requestJoin: (obj, args, context) => { console.log(obj); @@ -282,6 +303,15 @@ export const resolvers = { }, Event: { + + startTime : function(obj){ + return obj.start_time; + }, + + endTime : function(obj){ + return obj.end_time; + }, + asAnnouncement : function(obj, args, context){ // le champ is_announcement indique si il existe une annonce qui va avec l'évènement // une ligne de la bdd events peut résoudre comme évènement ou comme annonce diff --git a/src/graphql/typeDefs/actions.js b/src/graphql/typeDefs/actions.js index 392c1ca..d0d4bd7 100644 --- a/src/graphql/typeDefs/actions.js +++ b/src/graphql/typeDefs/actions.js @@ -13,6 +13,7 @@ const RootTypes = ` } type Mutation { + asSuperviser(groupUID: String): SuperviserMutation asAdmin(groupUID: String): AdminMutation asSpeaker(groupUID: String): SpeakerMutation asMember(groupUID: String): MemberMutation @@ -23,6 +24,12 @@ const RootTypes = ` `; const subMutations = ` + + type SuperviserMutation { + runAdminOperation : AdminMutation + takeAdminRights : Group + } + type AdminMutation { isAdmin: Boolean @@ -115,11 +122,12 @@ const subQueries = ` # Requête à la base de donnée nécessitant d'être administrateur. type AdminQuery{ isAdmin: Boolean - allRequests : AllRequests + allRequests : [Request] } type SpeakerQuery{ isSpeaker: Boolean + allRequests : [Request] } type MemberQuery{ diff --git a/src/graphql/typeDefs/objects.js b/src/graphql/typeDefs/objects.js index 3df330f..03b46e5 100644 --- a/src/graphql/typeDefs/objects.js +++ b/src/graphql/typeDefs/objects.js @@ -142,12 +142,6 @@ const Event = ` `; const Requests = ` - # Demandes effectuées au groupe. - type AllRequests { - userJoinGroup: [UserJoinGroup] - groupJoinEvent: [GroupJoinEvent] - yourGroupHostEvent: [YourGroupHostEvent] - } interface Request { # ID de la demande -- GitLab