Added basic event functions

- added join function
- added leave function
pull/2/head
Trivernis 5 years ago
parent 78ac194d37
commit 9ee20adcc3

@ -335,10 +335,33 @@ export function resolver(req: any, res: any): any {
return new NotLoggedInGqlError(); 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) { if (req.session.userId) {
const date = new Date(dueDate);
const group = await models.Group.findByPk(groupId); const group = await models.Group.findByPk(groupId);
const event = await group.$create<models.Event>("rEvents", {name, dueDate}); return group.$create<models.Event>("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 { } else {
res.status(status.UNAUTHORIZED); res.status(status.UNAUTHORIZED);
return new NotLoggedInGqlError(); return new NotLoggedInGqlError();

@ -84,6 +84,15 @@ type Mutation {
"removes an admin from the group" "removes an admin from the group"
removeGroupAdmin(groupId: ID!, userId: ID!): 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 { interface UserData {
@ -301,6 +310,26 @@ type Group {
"the groups chat" "the groups chat"
chat: ChatRoom 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" "represents the type of vote performed on a post"

@ -229,6 +229,7 @@ namespace dataaccess {
* @param members * @param members
*/ */
export async function createGroup(name: string, creator: number, members: number[]): Promise<models.Group> { export async function createGroup(name: string, creator: number, members: number[]): Promise<models.Group> {
members = members || [];
return sequelize.transaction(async (t) => { return sequelize.transaction(async (t) => {
members.push(creator); members.push(creator);
const groupChat = await createChat(...members); const groupChat = await createChat(...members);

Loading…
Cancel
Save