From 0af3e7a4493f4ae6533bfa5c888ccd044985d64e Mon Sep 17 00:00:00 2001 From: CrescentLeaf Date: Sun, 14 Sep 2025 14:32:24 +0800 Subject: [PATCH] =?UTF-8?q?feat(wip):=20=E5=AF=A6=E7=8F=BE=20ChatPrivate?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/data/Chat.ts | 21 ++++++++++++++------- server/data/ChatBean.ts | 5 +++++ server/data/ChatPrivate.ts | 26 ++++++++++++++++++++++++++ 3 files changed, 45 insertions(+), 7 deletions(-) create mode 100644 server/data/ChatPrivate.ts diff --git a/server/data/Chat.ts b/server/data/Chat.ts index fd07e5f..8c624e0 100644 --- a/server/data/Chat.ts +++ b/server/data/Chat.ts @@ -21,6 +21,7 @@ export default class Chat { db.exec(` CREATE TABLE IF NOT EXISTS ${Chat.table_name} ( /* 序号 */ count INTEGER PRIMARY KEY AUTOINCREMENT, + /* 類型 */ type TEXT NOT NULL, /* Chat ID */ id TEXT NOT NULL, /* 標題 (群組) */ title TEXT, /* 頭像 (群組) */ avatar BLOB, @@ -32,7 +33,7 @@ export default class Chat { return db } - private static findAllBeansByCondition(condition: string, ...args: SQLInputValue[]): ChatBean[] { + protected static findAllBeansByCondition(condition: string, ...args: SQLInputValue[]): ChatBean[] { return this.database.prepare(`SELECT * FROM ${Chat.table_name} WHERE ${condition}`).all(...args) as unknown as ChatBean[] } @@ -45,15 +46,25 @@ export default class Chat { return new Chat(beans[0]) } - static create(chatId: string) { + static create(chatId: string, type: 'private' | 'group') { const chat = new Chat( Chat.findAllBeansByCondition( 'count = ?', Chat.database.prepare(`INSERT INTO ${Chat.table_name} ( + type, id, - settings + title, + avatar, + user_a_id, + user_b_id, + settings, ) VALUES (?, ?);`).run( + type, chatId, + null, + null, + null, + null, "{}" ).lastInsertRowid )[0] @@ -61,10 +72,6 @@ export default class Chat { return chat } - static createFromTwoUsers(userA: User, userB: User) { - return this.create([userA.bean.id, userB.bean.id].sort().join('-')) - } - declare bean: ChatBean constructor(bean: ChatBean) { this.bean = bean diff --git a/server/data/ChatBean.ts b/server/data/ChatBean.ts index 3410354..cbe9c9f 100644 --- a/server/data/ChatBean.ts +++ b/server/data/ChatBean.ts @@ -1,5 +1,10 @@ export default class ChatBean { + declare type: "paivate" | "group" declare id: string + declare title?: string + declare avatar_file_hash?: string + declare user_a_id?: string + declare user_b_id?: string declare settings: string [key: string]: unknown diff --git a/server/data/ChatPrivate.ts b/server/data/ChatPrivate.ts new file mode 100644 index 0000000..4f9daf2 --- /dev/null +++ b/server/data/ChatPrivate.ts @@ -0,0 +1,26 @@ +import Chat from "./Chat.ts" +import User from "./User.ts"; + +export default class ChatPrivate extends Chat { + static getChatIdByUsersId(userIdA: string, userIdB: string) { + return [userIdA, userIdB].sort().join('-') + } + + static createForPrivate(userA: User, userB: User) { + return this.create(this.getChatIdByUsersId(userA.bean.id, userB.bean.id), 'private') + } + static findForPrivate() { + + } + + getTitleForPrivate(user: User, targetUser: User) { + const chat = Chat.findById(ChatPrivate.getChatIdByUsersId(user.bean.id, targetUser.bean.id)) + + if (chat?.bean.user_a_id == user.bean.id) + return targetUser.getNickName() + if (chat?.bean.user_b_id == user.bean.id) + return user.getNickName() + + return "未知對話" + } +} \ No newline at end of file