Forked from an inaccessible project.
-
Guilhem ROY authored
Implementation des getAllMessages et compagnie
Guilhem ROY authoredImplementation des getAllMessages et compagnie
messageModel.ts 21.76 KiB
/**
* @file Fonctions qui implémentent les requetes relatives aux messages
* @author ofacklam
* @memberof GraphQL
*/
import { Announcement, Event, PrivatePost, Question, Answer, Message } from "../object_resolvers/messages";
import knex from "../../../db/knex_router"
import { Tools, GroupCollection, GroupSet } from "./tools";
export class MessageModel {
/**
* @memberof GraphQL
* @class MessageModel
* @summary Requetes relatives aux messages.
* @classdesc Cette classe contient les méthodes implémentant les requetes relatives aux messages.
* @arg {string} contextUser - L'identifiant de l'utilisateur du 'context'
*/
constructor(contextUser: string) {
this.contextUser = contextUser;
}
protected contextUser: string;
/**
* @memberof GraphQL.MessageModel#
* @function getAnnouncement
* @summary Fonction qui renvoie une annonce donnée.
* @arg {number} mid - Identifiant demandé.
* @return {Promise(Announcement)} Renvoie l'annonce dont l'identifiant est 'mid'
* @async
* @rights membre d'un groupe author ou d'un groupe recipient
*/
async getAnnouncement(mid: number): Promise<Announcement> {
return Announcement.tryCreate(mid);
}
/**
* @memberof GraphQL.MessageModel#
* @function getEvent
* @summary Fonction qui renvoie un evenement donné.
* @arg {number} mid - Identifiant demandé.
* @return {Promise(Event)} Renvoie l'évenement dont l'identifiant est 'mid'
* @async
* @rights membre d'un groupe author ou d'un groupe recipient
*/
async getEvent(mid: number): Promise<Event> {
return Event.tryCreate(mid);
}
/**
* @memberof GraphQL.MessageModel#
* @function getPrivatePost
* @summary Fonction qui renvoie un post privé donné.
* @arg {number} mid - Identifiant demandé.
* @return {Promise(PrivatePost)} Renvoie le post privé dont l'identifiant est 'mid'
* @async
* @rights membre du groupe recipient
*/
async getPrivatePost(mid: number): Promise<PrivatePost> {
return PrivatePost.tryCreate(mid);
}
/**
* @memberof GraphQL.MessageModel#
* @function getQuestion
* @summary Fonction qui renvoie une question donnée.
* @arg {number} mid - Identifiant demandé.
* @return {Promise(Question)} Renvoie la question dont l'identifiant est 'mid'
* @async
* @rights viewer du groupe recipient
*/
async getQuestion(mid: number): Promise<Question> {
return Question.tryCreate(mid);
}
/**
* @memberof GraphQL.MessageModel#
* @function getAnswer
* @summary Fonction qui renvoie une réponse donnée.
* @arg {number} mid - Identifiant demandé.
* @return {Promise(Answer)} Renvoie la réponse dont l'identifiant est 'mid'
* @async
* @rights viewer du groupe author
*/
async getAnswer(mid: number): Promise<Answer> {
return Answer.tryCreate(mid);
}
/**
* @memberof GraphQL.MessageModel#
* @function getAllMessages
* @summary Fonction qui renvoie tous les messages visibles.
* @arg {GroupCollection} groups - Un ensemble d'identifiants, supposés valides.
* @return {Promise(Message[])} Renvoie tous les messages émis ou reçus par ces groupes
* @async
* @rights member of groups
*/
async getAllMessages(groups: GroupSet): Promise<Message[]> {
let r1 = await this.getAllAnnouncements(groups);
let r2 = await this.getAllEvents(groups);
let r3 = await this.getAllPrivatePosts(groups);
let r: Message[];
return r.concat(r1, r2, r3);
}
/**
* @memberof GraphQL.MessageModel#
* @function getAllAnnouncements
* @summary Fonction qui renvoie toutes les annonces visibles.
* @arg {GroupSet} groups - Un ensemble d'identifiants, supposés valides.
* @return {Promise(Announcement[])} Renvoie toutes les annonces émises ou reçues par ces groupes
* @async
* @rights member of groups
*/
async getAllAnnouncements(groups: GroupSet): Promise<Announcement[]> {
let sent = await this.getAllAnnouncementsSent(groups);
let received = await this.getAllAnnouncementsReceived(groups);
return sent.concat(received);
}
/**
* @memberof GraphQL.MessageModel#
* @function getAllAnnouncementsSent
* @summary Fonction qui renvoie toutes les annonces émises visibles.
* @arg {GroupSet} groups - Un ensemble d'identifiants, supposés valides.
* @return {Promise(Announcement[])} Renvoie toutes les annonces émises par ces groupes
* @async
* @rights member of groups
*/
async getAllAnnouncementsSent(groups: GroupSet): Promise<Announcement[]> {
let result = await knex.select('mid').from('announcements_authors').whereIn('gid', Array.from(groups));
return result.map(async obj => await this.getAnnouncement(obj.mid));
}
/**
* @memberof GraphQL.MessageModel#
* @function getAllAnnouncementsReceived
* @summary Fonction qui renvoie toutes les annonces reçues visibles.
* @arg {GroupSet} groups - Un ensemble d'identifiants, supposés valides.
* @return {Promise(Announcement[])} Renvoie toutes les annonces reçues par ces groupes
* @async
* @rights member of groups
*/
async getAllAnnouncementsReceived(groups: GroupSet): Promise<Announcement[]> {
let result = await knex.select('mid').from('announcements_recipients').whereIn('gid', Array.from(groups));
return result.map(async obj => await this.getAnnouncement(obj.mid));
}
/**
* @memberof GraphQL.MessageModel#
* @function getAllEvents
* @summary Fonction qui renvoie tous les évenements visibles.
* @arg {GroupCollection} groups - Un ensemble d'identifiants, supposés valides.
* @return {Promise(Event[])} Renvoie tous les évenements émis ou reçus par ces groupes
* @async
* @rights member of groups
*/
async getAllEvents(groups: GroupSet): Promise<Event[]> {
let from = await this.getAllEventsFrom(groups);
let to = await this.getAllEventsTo(groups);
return from.concat(to);
}
/**
* @memberof GraphQL.MessageModel#
* @function getAllEventsFrom
* @summary Fonction qui renvoie tous les évenements visibles émis par le groupe.
* @arg {GroupCollection} groups - Un ensemble d'identifiants, supposés valides.
* @return {Promise(Event[])} Renvoie tous les évenements émis ou reçus par ces groupes
* @async
* @rights member of groups
*/
async getAllEventsFrom(groups: GroupSet): Promise<Event[]> {
let result = await knex.select('mid').from('events_authors').whereIn('gid', Array.from(groups));
return result.map(async obj => await this.getEvent(obj.mid));
}
/**
* @memberof GraphQL.MessageModel#
* @function getAllEventsTo
* @summary Fonction qui renvoie tous les évenements visibles addressés au groupe.
* @arg {GroupCollection} groups - Un ensemble d'identifiants, supposés valides.
* @return {Promise(Event[])} Renvoie tous les évenements émis ou reçus par ces groupes
* @async
* @rights member of groups
*/
async getAllEventsTo(groups: GroupSet): Promise<Event[]> {
let result = await knex.select('mid').from('events_recipients').whereIn('gid', Array.from(groups));
return result.map(async obj => await this.getEvent(obj.mid));
}
/**
* @memberof GraphQL.MessageModel#
* @function getAllPrivatePosts
* @summary Fonction qui renvoie tous les posts privés visibles.
* @arg {GroupCollection} groups - Un ensemble d'identifiants, supposés valides.
* @return {Promise(PrivatePost[])} Renvoie tous les posts privés de ces groupes
* @async
* @rights member of groups
*/
async getAllPrivatePosts(groups: GroupSet): Promise<PrivatePost[]> {
let result = await knex.select('mid').from('messages_private_posts').whereIn('recipient', Array.from(groups));
return result.map(async obj => await this.getPrivatePost(obj.mid));
}
/**
* @memberof GraphQL.MessageModel#
* @function getAllQuestions
* @summary Fonction qui renvoie toutes les questions posées aux groupes.
* @arg {GroupSet} groups - Un ensemble d'identifiants, supposés valides.
* @return {Promise(Announcement[])} Renvoie toutes les annonces émises par ces groupes
* @async
* @rights member of groups
*/
async getAllQuestions(groups: GroupSet): Promise<Announcement[]> {
let result = await knex.select('mid').from('messages_questions').whereIn('recipient', Array.from(groups));
return result.map(async obj => await this.getQuestion(obj.mid));
}
/**
* @memberof GraphQL.MessageModel#
* @function getAllAnswers
* @summary Fonction qui renvoie toutes les réponses données par le groupe.
* @arg {GroupSet} groups - Un ensemble d'identifiants, supposés valides.
* @return {Promise(Announcement[])} Renvoie toutes les annonces émises par ces groupes
* @async
* @rights member of groups
*/
async getAllAnswers(groups: GroupSet): Promise<Announcement[]> {
// L'auteur de la réponse n'est pas dans la table messages_answers car c'est forcément le recipient de la
// question à laquelle il répond.
let result = await knex.select('messages_answers.mid').from('messages_answers')
.innerJoin('messages_questions', 'messages_answers.for_question', 'messages_questions.mid')
.whereIn('messages_questions.recipient', groups);
return result.map(async obj => await this.getAnswer(obj.mid));
}
/**
* @memberof GraphQL.MessageModel#
* @function userParticipate
* @summary Fonction pour participer a un evenement.
* @arg {string} uid - Identifiant de l'utilisateur.
* @arg {number} mid - Identifiant de l'évenement.
* @return {Promise(boolean)} Renvoie true si modification réussie
* @async
* @rights member d'un groupe author ou recipient
*/
async userParticipate(uid: string, mid: number): Promise<boolean> {
throw "Not implemented";
}
/**
* @memberof GraphQL.MessageModel#
* @function userUnparticipate
* @summary Fonction pour ne plus participer a un evenement.
* @arg {string} uid - Identifiant de l'utilisateur.
* @arg {number} mid - Identifiant de l'évenement.
* @return {Promise(boolean)} Renvoie true si modification réussie
* @async
* @rights member d'un groupe author ou recipient
*/
async userUnparticipate(uid: string, mid: number): Promise<boolean> {
throw "Not implemented";
}
/**
* @memberof GraphQL.MessageModel#
* @function groupParticipate
* @summary Fonction pour participer a un evenement.
* @arg {string} gid - Identifiant du groupe.
* @arg {number} forEvent - Identifiant de l'évenement.
* @return {Promise(boolean)} Renvoie true si modification réussie
* @async
* @rights member d'un groupe author ou recipient
*/
async groupParticipate(gid: string, forEvent: number): Promise<boolean> {
throw "Not implemented";
}
/**
* @memberof GraphQL.MessageModel#
* @function groupUnparticipate
* @summary Fonction pour ne plus participer a un evenement.
* @arg {string} gid - Identifiant du groupe.
* @arg {number} forEvent - Identifiant de l'évenement.
* @return {Promise(boolean)} Renvoie true si modification réussie
* @async
* @rights member d'un groupe author ou recipient
*/
async groupUnparticipate(gid: string, forEvent: number): Promise<boolean> {
throw "Not implemented";
}
/**
* @memberof GraphQL.MessageModel#
* @function createQuestion
* @summary Fonction pour créer une question.
* @arg {string} gid - Identifiant du groupe.
* @arg {string} title - Titre.
* @arg {string} content - Contenu.
* @return {Promise(Question)} Renvoie la question créée.
* @async
* @rights viewer du groupe
*/
async createQuestion(gid: string, title: string, content: string): Promise<Question> {
throw "Not implemented";
}
/**
* @memberof GraphQL.MessageModel#
* @function editQuestion
* @summary Fonction pour modifier une question.
* @arg {number} mid - Identifiant de la question.
* @arg {string} title - Titre.
* @arg {string} content - Contenu.
* @return {Promise(Question)} Renvoie la question modifiée.
* @async
* @rights viewer du groupe et author de la question
*/
async editQuestion(mid: number, title: string, content: string): Promise<Question> {
throw "Not implemented";
}
/**
* @memberof GraphQL.MessageModel#
* @function removeQuestion
* @summary Fonction pour supprimer une question.
* @arg {number} mid - Identifiant de la question.
* @return {Promise(boolean)} Renvoie true si suppression réussie.
* @async
* @rights viewer du groupe et author de la question
*/
async removeQuestion(mid: number): Promise<boolean> {
throw "Not implemented";
}
/**
* @memberof GraphQL.MessageModel#
* @function createPrivatePost
* @summary Fonction pour créer un post privé.
* @arg {string} gid - Identifiant du groupe.
* @arg {string} title - Titre.
* @arg {string} content - Contenu.
* @return {Promise(PrivatePost)} Renvoie le post créé.
* @async
* @rights member du groupe
*/
async createPrivatePost(gid: string, title: string, content: string): Promise<PrivatePost> {
throw "Not implemented";
}
/**
* @memberof GraphQL.MessageModel#
* @function editPrivatePost
* @summary Fonction pour modifier un post privé.
* @arg {number} mid - Identifiant du post.
* @arg {string} title - Titre.
* @arg {string} content - Contenu.
* @return {Promise(PrivatePost)} Renvoie le post modifié.
* @async
* @rights member du groupe et author du post
*/
async editPrivatePost(mid: number, title: string, content: string): Promise<PrivatePost> {
throw "Not implemented";
}
/**
* @memberof GraphQL.MessageModel#
* @function removePrivatePost
* @summary Fonction pour supprimer un post privé.
* @arg {number} mid - Identifiant du post.
* @return {Promise(boolean)} Renvoie true si suppression réussie.
* @async
* @rights member du groupe et author du post
*/
async removePrivatePost(mid: number): Promise<boolean> {
throw "Not implemented";
}
/**
* @memberof GraphQL.MessageModel#
* @function createAnnouncement
* @summary Fonction pour créer une annonce.
* @arg {string} from_gid - Identifiant du groupe émetteur.
* @arg {GroupSet} to_groups - Les groupes destinataires.
* @arg {string} title - Titre.
* @arg {string} content - Contenu.
* @arg {number} event_mid - Identifiant de l'évenement.
* @return {Promise(Announcement)} Renvoie l'annonce créée.
* @async
* @rights speaker du groupe émetteur
*/
async createAnnouncement(from_gid: string, to_groups: GroupSet, title: string, content: string, event_mid: number): Promise<Announcement> {
throw "Not implemented";
}
/**
* @memberof GraphQL.MessageModel#
* @function editAnnouncement
* @summary Fonction pour modifier une annonce.
* @arg {number} mid - Identifiant de l'annonce.
* @arg {string} title - Titre.
* @arg {string} content - Contenu.
* @arg {number} event_mid - Identifiant de l'évenement.
* @return {Promise(Announcement)} Renvoie l'annonce modifiée.
* @async
* @rights speaker du groupe émetteur
*/
async editAnnouncement(mid: number, title: string, content: string, event_mid: number): Promise<Announcement> {
throw "Not implemented";
}
/**
* @memberof GraphQL.MessageModel#
* @function removeAnnouncement
* @summary Fonction pour supprimer une annonce.
* @arg {number} mid - Identifiant de l'annonce.
* @return {Promise(boolean)} Renvoie true si suppression réussie.
* @async
* @rights speaker du groupe
*/
async removeAnnouncement(mid: number): Promise<boolean> {
throw "Not implemented";
}
/**
* @memberof GraphQL.MessageModel#
* @function createEvent
* @summary Fonction pour créer un évenement.
* @arg {string} from_gid - Identifiant du groupe émetteur.
* @arg {GroupSet} to_groups - Les groupes destinataires.
* @arg {string} title - Titre.
* @arg {string} content - Contenu.
* @arg {string} location - Lieu.
* @arg {string} startTime - Date de début.
* @arg {string} endTime - Date de fin.
* @arg {number} announcement_mid - Identifiant de l'annonce.
* @return {Promise(Event)} Renvoie l'évenement créé.
* @async
* @rights speaker du groupe émetteur
*/
async createEvent(from_gid: string, to_groups: GroupSet, title: string, content: string, location: string, startTime: string, endTime: string, announcement_mid: number): Promise<Event> {
throw "Not implemented";
}
/**
* @memberof GraphQL.MessageModel#
* @function editEvent
* @summary Fonction pour modifier un evenement.
* @arg {number} mid - Identifiant de l'évenement.
* @arg {string} title - Titre.
* @arg {string} content - Contenu.
* @arg {string} location - Lieu.
* @arg {string} startTime - Date de début.
* @arg {string} endTime - Date de fin.
* @arg {number} announcement_mid - Identifiant de l'annonce.
* @return {Promise(Event)} Renvoie l'evenement modifié.
* @async
* @rights speaker du groupe émetteur
*/
async editEvent(mid: number, title: string, content: string, location: string, startTime: string, endTime: string, announcement_mid: number): Promise<Event> {
throw "Not implemented";
}
/**
* @memberof GraphQL.MessageModel#
* @function removeEvent
* @summary Fonction pour supprimer un évenement.
* @arg {number} mid - Identifiant de l'évenement.
* @return {Promise(boolean)} Renvoie true si suppression réussie.
* @async
* @rights speaker du groupe
*/
async removeEvent(mid: number): Promise<boolean> {
throw "Not implemented";
}
/**
* @memberof GraphQL.MessageModel#
* @function createAnswer
* @summary Fonction pour créer une réponse.
* @arg {number} mid - Identifiant de la question.
* @arg {string} title - Titre.
* @arg {string} content - Contenu.
* @return {Promise(Answer)} Renvoie la réponse créée.
* @async
* @rights speaker du groupe
*/
async createAnswer(mid: number, title: string, content: string): Promise<Answer> {
throw "Not implemented";
}
/**
* @memberof GraphQL.MessageModel#
* @function editAnswer
* @summary Fonction pour modifier une réponse.
* @arg {number} mid - Identifiant de la réponse.
* @arg {string} title - Titre.
* @arg {string} content - Contenu.
* @return {Promise(Answer)} Renvoie la réponse modifiée.
* @async
* @rights speaker du groupe
*/
async editAnswer(mid: number, title: string, content: string): Promise<Answer> {
throw "Not implemented";
}
/**
* @memberof GraphQL.MessageModel#
* @function removeAnswer
* @summary Fonction pour supprimer une réponse.
* @arg {number} mid - Identifiant de la réponse.
* @return {Promise(boolean)} Renvoie true si suppression réussie.
* @async
* @rights speaker du groupe
*/
async removeAnswer(mid: number): Promise<boolean> {
throw "Not implemented";
}
/**
* @memberof GraphQL.MessageModel#
* @function censorQuestion
* @summary Fonction pour censurer une question.
* @arg {number} mid - Identifiant du message.
* @return {Promise(boolean)} Renvoie true si suppression réussie.
* @async
* @rights admin du groupe
*/
async censorQuestion(mid: number): Promise<boolean> {
throw "Not implemented";
}
/**
* @memberof GraphQL.MessageModel#
* @function censorAnswer
* @summary Fonction pour censurer une réponse.
* @arg {number} mid - Identifiant du message.
* @return {Promise(boolean)} Renvoie true si suppression réussie.
* @async
* @rights admin du groupe
*/
async censorAnswer(mid: number): Promise<boolean> {
throw "Not implemented";
}
/**
* @memberof GraphQL.MessageModel#
* @function censorPrivatePost
* @summary Fonction pour censurer un post privé.
* @arg {number} mid - Identifiant du message.
* @return {Promise(boolean)} Renvoie true si suppression réussie.
* @async
* @rights admin du groupe
*/
async censorPrivatePost(mid: number): Promise<boolean> {
throw "Not implemented";
}
/**
* @memberof GraphQL.MessageModel#
* @function censorAnnouncement
* @summary Fonction pour censurer une annonce.
* @arg {number} mid - Identifiant du message.
* @return {Promise(boolean)} Renvoie true si suppression réussie.
* @async
* @rights admin du groupe ???? (lequel ??? -> le groupe author?)
*/
async censorAnnouncement(mid: number): Promise<boolean> {
throw "Not implemented";
}
/**
* @memberof GraphQL.MessageModel#
* @function censorEvent
* @summary Fonction pour censurer un évenement.
* @arg {number} mid - Identifiant du message.
* @return {Promise(boolean)} Renvoie true si suppression réussie.
* @async
* @rights admin du groupe ???? (lequel ??? -> le groupe author?)
*/
async censorEvent(mid: number): Promise<boolean> {
throw "Not implemented";
}
}