/** * @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 { 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.Group# * @function questions * @summary Renvoie les questions adressées a ce groupe * @return {Promise(Question[])} * @rights viewer * @async */ async getAllQuestionsReceived(gid: number): Promise<Question[]> { throw "Not implemented" // let result = await knex('questions').select().whereIn('id', received_messages); // for(let entry of result){ // entry.type = "Question"; // } // return result; } /** * @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.Group# * @function answers * @summary Renvoie les réponses de ce groupe * @return {Promise(Answer[])} * @rights viewer * @async */ async getAllAnswersSent(gid: number): Promise<Answer[]> { throw "Not implemented" // let received_messages = await selectors.recievedMessages(user, groupUID); // let result = await knex('answers').select().whereIn('id', received_messages); // for(let entry of result){ // entry.type = "Answer"; // } // return result; } /** * @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: GroupCollection): Promise<Message[]> { throw "Not implemented"; } /** * @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[]> { throw "Not implemented"; /*let result = await knex.select().from('announcements').whereIn('id', selection); result = result.concat( await knex.select().from('events').whereIn('id', selection) ); for (let r of result) { r.type = 'Announcement'; } return result;*/ } /** * @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 announces = await knex.distinct('mid').select().from('announcements_authors').whereIn('gid', [...groups]); return announces.map(elt => new Announcement(elt.mid)); /*let result = await knex.select().from('announcements').whereIn('gid'); result = result.concat( await knex.select().from('events').whereIn('id') ); for (let r of result) { r.type = 'Announcement'; } return result;*/ } /** * @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[]> { throw "Not implemented"; /*let result = await knex.select().from('announcements').whereIn('gid'); result = result.concat( await knex.select().from('events').whereIn('id') ); for (let r of result) { r.type = 'Announcement'; } return result;*/ } /** * @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[]> { throw "Not implemented"; /*let result = await knex.select().from('events').whereIn('id', selection); for (let r of result) { r.type = 'Announcement'; } return result;*/ } /** * @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[]> { throw "Not implemented"; /*let result = await knex.select().from('events').whereIn('gid'); for (let r of result) { r.type = 'Announcement'; } return result;*/ } /** * @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[]> { throw "Not implemented"; /*let result = await knex.select().from('events').whereIn('gid'); for (let r of result) { r.type = 'Announcement'; } return result;*/ } /** * @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[]> { throw "Not implemented"; // let result = await knex('private_posts').select().whereIn('id', received_messages); // for(let entry of result){ // entry.type = "PrivatePost"; // } // return result; } /** * @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"; } }