From 9ee20adcc3c102c5ac97a41f44078d74f978b9f3 Mon Sep 17 00:00:00 2001 From: Trivernis Date: Thu, 17 Oct 2019 13:06:20 +0200 Subject: [PATCH 1/2] Added basic event functions - added join function - added leave function --- src/graphql/resolvers.ts | 27 +++++++++++++++++++++++++-- src/graphql/schema.graphql | 29 +++++++++++++++++++++++++++++ src/lib/dataaccess.ts | 1 + 3 files changed, 55 insertions(+), 2 deletions(-) diff --git a/src/graphql/resolvers.ts b/src/graphql/resolvers.ts index fcae8ad..44ea21d 100644 --- a/src/graphql/resolvers.ts +++ b/src/graphql/resolvers.ts @@ -335,10 +335,33 @@ export function resolver(req: any, res: any): any { return new NotLoggedInGqlError(); } }, - async createEvent({name, dueDate, groupId}: {name: string, dueDate: Date, groupId: number}) { + async createEvent({name, dueDate, groupId}: {name: string, dueDate: string, groupId: number}) { if (req.session.userId) { + const date = new Date(dueDate); const group = await models.Group.findByPk(groupId); - const event = await group.$create("rEvents", {name, dueDate}); + return group.$create("rEvent", {name, dueDate: date}); + } else { + res.status(status.UNAUTHORIZED); + return new NotLoggedInGqlError(); + } + }, + async joinEvent({eventId}: {eventId: number}) { + if (req.session.userId) { + const event = await models.Event.findByPk(eventId); + const self = await models.User.findByPk(req.session.userId); + await event.$add("rParticipants", self); + return event; + } else { + res.status(status.UNAUTHORIZED); + return new NotLoggedInGqlError(); + } + }, + async leaveEvent({eventId}: {eventId: number}) { + if (req.session.userId) { + const event = await models.Event.findByPk(eventId); + const self = await models.User.findByPk(req.session.userId); + await event.$remove("rParticipants", self); + return event; } else { res.status(status.UNAUTHORIZED); return new NotLoggedInGqlError(); diff --git a/src/graphql/schema.graphql b/src/graphql/schema.graphql index 66f0ed5..4a850b4 100644 --- a/src/graphql/schema.graphql +++ b/src/graphql/schema.graphql @@ -84,6 +84,15 @@ type Mutation { "removes an admin from the group" removeGroupAdmin(groupId: ID!, userId: ID!): Group + + "Creates a new event with a epoch due date on a group." + createEvent(name: String, dueDate: String, groupId: ID!): Event + + "Joins a event." + joinEvent(eventId: ID!): Event + + "Leaves a event." + leaveEvent(eventId: ID!): Event } interface UserData { @@ -301,6 +310,26 @@ type Group { "the groups chat" chat: ChatRoom + + "the events of the group" + events: [Event!]! +} + +type Event { + "ID of the event" + id: ID! + + "Name of the event" + name: String! + + "The date of the event." + dueDate: String! + + "The group the event belongs to." + group: Group! + + "The participants of the event." + participants: [User!]! } "represents the type of vote performed on a post" diff --git a/src/lib/dataaccess.ts b/src/lib/dataaccess.ts index 3c3862f..e1c5a1f 100644 --- a/src/lib/dataaccess.ts +++ b/src/lib/dataaccess.ts @@ -229,6 +229,7 @@ namespace dataaccess { * @param members */ export async function createGroup(name: string, creator: number, members: number[]): Promise { + members = members || []; return sequelize.transaction(async (t) => { members.push(creator); const groupChat = await createChat(...members); From 5478f70098b912d05cca0a5110cba48cc40bcb83 Mon Sep 17 00:00:00 2001 From: Trivernis Date: Thu, 17 Oct 2019 13:56:10 +0200 Subject: [PATCH 2/2] Added email query field --- src/graphql/schema.graphql | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/graphql/schema.graphql b/src/graphql/schema.graphql index 4a850b4..fc0f156 100644 --- a/src/graphql/schema.graphql +++ b/src/graphql/schema.graphql @@ -170,6 +170,9 @@ type Profile implements UserData { "name of the User" name: String! + "the email of the user" + email: String! + "returns the chatrooms the user joined." chats(first: Int=10, offset: Int): [ChatRoom]