Newer
Older
/**
* @file Fonctions qui implémentent les requetes relatives aux requetes
* @author ofacklam
* @memberof GraphQL
*/
import { Group } from "../object_resolvers/groups/groups";
import { SimpleGroup } from "../object_resolvers/groups/simpleGroups";
import { MetaGroup } from "../object_resolvers/groups/metaGroups";
import { Request } from "../object_resolvers/requests/requests";
import { UserJoinGroup } from '../object_resolvers/requests/userJoinGroup';
import { GroupJoinMetagroup } from '../object_resolvers/requests/groupJoinMetagroup';
import { GroupCoauthorEvent } from '../object_resolvers/requests/groupCoauthorEvent';
import { User } from "../object_resolvers/users";
import { GroupCollection, GroupSet } from "../../utils/tools";
import { createSubgroupArgs, editGroupArgs } from "../typeDefs/queries";
import { InvalidGraphQLRequestError } from "apollo-server-core";
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
export class RequestModel {
/**
* @memberof GraphQL
* @class RequestModel
* @summary Requetes relatives aux requetes.
* @classdesc Cette classe contient les méthodes implémentant les requetes relatives aux requetes.
* @arg {string} contextUser - L'identifiant de l'utilisateur du 'context'
*/
constructor(contextUser: string) {
this.contextUser = contextUser;
}
protected contextUser: string;
/**
* @memberof GraphQL.RequestModel#
* @function getUserJoinGroupRequest
* @summary Fonction qui renvoie une requete UserJoinGroup donnée.
* @arg {number} rid - Identifiant demandé.
* @return {Promise(UserJoinGroup)} Renvoie la requete dont l'identifiant est 'rid'
* @async
* @rights admin du groupe destinaire ou le user émetteur
*/
async getUserJoinGroupRequest(rid: number): Promise<UserJoinGroup> {
return UserJoinGroup.tryCreate(rid);
}
/**
* @memberof GraphQL.RequestModel#
* @function getGroupJoinMetagroupRequest
* @summary Fonction qui renvoie une requete GroupJoinMetagroup donnée.
* @arg {number} rid - Identifiant demandé.
* @return {Promise(GroupJoinMetagroup)} Renvoie la requete dont l'identifiant est 'rid'
* @async
* @rights admin du groupe émetteur ou destinataire
*/
async getGroupJoinMetagroupRequest(rid: number): Promise<GroupJoinMetagroup> {
return GroupJoinMetagroup.tryCreate(rid);
}
/**
* @memberof GraphQL.RequestModel#
* @function getGroupCoauthorEventRequest
* @summary Fonction qui renvoie une requete GroupCoauthorEvent donnée.
* @arg {number} rid - Identifiant demandé.
* @return {Promise(GroupCoauthorEvent)} Renvoie la requete dont l'identifiant est 'rid'
* @async
* @rights admin du groupe émetteur ou destinataire
*/
async getGroupCoauthorEventRequest(rid: number): Promise<GroupCoauthorEvent> {
return GroupCoauthorEvent.tryCreate(rid);
}
/**
* @memberof GraphQL.RequestModel#
* @function getRequestsToGroup
* @summary Fonction qui renvoie toutes les requetes destinées a ce groupe.
* @arg {string} gid - Identifiant du groupe.
* @return {Promise(Request[])} Renvoie la liste des requetes destinées a ce groupe.
* @async
* @rights admin du groupe
*/
async getRequestsToGroup(gid: string): Promise<Request[]> {
let r1 = await this.getUserJoinGroupRequestsToGroup(gid);
let r2 = await this.getGroupJoinMetagroupRequestsToGroup(gid);
let r3 = await this.getGroupCoauthorEventRequestsToGroup(gid);
let r: Request[];
return r.concat(r1, r2, r3);
}
/**
* @memberof GraphQL.RequestModel#
* @function getUserJoinGroupRequestsToGroup
* @summary Fonction qui renvoie toutes les requetes UserJoinGroup destinées a ce groupe.
* @arg {string} gid - Identifiant du groupe.
* @return {Promise(UserJoinGroup[])} Renvoie la liste des requetes destinées a ce groupe.
* @async
* @rights admin du groupe
*/
async getUserJoinGroupRequestsToGroup(gid: string): Promise<UserJoinGroup[]> {
let result = await knex.select('rid').from('requests_user_join_group').where('request_to', gid);
return result.map(obj => new UserJoinGroup(obj.rid));
}
/**
* @memberof GraphQL.RequestModel#
* @function getGroupJoinMetagroupRequestsToGroup
* @summary Fonction qui renvoie toutes les requetes GroupJoinMetagroup destinées a ce groupe.
* @arg {string} gid - Identifiant du groupe.
* @return {Promise(GroupJoinMetagroup[])} Renvoie la liste des requetes destinées a ce groupe.
* @async
* @rights admin du groupe
*/
async getGroupJoinMetagroupRequestsToGroup(gid: string): Promise<GroupJoinMetagroup[]> {
let result = await knex.select('rid').from('requests_group_join_metagroup').where('request_to', gid);
return result.map(obj => new GroupJoinMetagroup(obj.rid));
}
/**
* @memberof GraphQL.RequestModel#
* @function getGroupCoauthorEventRequestsToGroup
* @summary Fonction qui renvoie toutes les requetes GroupCoauthorEvent destinées a ce groupe.
* @arg {string} gid - Identifiant du groupe.
* @return {Promise(GroupCoauthorEvent[])} Renvoie la liste des requetes destinées a ce groupe.
* @async
* @rights admin du groupe
*/
async getGroupCoauthorEventRequestsToGroup(gid: string): Promise<GroupCoauthorEvent[]> {
let result = await knex.select('rid').from('requests_group_coauthor_event').where('request_to', gid);
return result.map(obj => new GroupCoauthorEvent(obj.rid));
}
/**
* @memberof GraphQL.RequestModel#
* @function userRequestJoinGroup
* @summary Fonction pour demander a devenir membre
* @arg {string} gid - Identifiant du groupe.
* @arg {string} comment - Commentaire supplémentaire
* @return {Promise(UserJoinGroup)} Renvoie la requete créée.
* @async
* @rights viewer du groupe
*/
async userRequestJoinGroup(gid: string, comment: string): Promise<UserJoinGroup> {
let res = await knex("requests_user_join_group").insert({request_to : gid, request_from : this.contextUser, request_comment : comment}, ['rid']);
return this.getUserJoinGroupRequest(res[0]["rid"]);
}
/**
* @memberof GraphQL.RequestModel#
* @function groupRequestCoauthorEvent
* @summary Fonction pour demander a co-organiser un évenement
* @arg {string} from_gid - Identifiant du groupe émetteur.
* @arg {string} to_gid - Identifiant du groupe destinataire.
* @arg {number} event_mid - Identifiant de l'évenement considéré.
* @arg {string} comment - Commentaire supplémentaire.
* @return {Promise(GroupCoauthorEvent)} Renvoie la requete créée.
* @async
* @rights speaker du groupe émetteur
*/
async groupRequestCoauthorEvent(from_gid: string, to_gid: string, event_mid: number, comment: string): Promise<GroupCoauthorEvent> {
//TODO : Vérifier que l'évenement est bien organisé par le groupe destinataire (to_gid) !!! => sinon erreur
if ((await knex.select("mid","gid").from("events_authors").where({mid : event_mid, gid: to_gid})).length >= 1)
{
let res = await knex("requests_group_coauthor_event").insert({request_to : to_gid, request_from : from_gid, request_comment : comment, for_event : event_mid}, ['rid']);
return this.getGroupCoauthorEventRequest(res[0]["rid"]);
} else {
throw new InvalidGraphQLRequestError("The event has not been organised by the recipient of the request")
}
}
/**
* @memberof GraphQL.RequestModel#
* @function groupRequestJoinMetagroup
* @summary Fonction pour demander a rejoindre un méta-groupe
* @arg {string} from_gid - Identifiant du groupe émetteur.
* @arg {string} to_gid - Identifiant du méta-groupe destinataire.
* @arg {string} comment - Commentaire supplémentaire.
* @return {Promise(GroupJoinMetagroup)} Renvoie la requete créée.
* @async
* @rights admin du groupe émetteur
*/
async groupRequestJoinMetagroup(from_gid: string, to_gid: string, comment: string): Promise<GroupJoinMetagroup> {
let res = await knex("requests_group_join_metagroup").insert({request_to : to_gid, request_from : from_gid, request_comment : comment}, ['rid']);
return this.getGroupJoinMetagroupRequest(res[0]["rid"]);
}
/**
* @memberof GraphQL.RequestModel#
* @function acceptUserJoinRequest
* @summary Fonction pour accepter une UserJoinGroup
* @arg {UserJoinGroup} req - L'objet requete.
* @arg {string} comment - Commentaire supplémentaire.
* @return {Promise(boolean)} Renvoie true si modification réussie.
* @async
* @rights admin du groupe destinataire
*/
async acceptUserJoinRequest(req: UserJoinGroup, comment: string): Promise<boolean> {
throw "Not implemented";
}
/**
* @memberof GraphQL.RequestModel#
* @function refuseUserJoinRequest
* @summary Fonction pour refuser une UserJoinGroup
* @arg {UserJoinGroup} req - L'objet requete.
* @arg {string} comment - Commentaire supplémentaire.
* @return {Promise(boolean)} Renvoie true si modification réussie.
* @async
* @rights admin du groupe destinataire
*/
async refuseUserJoinRequest(req: UserJoinGroup, comment: string): Promise<boolean> {
throw "Not implemented";
}
/**
* @memberof GraphQL.RequestModel#
* @function acceptGroupJoinRequest
* @summary Fonction pour accepter une GroupJoinMetagroup
* @arg {GroupJoinMetagroup} req - L'objet requete.
* @arg {string} comment - Commentaire supplémentaire.
* @return {Promise(boolean)} Renvoie true si modification réussie.
* @async
* @rights admin du groupe destinataire
*/
async acceptGroupJoinRequest(req: GroupJoinMetagroup, comment: string): Promise<boolean> {
throw "Not implemented";
}
/**
* @memberof GraphQL.RequestModel#
* @function refuseGroupJoinRequest
* @summary Fonction pour refuser une GroupJoinMetagroup
* @arg {GroupJoinMetagroup} req - L'objet requete.
* @arg {string} comment - Commentaire supplémentaire.
* @return {Promise(boolean)} Renvoie true si modification réussie.
* @async
* @rights admin du groupe destinataire
*/
async refuseGroupJoinRequest(req: GroupJoinMetagroup, comment: string): Promise<boolean> {
throw "Not implemented";
}
/**
* @memberof GraphQL.RequestModel#
* @function acceptGroupCoauthorEventRequest
* @summary Fonction pour accepter une GroupCoauthorEvent
* @arg {GroupCoauthorEvent} req - L'objet requete.
* @arg {string} comment - Commentaire supplémentaire.
* @return {Promise(boolean)} Renvoie true si modification réussie.
* @async
* @rights admin du groupe destinataire
*/
async acceptGroupCoauthorEventRequest(req: GroupCoauthorEvent, comment: string): Promise<boolean> {
/*let request = await knex('group_join_event').select().where('id', requestID);
if (!request.length)
return false;
let group = request[0].senderuid;
let event = request[0].eventuid;
await knex('group_participation').insert({
group: group,
message: event,
status: "join"
});
await knex('group_join_event').where('id', requestID).del();
return;*/
}
/**
* @memberof GraphQL.RequestModel#
* @function refuseGroupCoauthorEventRequest
* @summary Fonction pour refuser une GroupCoauthorEvent
* @arg {GroupCoauthorEvent} req - L'objet requete.
* @arg {string} comment - Commentaire supplémentaire.
* @return {Promise(boolean)} Renvoie true si modification réussie.
* @async
* @rights admin du groupe destinataire
*/
async refuseGroupCoauthorEventRequest(req: GroupCoauthorEvent, comment: string): Promise<boolean> {
/*await knex('group_join_event').where('id', requestID).del();
//KNEX RENVOIE LE NOMBRE DE LIGNES AFFECTÉES -> il faut l'utiliser pour la valeur de retour
return true;*/