From 6518d6433c54e1fc62b9d798291f2c523787ef3e Mon Sep 17 00:00:00 2001 From: Oliver Facklam <oliver.facklam.lfgeb@gmail.com> Date: Mon, 31 Dec 2018 16:26:12 +0100 Subject: [PATCH] requestModel.ts --- src/app.ts | 6 +- src/graphql/connectors/groupModel.ts | 14 -- src/graphql/connectors/messageModel.ts | 2 +- src/graphql/connectors/requestModel.ts | 255 +++++++++++++++++++++++++ src/graphql/typeDefs/actions.graphql | 8 +- src/graphql/typeDefs/queries.d.ts | 6 +- 6 files changed, 270 insertions(+), 21 deletions(-) create mode 100644 src/graphql/connectors/requestModel.ts diff --git a/src/app.ts b/src/app.ts index 8a5a743..750632f 100644 --- a/src/app.ts +++ b/src/app.ts @@ -183,6 +183,8 @@ import { Context } from './graphql/typeDefs/queries'; import { AuthorisationModel } from './graphql/connectors/authorisationModel'; import { UserModel } from './graphql/connectors/userModel'; import { GroupModel } from './graphql/connectors/groupModel'; +import { MessageModel } from './graphql/connectors/messageModel'; +import { RequestModel } from './graphql/connectors/requestModel'; const context = async ({ req }): Promise<Context> => { // set a special uid for non-authenticated requests // /!\ FOR DEVELOPMENT ONLY: use the one in the ldap config .json file @@ -211,7 +213,9 @@ const context = async ({ req }): Promise<Context> => { models: { auth: await AuthorisationModel.create(uid), user: new UserModel(uid), - group: new GroupModel(uid) + group: new GroupModel(uid), + message: new MessageModel(uid), + request: new RequestModel(uid) } }; }; diff --git a/src/graphql/connectors/groupModel.ts b/src/graphql/connectors/groupModel.ts index 3ace9ed..91b4f49 100644 --- a/src/graphql/connectors/groupModel.ts +++ b/src/graphql/connectors/groupModel.ts @@ -162,20 +162,6 @@ export class GroupModel { throw "Not implemented"; } - /** - * @memberof GraphQL.GroupModel# - * @function userRequestJoinGroup - * @summary Fonction pour demander a devenir membre - * @arg {string} gid - Identifiant du groupe. - * @arg {string} comment - Commentaire supplémentaire - * @return {Promise(Request)} Renvoie la requete créée. - * @async - * @rights viewer du groupe - */ - async userRequestJoinGroup(gid: string, comment: string): Promise<Request> { - throw "Not implemented"; - } - /** * @memberof GraphQL.GroupModel# * @function userLeaveGroup diff --git a/src/graphql/connectors/messageModel.ts b/src/graphql/connectors/messageModel.ts index 843a192..6fdbbf1 100644 --- a/src/graphql/connectors/messageModel.ts +++ b/src/graphql/connectors/messageModel.ts @@ -8,7 +8,7 @@ import { Announcement, Event, PrivatePost, Question, Answer, Message } from "../ import knex from "../../../db/knex_router" import { GroupCollection, GroupSet } from "./tools"; -export class GroupModel { +export class MessageModel { /** * @memberof GraphQL diff --git a/src/graphql/connectors/requestModel.ts b/src/graphql/connectors/requestModel.ts new file mode 100644 index 0000000..1015130 --- /dev/null +++ b/src/graphql/connectors/requestModel.ts @@ -0,0 +1,255 @@ +/** + * @file Fonctions qui implémentent les requetes relatives aux requetes + * @author ofacklam + * @memberof GraphQL + */ + +import { Group, SimpleGroup, MetaGroup } from "../resolvers/groups"; +import { Request, UserJoinGroup, GroupJoinMetagroup, GroupCoauthorEvent } from "../resolvers/requests"; +import { User } from "../resolvers/users"; +import knex from "../../../db/knex_router" +import { GroupCollection, GroupSet } from "./tools"; +import { createSubgroupArgs, editGroupArgs } from "../typeDefs/queries"; + +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[]> { + throw "Not implemented"; + } + + /** + * @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[]> { + throw "Not implemented"; + } + + /** + * @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[]> { + throw "Not implemented"; + } + + /** + * @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> { + throw "Not implemented"; + } + + /** + * @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 + throw "Not implemented"; + } + + /** + * @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> { + throw "Not implemented"; + } + + /** + * @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> { + throw "Not implemented"; + } + + /** + * @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> { + throw "Not implemented"; + } + +} \ No newline at end of file diff --git a/src/graphql/typeDefs/actions.graphql b/src/graphql/typeDefs/actions.graphql index 08e4029..1a7fa65 100644 --- a/src/graphql/typeDefs/actions.graphql +++ b/src/graphql/typeDefs/actions.graphql @@ -21,7 +21,7 @@ type Query { answer(mid:ID!): Answer # Request queries de base - request(rid:ID!): Request + #request(rid:ID!): Request userJoinGroupRequest(rid:ID!): UserJoinGroup groupJoinMetagroupRequest(rid:ID!): GroupJoinMetagroup groupCoauthorEventRequest(rid:ID!): GroupCoauthorEvent @@ -131,7 +131,7 @@ type Mutation { forEvent: ID! ): Boolean - userRequestJoinGroup(toGroup: ID!, comment: String): Request + userRequestJoinGroup(toGroup: ID!, comment: String): UserJoinGroup createQuestion( toGroup: ID!, @@ -172,7 +172,7 @@ type Mutation { toGroup: ID!, forEvent: ID!, comment: String - ): Request + ): GroupCoauthorEvent createAnnouncement( fromGroup: ID!, @@ -253,7 +253,7 @@ type Mutation { school: String ): Group - groupRequestJoinMetagroup(fromGroup: ID!, toMetagroup: ID!, comment: String): Request + groupRequestJoinMetagroup(fromGroup: ID!, toMetagroup: ID!, comment: String): GroupJoinMetagroup acceptUserJoinRequest(request: ID!, comment: String): Boolean acceptGroupJoinRequest(request: ID!, comment: String): Boolean diff --git a/src/graphql/typeDefs/queries.d.ts b/src/graphql/typeDefs/queries.d.ts index 2c49578..96cbc87 100644 --- a/src/graphql/typeDefs/queries.d.ts +++ b/src/graphql/typeDefs/queries.d.ts @@ -1,6 +1,8 @@ import { AuthorisationModel } from "../connectors/authorisationModel"; import { UserModel } from "../connectors/userModel"; import { GroupModel } from "../connectors/groupModel"; +import { MessageModel } from "../connectors/messageModel"; +import { RequestModel } from "../connectors/requestModel"; interface Context { request, @@ -8,7 +10,9 @@ interface Context { models: { auth: AuthorisationModel, user: UserModel, - group: GroupModel + group: GroupModel, + message: MessageModel, + request: RequestModel } } -- GitLab