From 9052f60fb474e37856e4bc0a7574f1bd46d2b1d2 Mon Sep 17 00:00:00 2001 From: Oliver Facklam <oliver.facklam.lfgeb@gmail.com> Date: Mon, 31 Dec 2018 13:01:51 +0100 Subject: [PATCH] messageModel.ts --- src/graphql/connectors/messageModel.ts | 463 +++++++++++++++++++++++++ src/graphql/connectors/tools.ts | 2 + src/graphql/typeDefs/actions.graphql | 9 +- 3 files changed, 470 insertions(+), 4 deletions(-) create mode 100644 src/graphql/connectors/messageModel.ts diff --git a/src/graphql/connectors/messageModel.ts b/src/graphql/connectors/messageModel.ts new file mode 100644 index 0000000..843a192 --- /dev/null +++ b/src/graphql/connectors/messageModel.ts @@ -0,0 +1,463 @@ +/** + * @file Fonctions qui implémentent les requetes relatives aux messages + * @author ofacklam + * @memberof GraphQL + */ + +import { Announcement, Event, PrivatePost, Question, Answer, Message } from "../resolvers/messages"; +import knex from "../../../db/knex_router" +import { GroupCollection, GroupSet } from "./tools"; + +export class GroupModel { + + /** + * @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: GroupCollection): Promise<Message[]> { + throw "Not implemented"; + } + + /** + * @memberof GraphQL.MessageModel# + * @function getAllAnnouncements + * @summary Fonction qui renvoie toutes les annonces visibles. + * @arg {GroupCollection} 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: GroupCollection): Promise<Announcement[]> { + throw "Not implemented"; + } + + /** + * @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: GroupCollection): Promise<Event[]> { + throw "Not implemented"; + } + + /** + * @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: GroupCollection): Promise<PrivatePost[]> { + throw "Not implemented"; + } + + /** + * @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 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"; + } + +} \ No newline at end of file diff --git a/src/graphql/connectors/tools.ts b/src/graphql/connectors/tools.ts index 895964e..9feb00e 100644 --- a/src/graphql/connectors/tools.ts +++ b/src/graphql/connectors/tools.ts @@ -245,6 +245,8 @@ export class Tools { return elt.simple_group_gid; })); + //TODO : rajouter les VisibilityEdges + return { simpleGroups: simple, metaGroups: meta }; } } \ No newline at end of file diff --git a/src/graphql/typeDefs/actions.graphql b/src/graphql/typeDefs/actions.graphql index 784e055..08e4029 100644 --- a/src/graphql/typeDefs/actions.graphql +++ b/src/graphql/typeDefs/actions.graphql @@ -13,7 +13,7 @@ type Query { metaGroup(gid:ID!): MetaGroup # Message queries de base - message(mid:ID!): Message + #message(mid:ID!): Message announcement(mid:ID!): Announcement event(mid:ID!): Event privatePost(mid:ID!): PrivatePost @@ -30,6 +30,7 @@ type Query { allMessages: [Message] allAnnouncements: [Announcement] allEvents: [Event] + allPrivatePosts: [PrivatePost] # Tous les Groupes visibles par un utilisateur. # Correspondrait au sous-champ "viewerOf" de User, volontairement non-défini comme tel. Tous les autres cas de figure sont couverts par les sous-champs "<permission>Of" de User allGroups: [Group] @@ -144,7 +145,7 @@ type Mutation { ): Question removeQuestion( questionToRemove: ID! - ): Question + ): Boolean # Member mutations userLeaveGroup(groupId: ID!): Boolean @@ -161,7 +162,7 @@ type Mutation { ): PrivatePost removePrivatePost( privatePostToRemove: ID! - ): PrivatePost + ): Boolean # Speaker mutations writePostsSummary(forGroup: ID!, content: String): Boolean @@ -265,10 +266,10 @@ type Mutation { refuseGroupCoauthorEventRequest(request: ID!, comment: String): Boolean censorQuestion(questionToCensor: ID!): Boolean + censorAnswer(answerToCensor: ID!): Boolean censorPrivatePost(privatePostToCensor: ID!): Boolean censorAnnouncement(announcementToCensor: ID!): Boolean censorEvent(eventToCensor: ID!): Boolean - censorAnswer(answerToCensor: ID!): Boolean # Superviser mutations takeAdminRights(forGroup: ID!) : Boolean -- GitLab