Skip to content
Snippets Groups Projects
Commit dfafe1dd authored by Anatole ROMON's avatar Anatole ROMON
Browse files

Les resolvers peuvent maintenant trouver les auteurs d'un message

parent 2db1e2cc
No related branches found
No related tags found
No related merge requests found
exports.seed = function(knex, Promise) {
// Deletes ALL existing entries
return knex('posts').del()
return knex('announcements').del()
.then(function () {
const posts = [{
title: "Fissurer c'est bien",
......@@ -21,6 +21,6 @@ exports.seed = function(knex, Promise) {
authors: ['br']
}];
return knex('posts').insert(posts);
return knex('announcements').insert(posts);
});
};
exports.seed = function(knex, Promise) {
exports.seed = async function(knex, Promise) {
// Deletes ALL existing entries
return knex('events').del()
.then(function () {
await knex('events').del()
// 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
}
]);
});
await 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
}
]);
return knex('group_message_relationships').insert([
{
message : 42,
group : 'br',
status : 'host'
}
]);
};
......@@ -75,7 +75,7 @@ const quickPromise = (val) => {
/**
* @summary Renvoie le nom de la table dans laquelle il faut chercher en fonction de ce qu'on veut
* @desc a remplir
* @desc Ceci est obsolète, et devra être supprimé quand le code sera RAS
* @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.
*/
......@@ -385,9 +385,21 @@ export async function getMessageIfVisible(user, messageID){
return undefined;
}
export async function getMessageAuthor(user, messageID){
let GroupAuthors = await getGroupsFromCallbacks(user, qb => {
return qb.select({uid: 'group'}).from('group_message_relationships')
.where('message', messageID).whereIn('status', ['host', 'publish'])
})
let authorObject = Object()
if(GroupAuthors.length == 1)
authorObject.singleGroup = GroupAuthors[0]
else
authorObject.multipleGroups = GroupAuthors
return authorObject
}
export async function getMessageHosts(user, messageID){
export async function getMessageRecipient(user, messageID){
}
......
......@@ -65,13 +65,15 @@ export async function visibleEvents(user){
export async function messageHosts(user, messageID){
return function(query_builder){
return query_builder.select('group').as('uid').from('group_message_relationships')
.where('message', messageID);
return query_builder.select({uid : 'group'}).from('group_message_relationships')
.where('message', messageID).where('status', 'host');
};
}
//Give a group, get the users linked to that group
//Give a group, get the users linked to that group
/**
* @summary Renvoie un callback qui génère tous les membres d'un meta-groupe.
* @param {Object} user - Utilisateur effectuant la requête.
......
......@@ -50,13 +50,6 @@ export const resolvers = {
/*
* Message queries.
*/
allPosts: function(obj, args, context) {
return knex.select().from("posts");
},
post: function (obj, args, context) {
return knex.select().from("posts").where('id',args.id).then(res => res[0]);
},
allAnnouncements: function(obj, args, context) {
return knex.select().from("announcements");
......@@ -117,8 +110,11 @@ export const resolvers = {
res = res.concat(await connectors.getYourGroupHostEventRequests(user, args.from));
}
return res;
}
},
test: async function(obj, args, context){
return connectors.getSimpleGroup(context.user, "br")
}
},
......@@ -203,17 +199,12 @@ export const resolvers = {
},
Message: {
__resolveType: function(obj) {
return obj.type;
}
},
Post: {
authors: (obj, args, context) => {
return knex.select().from('groups').whereIn('uid', obj.authors);
}
},
......@@ -225,6 +216,14 @@ export const resolvers = {
return obj;
else
return null;
},
authors: async function (obj, args, context){
return connectors.getMessageAuthor(context.user, obj.id)
},
recipient: async function (obj, args, context){
return connectors.getMessageRecipient(context.user, obj.id)
}
},
......@@ -245,6 +244,14 @@ export const resolvers = {
return obj;
else
return null;
},
authors: async function (obj, args, context){
return connectors.getMessageAuthor(context.user, obj.id)
},
recipient: async function (obj, args, context){
return connectors.getMessageRecipient(context.user, obj.id)
}
},
......
......@@ -53,6 +53,8 @@ const RootTypes = `
allMembers(from : String!) : [Group]
# Viewer Queries
test : Author
}
......
......@@ -79,7 +79,34 @@ const Group = `
`;
const Message = `
# Tout type de message créé par un ou plusieurs groupes.
# Tout type de message adressé à un ou plusieurs groupes.
# Auteur possible d'un Message
# union AuthorUnion = Group | [Group] | User
# union RecipientUnion = Group | [Group]
# Les unions sont assez faibles dans GraphQL,
# elles n'acceptent pas les listes ni les interfaces
# Créer un nouveau type est la meilleur solution que j'ai trouvé
type Author {
singleGroup: Group
multipleGroups: [Group]
singleUser: User
}
type Recipient {
singleGroup: Group
multipleGroups: [Group]
}
# L'interface Message représente toute information que veut communiquer un groupe ou un user.
# Par choix de paradigme, tout Message est adressé à un (ou des) groupe(s).
# Les types implémentés sont divisés en deux :
# - les Message émanant d'un groupe : Announcement et Event, ainsi que Answer
# - les Message émanant d'un user : PrivatePost, ainsi que Question
interface Message {
id: ID!
# Titre du message
......@@ -87,8 +114,10 @@ const Message = `
content: String
createdAt: String!
updatedAt: String!
# Auteur(s) du message
authors: [Group]
authors: Author
recipient: Recipient
}
# Publication postée par un ou plusieurs groupes.
......@@ -97,8 +126,10 @@ const Message = `
title: String!
createdAt: String!
updatedAt: String!
authors: [Group]
content: String!
authors: Author
recipient: Recipient
}
# Annonce publique effectuée par un ou plusieurs groupes.
......@@ -107,11 +138,13 @@ const Message = `
title: String!
createdAt: String!
updatedAt: String!
authors: [Group]
content: String!
importance: Int
views: Int
forEvent : Event
authors: Author
recipient: Recipient
}
# Événements organisés par un ou plusieurs groupes.
......@@ -126,12 +159,14 @@ const Message = `
startTime: String!
endTime: String!
# Organisateurs
authors: [Group]
# Personnes qui participent à l'événement.
participatingGroups: [Group]
participatingUsers: [User]
content: String
asAnnouncement : Announcement
authors: Author
recipient: Recipient
}
`;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment