diff --git a/src/graphql/db_utils.js b/src/graphql/db_utils.js
index e9e094026ee6dee13f6e8e8b5bcbc3d1de7b3002..e550585944069bf6faa937e14f9f6c0405f91bfa 100644
--- a/src/graphql/db_utils.js
+++ b/src/graphql/db_utils.js
@@ -27,7 +27,7 @@ const quickPromise = (val) => {
  * @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.)
+ * (Par exemple, si on dispose d'un retour de BDD pour ce groupe. Le champ 'type' 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
@@ -118,38 +118,62 @@ export const getVisibleGroupCallback = (user) => {
                     }
                 );
             return directly_visible_simple_groups(global_query_builder);
-        }
+        };
     });
     
 };
 
+/**
+ * @summary Renvoie le nom de la table dans laquelle il faut chercher en fonction de ce qu'on veut
+ * @desc a remplir
+ * @arg {String} wantedType - Un string indiquant le type de groupe qu'on veut. Peut être *"simple"*, *"meta"* ou *"all"*. 
+ * @return {String} Le nom de la table dans laquelle la requète doit être effectuée.
+ */
+function getGroupTableName(wantedType){
+    switch(wantedType){
+    case "simple":
+        return "simple_groups";
+    case "meta":
+        return "meta_groups";
+    case "all":
+        return "groups";
+    default:
+        throw "invalid type request : " + wantedType + "is not a valid group type";
+    }
+}
+
 /**
  * @summary Renvoie un unique groupe, ssi ce groupe est visible par l'utilisateur
  * @desc Actuellement, la fonction effectue la même requête que *getAllVisibleGroups* et restreint au groupe demandé. Cette fonction peut être implémentée de manière plus efficace et plus chiante.
  * @arg {Object} user - Objet contenant un attribut *uid* de type *string*. User représente l'utilisateur qui a effectué la requête. 
  * @arg {String} uid - uid du groupe que l'on veut voire. 
+ * @arg {String} wantedType - Un string indiquant le type de groupe qu'on veut. Peut être *"simple"*, *"meta"* ou *"all"*. 
  * @return {Promise(group)} Retour de requête knex. Le groupe demandé, si l'utilisateur a le droit de la voire.
  */
-export const getGroupIfVisible = (user, groupUID) => {
+export const getGroupIfVisible = (user, groupUID, wantedType="all") => {
+    var group_table_name = getGroupTableName(wantedType);
     return getVisibleGroupCallback(user).then(visible_groups => {
-        return knex.with('visible_groups', visible_groups).select('groups.*').from('groups').innerJoin('visible_groups', function (){
-            this.on('visible_groups.uid', '=', 'groups.uid');
-        }).where('groups.uid', groupUID).then(res => {
+        return knex.with('visible_groups', visible_groups).select().from(group_table_name).innerJoin('visible_groups', function (){
+            this.on('visible_groups.uid', '=', group_table_name + '.uid');
+        }).where(group_table_name + '.uid', groupUID).then(res => {
             return res[0];
         });
     });
 };
 
+
 /**
  * @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é.
  * @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 getAllVisibleGroups = (user) => {
+export const getAllVisibleGroups = (user, wantedType="all") => {
+    var group_table_name = getGroupTableName(wantedType);
     return getVisibleGroupCallback(user).then(visible_groups => {
-        return knex.with('visible_groups', visible_groups).select('groups.*').from('groups').innerJoin('visible_groups', function (){
-            this.on('visible_groups.uid', '=', 'groups.uid');
+        return knex.with('visible_groups', visible_groups).select().from(group_table_name).innerJoin('visible_groups', function (){
+            this.on('visible_groups.uid', '=', group_table_name + '.uid');
         });
     });
 };
diff --git a/src/graphql/resolvers.js b/src/graphql/resolvers.js
index 0a179394a3b0d6601ccab95d9a5c6e6099d7f6f4..aee354d4948dce8e2644117fd13615543f7fe915 100644
--- a/src/graphql/resolvers.js
+++ b/src/graphql/resolvers.js
@@ -45,7 +45,10 @@ export const resolvers = {
             return db_utils.getGroupIfVisible(context.user, args.uid);
         },
         simpleGroup: (obj, args, context) => {
-            return db_utils.getGroupIfVisible(context.user, args.uid);
+            return db_utils.getGroupIfVisible(context.user, args.uid, "simple");
+        },
+        metaGroup: (obj, args, context) => {
+            return db_utils.getGroupIfVisible(context.user, args.uid, "meta");
         }
     },
 
@@ -260,10 +263,15 @@ export const resolvers = {
 
     Group: {
         __resolveType: (obj) => {
-            if(obj.school)
+            
+            switch(obj.type){
+            case "simple":
                 return "SimpleGroup";
-            else
+            case "meta":
                 return "MetaGroup";
+            default:
+                return undefined;
+            }
         }
     },