From a2917456944fcd69d09dde67077cc3cf008b54b0 Mon Sep 17 00:00:00 2001
From: anatole <anatole.romon@polytechnique.edu>
Date: Sun, 4 Mar 2018 18:52:01 +0100
Subject: [PATCH] resolution des query allRequests

---
 db/seeds/01_create_groups.js | 10 ++++-
 db/seeds/03_make_requests.js | 48 +++++++++++++++--------
 src/graphql/db_utils.js      | 74 +++++++++++++++++++++++++++++-------
 src/graphql/resolvers.js     | 10 ++++-
 4 files changed, 111 insertions(+), 31 deletions(-)

diff --git a/db/seeds/01_create_groups.js b/db/seeds/01_create_groups.js
index 26b1012..ee9c1ce 100644
--- a/db/seeds/01_create_groups.js
+++ b/db/seeds/01_create_groups.js
@@ -46,7 +46,15 @@ exports.seed = function(knex, Promise) {
           website: 'http://bde.ensta-paristech.fr/',
           school: 'ensta',
           type : 'simple'
-        }
+        },
+        {
+          name: 'Subaïsse',
+          uid: 'subaisse',
+          description: 'Le Binet de ceux qui subissent',
+          school: 'polytechnique',
+          parentuid: 'kes',
+          type : 'simple'
+      },
       ];
 
       return knex('simple_groups').insert(simple_groups);
diff --git a/db/seeds/03_make_requests.js b/db/seeds/03_make_requests.js
index 2cb07fa..aceaf47 100644
--- a/db/seeds/03_make_requests.js
+++ b/db/seeds/03_make_requests.js
@@ -2,19 +2,37 @@
 exports.seed = function(knex, Promise) {
   // Deletes ALL existing entries
   return knex('user_join_group').del()
-    .then(function () {
-      // Inserts seed entries
-      return knex('user_join_group').insert([
-        { id: 1, 
-          recipient: 'br',
-          message: "C'est ici pour développer sigma ?",
-          useruid: "anatole.romon"
-        },
-        { id: 2, 
-          recipient: 'br',
-          message: "Bonjour, je cherche le binet subaisse",
-          useruid: "quentin.gendre"
-        }
-      ]);
-    });
+  .then(function () {
+    // Inserts seed entries
+  return knex('user_join_group').insert([
+    { id: 1, 
+      recipient: 'br',
+      message: "C'est ici pour développer sigma ?",
+      useruid: "anatole.romon"
+    },
+    { id: 2, 
+      recipient: 'br',
+      message: "Bonjour, je cherche le binet subaisse",
+      useruid: "quentin.gendre"
+    },
+    {id : 3,
+    recipient: 'jtx',
+    message: "Quand je serais grand je serais cinéaste !",
+    useruid: "anatole.romon"
+  }
+  ]).then(() => {
+  return knex('group_join_event').del()
+  .then(function (){
+  return knex('group_join_event').insert([
+    {
+      id : 4,
+      recipient : "br",
+      message : "nous aussi on veut coder sigma",
+      eventuid : 42,
+      senderuid : "subaisse"
+    }
+  ]);
+  });
+  });
+  });
 };
diff --git a/src/graphql/db_utils.js b/src/graphql/db_utils.js
index e550585..52943ea 100644
--- a/src/graphql/db_utils.js
+++ b/src/graphql/db_utils.js
@@ -161,7 +161,6 @@ export const getGroupIfVisible = (user, groupUID, wantedType="all") => {
     });
 };
 
-
 /**
  * @summary Renvoie tous les groupes visibles par l'utilisateur user
  * @desc Cette fonction effectue une requête knex. Elle gère l'arête de parenté.
@@ -178,6 +177,22 @@ export const getAllVisibleGroups = (user, wantedType="all") => {
     });
 };
 
+
+/**
+ * @summary Renvoie un groupe
+ * @desc Cette fonction ne teste pas la visibilité d'un groupe. 
+ * Elle ne doit être utilisée que si on est certain que l'utilisateur a la visibilité sur le groupe
+ * @arg {Object} user - Objet contenant un attribut *uid* de type *string*. User représente l'utilisateur qui a effectué la requête. 
+ * @arg {String} wantedType - Un string indiquant le type de groupe qu'on veut. Peut être *"simple"*, *"meta"* ou *"all"*. 
+ * @return {Promise} Retour de requête knex. Liste de tous les groupes que l'utilisateur a le droit de voire.
+ */
+export const getGroup = (user, groupUID, wantedType="all") => {
+    let table_name = getGroupTableName(wantedType);
+    return knex.select().from(table_name).where('uid', groupUID).then(res => {
+        return res[0];
+    });
+};
+
 /**
  * @summary Teste si un utilisateur est membre d'un groupe
  * @arg {Object} user - Objet contenant un attribut *uid* de type *string*. User représente l'utilisateur qui a effectué la requête. 
@@ -255,10 +270,51 @@ export const createGroupIfLegal = (user, args) => {
     });
 };
 
+/**
+ * @summary Renvoie toues les requêtes de type UserJoinGroup 
+ * @desc Une requête UserJoinGroup est envoyée par un utilisateur à un groupe, 
+ * pour demander à rejoindre ce groupe
+ * @arg {Object} user - L'utilisateur qui effectue la requête. 
+ * @arg {String} args - L'identifiant du groupe qui reçoit la requête. 
+ * @return {Promise(Object)} Retour de requête knex. Toutes les requêtes destinées au groupe.
+ */
 export const getUserJoinGroupRequests = (user, recipientUID) => {
-    return knex('user_join_group').select(/*'id', 'useruid', 'message'*/)/*.where('recipient', recipientUID)*/;
+    return knex.select('id', 'useruid', 'message').from('user_join_group')
+        .where('recipient', recipientUID);
+};
+
+/**
+ * @summary Renvoie toues les requêtes de type GroupJoinEvent 
+ * @desc Une requête UserJoinGroup est envoyée par un groupe à un évènement (donc aux administrateurs de l'évènement), 
+ * pour demander à rejoindre cet évènement.
+ * Remarque : toutes les requêtes ont pour le moment un attribut recipient, 
+ * mais ici il ne sera a terme pas utilisé.
+ * @arg {Object} user - L'utilisateur qui effectue la requête. 
+ * @arg {String} args - L'identifiant du groupe qui reçoit la requête. 
+ * @return {Promise(Object)} Retour de requête knex. Toutes les requêtes destinées au groupe.
+ */
+export const getGroupJoinEventRequests = (user, recipientUID) => {
+    return knex.select('id', 'senderuid', 'eventuid', 'message').from('group_join_event')
+        .where('recipient', recipientUID);
 };
 
+
+/**
+ * @summary Renvoie toues les requêtes de type GroupJoinEvent 
+ * @desc Une requête UserJoinGroup est envoyée par un groupe à un évènement (donc aux administrateurs de l'évènement), 
+ * pour demander à rejoindre cet évènement.
+ * Remarque : toutes les requêtes ont pour le moment un attribut recipient, 
+ * mais ici il ne sera a terme pas utilisé.
+ * @arg {Object} user - L'utilisateur qui effectue la requête. 
+ * @arg {String} args - L'identifiant du groupe qui reçoit la requête. 
+ * @return {Promise(Object)} Retour de requête knex. Toutes les requêtes destinées au groupe.
+ */
+export const getYourGroupHostEventRequests = (user, recipientUID) => {
+    return knex.select('id', 'senderuid', 'eventuid', 'message').from('your_group_host_event')
+        .where('recipient', recipientUID);
+};
+
+
 //Don't forget the argument user is the guy who makes the request, not the user we want
 export const getUser = (user, userUID) => { 
     return new Promise( (resolve, reject) => {
@@ -289,19 +345,9 @@ export const getUser = (user, userUID) => {
     });*/
 };
 
-export const getEvent = (user, eventID) => {
-    return quickPromise(null);
-};
-
-export const getGroup = (user, groupUID) => {
-    return quickPromise(null);
-};
+//TODO : empty functions to be filled
 
-export const getSimpleGroup = (user, groupUID) => {
-    return quickPromise(null);
-};
-
-export const getMetaGroup = (user, groupUID) => {
+export const getEvent = (user, eventID) => {
     return quickPromise(null);
 };
 
diff --git a/src/graphql/resolvers.js b/src/graphql/resolvers.js
index aee354d..34086e4 100644
--- a/src/graphql/resolvers.js
+++ b/src/graphql/resolvers.js
@@ -117,7 +117,15 @@ export const resolvers = {
 
     AllRequests: {
         userJoinGroup : (obj, args, context) => {
-            return db_utils.getUserJoinGroupRequests(context.user, args.groupUID);
+            return db_utils.getUserJoinGroupRequests(context.user, obj.groupUID);
+        },
+
+        groupJoinEvent : (obj, args, context) => {
+            return db_utils.getGroupJoinEventRequests(context.user, obj.groupUID);
+        },
+
+        yourGroupHostEvent : (obj, args, context) => {
+            return db_utils.getYourGroupHostEventRequests(context.user, obj.groupUID);
         },
     },
 
-- 
GitLab