From 47d775fd2c8f39e519a1de4808542eda76ee2073 Mon Sep 17 00:00:00 2001 From: Trivernis Date: Sun, 29 Sep 2019 00:19:46 +0200 Subject: [PATCH] Bug Fixes - fixed Chatrooms - fixed ChatMessages --- src/lib/dataaccess/ChatMessage.ts | 2 +- src/lib/dataaccess/Chatroom.ts | 12 +++++++----- src/lib/dataaccess/DataObject.ts | 1 + src/lib/dataaccess/index.ts | 11 ++++++----- src/public/graphql/schema.graphql | 16 ++++++++-------- src/routes/home.ts | 2 +- src/sql/create-tables.sql | 2 +- 7 files changed, 25 insertions(+), 21 deletions(-) diff --git a/src/lib/dataaccess/ChatMessage.ts b/src/lib/dataaccess/ChatMessage.ts index afbc600..9ae0a12 100644 --- a/src/lib/dataaccess/ChatMessage.ts +++ b/src/lib/dataaccess/ChatMessage.ts @@ -3,7 +3,7 @@ import {Chatroom} from "./Chatroom"; import {User} from "./User"; export class ChatMessage { - constructor(public author: User, public chat: Chatroom, public timestamp: number, public content: string) { + constructor(public author: User, public chat: Chatroom, public createdAt: number, public content: string) { } /** diff --git a/src/lib/dataaccess/Chatroom.ts b/src/lib/dataaccess/Chatroom.ts index 080a285..6b839c6 100644 --- a/src/lib/dataaccess/Chatroom.ts +++ b/src/lib/dataaccess/Chatroom.ts @@ -4,7 +4,9 @@ import {User} from "./User"; export class Chatroom { - constructor(private id: number) {} + constructor(private readonly id: number) { + this.id = Number(id); + } /** * Returns if the chat exists. @@ -29,7 +31,7 @@ export class Chatroom { }); const chatMembers = []; for (const row of result) { - chatMembers.push(new User(row)); + chatMembers.push(new User(row.id, row)); } return chatMembers; } @@ -40,8 +42,8 @@ export class Chatroom { * @param offset - the offset of messages to return * @param containing - filter by containing */ - public async messages(limit?: number, offset?: number, containing?: string) { - const lim = limit || 16; + public async messages({first, offset, containing}: {first?: number, offset?: number, containing?: string}) { + const lim = first || 16; const offs = offset || 0; const result = await queryHelper.all({ @@ -51,7 +53,7 @@ export class Chatroom { const messages = []; for (const row of result) { - messages.push(new ChatMessage(new User(row.author), this, row.timestamp, row.content)); + messages.push(new ChatMessage(new User(row.author), this, row.created_at, row.content)); } if (containing) { return messages.filter((x) => x.content.includes(containing)); diff --git a/src/lib/dataaccess/DataObject.ts b/src/lib/dataaccess/DataObject.ts index 9c598ac..2f89988 100644 --- a/src/lib/dataaccess/DataObject.ts +++ b/src/lib/dataaccess/DataObject.ts @@ -5,6 +5,7 @@ export abstract class DataObject { protected dataLoaded: boolean = false; constructor(public id: number, protected row?: any) { + this.id = Number(id); } /** diff --git a/src/lib/dataaccess/index.ts b/src/lib/dataaccess/index.ts index 922fdac..11fba10 100644 --- a/src/lib/dataaccess/index.ts +++ b/src/lib/dataaccess/index.ts @@ -140,7 +140,7 @@ namespace dataaccess { */ export async function createChat(...members: number[]): Promise { const idResult = await queryHelper.first({ - text: "INSERT INTO chats (id) values (nextval('chats_id_seq'::regclass)) RETURNING *;", + text: "INSERT INTO chats (id) values (default) RETURNING *;", }); const id = idResult.id; const transaction = await queryHelper.createTransaction(); @@ -149,14 +149,15 @@ namespace dataaccess { for (const member of members) { await transaction.query({ name: "chat-member-insert", - text: "INSERT INTO chat_members (ABSOLUTE chat, member) VALUES ($1, $2);", - values: [member], + text: "INSERT INTO chat_members (chat, member) VALUES ($1, $2);", + values: [id, member], }); } await transaction.commit(); } catch (err) { globals.logger.warn(`Failed to insert chatmember into database: ${err.message}`); globals.logger.debug(err.stack); + await transaction.rollback(); } finally { transaction.release(); } @@ -173,10 +174,10 @@ namespace dataaccess { const chat = new Chatroom(chatId); if ((await chat.exists())) { const result = await queryHelper.first({ - text: "INSERT INTO chat_messages (chat, author, content, created_at) values ($1, $2, $3) RETURNING *", + text: "INSERT INTO chat_messages (chat, author, content) values ($1, $2, $3) RETURNING *", values: [chatId, authorId, content], }); - return new ChatMessage(new User(result.author), chat, result.timestamp, result.content); + return new ChatMessage(new User(result.author), chat, result.created_at, result.content); } else { throw new ChatNotFoundError(chatId); } diff --git a/src/public/graphql/schema.graphql b/src/public/graphql/schema.graphql index 2ff19cf..fb23b6f 100644 --- a/src/public/graphql/schema.graphql +++ b/src/public/graphql/schema.graphql @@ -11,9 +11,6 @@ type Query { "returns the chat object for a chat id" getChat(chatId: ID!): ChatRoom - "Creates a chat between the user (and optional an other user)" - createChat(members: [ID!]): ChatRoom - "returns the request object for a request id" getRequest(requestId: ID!): Request @@ -60,6 +57,9 @@ type Mutation { "delete the post for a given post id" deletePost(postId: ID!): Boolean + + "Creates a chat between the user (and optional an other user)" + createChat(members: [ID!]): ChatRoom } "represents a single user account" @@ -141,7 +141,7 @@ type ChatRoom { members: [User!] "return a specfic range of messages posted in the chat" - getMessages(first: Int, offset: Int): [ChatMessage] + messages(first: Int = 10, offset: Int, containing: String): [ChatMessage]! "id of the chat" id: ID! @@ -149,16 +149,16 @@ type ChatRoom { type ChatMessage { "The author of the chat message." - author: User + author: User! "The chatroom the message was posted in" - chat: ChatRoom + chat: ChatRoom! "The timestamp when the message was posted (epoch)." - timestamp: Int + createdAt: String! "The content of the message." - content: String + content: String! "The content of the message rendered by markdown-it." htmlContent: String diff --git a/src/routes/home.ts b/src/routes/home.ts index 0ce10ad..97e5943 100644 --- a/src/routes/home.ts +++ b/src/routes/home.ts @@ -181,7 +181,7 @@ class HomeRoute extends Route { return new NotLoggedInGqlError(); } }, - async sendChatMessage({chatId, content}: {chatId: number, content: string}) { + async sendMessage({chatId, content}: {chatId: number, content: string}) { if (!req.session.userId) { return new NotLoggedInGqlError(); } diff --git a/src/sql/create-tables.sql b/src/sql/create-tables.sql index a1563ac..486f50e 100644 --- a/src/sql/create-tables.sql +++ b/src/sql/create-tables.sql @@ -52,7 +52,7 @@ END$$; DO $$ BEGIN CREATE TABLE IF NOT EXISTS "user_sessions" ( - "sid" varchar NOT NULL COLLATE "default", + "sid" varchar NOT NULL, "sess" json NOT NULL, "expire" timestamp(6) NOT NULL, PRIMARY KEY ("sid") NOT DEFERRABLE INITIALLY IMMEDIATE