add chatId column

This commit is contained in:
chungyau97 2023-09-18 21:45:51 +08:00
parent 7b54f17a58
commit d6cf5fed42
5 changed files with 77 additions and 6 deletions

View File

@ -30,6 +30,7 @@ export interface IChatMessage {
chatflowid: string chatflowid: string
sourceDocuments?: string sourceDocuments?: string
chatType: string chatType: string
chatId: string
memoryType?: string memoryType?: string
sessionId?: string sessionId?: string
createdDate: Date createdDate: Date
@ -153,6 +154,7 @@ export interface IncomingInput {
history: IMessage[] history: IMessage[]
overrideConfig?: ICommonObject overrideConfig?: ICommonObject
socketIOClientId?: string socketIOClientId?: string
chatId?: string
} }
export interface IActiveChatflows { export interface IActiveChatflows {

View File

@ -23,6 +23,9 @@ export class ChatMessage implements IChatMessage {
@Column() @Column()
chatType: string chatType: string
@Column()
chatId: string
@Column({ nullable: true }) @Column({ nullable: true })
memoryType?: string memoryType?: string

View File

@ -5,15 +5,37 @@ export class AddChatHistory1694658767766 implements MigrationInterface {
const chatTypeColumnExists = await queryRunner.hasColumn('chat_message', 'chatType') const chatTypeColumnExists = await queryRunner.hasColumn('chat_message', 'chatType')
if (!chatTypeColumnExists) if (!chatTypeColumnExists)
await queryRunner.query(`ALTER TABLE \`chat_message\` ADD COLUMN \`chatType\` VARCHAR(255) NOT NULL DEFAULT 'INTERNAL';`) await queryRunner.query(`ALTER TABLE \`chat_message\` ADD COLUMN \`chatType\` VARCHAR(255) NOT NULL DEFAULT 'INTERNAL';`)
const chatIdColumnExists = await queryRunner.hasColumn('chat_message', 'chatId')
if (!chatIdColumnExists) await queryRunner.query(`ALTER TABLE \`chat_message\` ADD COLUMN \`chatId\` VARCHAR(255);`)
const results: { id: string; chatflowid: string }[] = await queryRunner.query(`WITH RankedMessages AS (
SELECT
\`chatflowid\`,
\`id\`,
\`createdDate\`,
ROW_NUMBER() OVER (PARTITION BY \`chatflowid\` ORDER BY \`createdDate\`) AS row_num
FROM \`chat_message\`
)
SELECT \`chatflowid\`, \`id\`
FROM RankedMessages
WHERE row_num = 1;`)
for (const chatMessage of results) {
await queryRunner.query(
`UPDATE \`chat_message\` SET \`chatId\` = '${chatMessage.id}' WHERE \`chatflowid\` = '${chatMessage.chatflowid}'`
)
}
await queryRunner.query(`ALTER TABLE \`chat_message\` MODIFY \`chatId\` VARCHAR(255) NOT NULL;`)
const memoryTypeColumnExists = await queryRunner.hasColumn('chat_message', 'memoryType') const memoryTypeColumnExists = await queryRunner.hasColumn('chat_message', 'memoryType')
if (!memoryTypeColumnExists) await queryRunner.query(`ALTER TABLE \`chat_message\` ADD COLUMN \`memoryType\` VARCHAR(255);`) if (!memoryTypeColumnExists) await queryRunner.query(`ALTER TABLE \`chat_message\` ADD COLUMN \`memoryType\` VARCHAR(255);`)
const sessionIdColumnExists = await queryRunner.hasColumn('chat_message', 'sessionId') const sessionIdColumnExists = await queryRunner.hasColumn('chat_message', 'sessionId')
if (!sessionIdColumnExists) await queryRunner.query(`ALTER TABLE \`chat_message\` ADD COLUMN \`sessionId\` VARCHAR(255);`) if (!sessionIdColumnExists) await queryRunner.query(`ALTER TABLE \`chat_message\` ADD COLUMN \`sessionId\` VARCHAR(255);`)
} }
public async down(queryRunner: QueryRunner): Promise<void> { public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query( await queryRunner.query(
`ALTER TABLE \`chat_message\` DROP COLUMN \`chatType\`, DROP COLUMN \`memoryType\`, DROP COLUMN \`sessionId\`;` `ALTER TABLE \`chat_message\` DROP COLUMN \`chatType\`, DROP COLUMN \`chatId\`, DROP COLUMN \`memoryType\`, DROP COLUMN \`sessionId\`;`
) )
} }
} }

View File

@ -3,11 +3,30 @@ import { MigrationInterface, QueryRunner } from 'typeorm'
export class AddChatHistory1694658756136 implements MigrationInterface { export class AddChatHistory1694658756136 implements MigrationInterface {
public async up(queryRunner: QueryRunner): Promise<void> { public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query( await queryRunner.query(
`ALTER TABLE "chat_message" ADD COLUMN IF NOT EXISTS "chatType" VARCHAR NOT NULL DEFAULT 'INTERNAL', ADD COLUMN IF NOT EXISTS "memoryType" VARCHAR, ADD COLUMN IF NOT EXISTS "sessionId" VARCHAR;` `ALTER TABLE "chat_message" ADD COLUMN IF NOT EXISTS "chatType" VARCHAR NOT NULL DEFAULT 'INTERNAL', ADD COLUMN IF NOT EXISTS "chatId" VARCHAR, ADD COLUMN IF NOT EXISTS "memoryType" VARCHAR, ADD COLUMN IF NOT EXISTS "sessionId" VARCHAR;`
) )
const results: { id: string; chatflowid: string }[] = await queryRunner.query(`WITH RankedMessages AS (
SELECT
"chatflowid",
"id",
"createdDate",
ROW_NUMBER() OVER (PARTITION BY "chatflowid" ORDER BY "createdDate") AS row_num
FROM "chat_message"
)
SELECT "chatflowid", "id"
FROM RankedMessages
WHERE row_num = 1;`)
for (const chatMessage of results) {
await queryRunner.query(
`UPDATE "chat_message" SET "chatId" = '${chatMessage.id}' WHERE "chatflowid" = '${chatMessage.chatflowid}'`
)
}
await queryRunner.query(`ALTER TABLE "chat_message" ALTER COLUMN "chatId" SET NOT NULL;`)
} }
public async down(queryRunner: QueryRunner): Promise<void> { public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "chat_message" DROP COLUMN "chatType", DROP COLUMN "memoryType", DROP COLUMN "sessionId";`) await queryRunner.query(
`ALTER TABLE "chat_message" DROP COLUMN "chatType", DROP COLUMN "chatId", DROP COLUMN "memoryType", DROP COLUMN "sessionId";`
)
} }
} }

View File

@ -2,13 +2,38 @@ import { MigrationInterface, QueryRunner } from 'typeorm'
export class AddChatHistory1694657778173 implements MigrationInterface { export class AddChatHistory1694657778173 implements MigrationInterface {
public async up(queryRunner: QueryRunner): Promise<void> { public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "chat_message" ADD COLUMN "chatType" VARCHAR NOT NULL DEFAULT 'INTERNAL';`) await queryRunner.query(`ALTER TABLE "chat_message" ADD COLUMN "chatId" VARCHAR;`)
await queryRunner.query(`ALTER TABLE "chat_message" ADD COLUMN "memoryType" VARCHAR;`) const results: { id: string; chatflowid: string }[] = await queryRunner.query(`WITH RankedMessages AS (
await queryRunner.query(`ALTER TABLE "chat_message" ADD COLUMN "sessionId" VARCHAR;`) SELECT
"chatflowid",
"id",
"createdDate",
ROW_NUMBER() OVER (PARTITION BY "chatflowid" ORDER BY "createdDate") AS row_num
FROM "chat_message"
)
SELECT "chatflowid", "id"
FROM RankedMessages
WHERE row_num = 1;`)
for (const chatMessage of results) {
await queryRunner.query(
`UPDATE "chat_message" SET "chatId" = '${chatMessage.id}' WHERE "chatflowid" = '${chatMessage.chatflowid}'`
)
}
await queryRunner.query(
`CREATE TABLE "temp_chat_message" ("id" varchar PRIMARY KEY NOT NULL, "role" varchar NOT NULL, "chatflowid" varchar NOT NULL, "content" text NOT NULL, "sourceDocuments" text, "createdDate" datetime NOT NULL DEFAULT (datetime('now')), "chatType" VARCHAR NOT NULL DEFAULT 'INTERNAL', "chatId" VARCHAR NOT NULL, "memoryType" VARCHAR, "sessionId" VARCHAR);`
)
await queryRunner.query(
`INSERT INTO "temp_chat_message" ("id", "role", "chatflowid", "content", "sourceDocuments", "createdDate", "chatId") SELECT "id", "role", "chatflowid", "content", "sourceDocuments", "createdDate", "chatId" FROM "chat_message";`
)
await queryRunner.query(`DROP TABLE "chat_message";`)
await queryRunner.query(`ALTER TABLE "temp_chat_message" RENAME TO "chat_message";`)
await queryRunner.query(`CREATE INDEX "IDX_e574527322272fd838f4f0f3d3" ON "chat_message" ("chatflowid") ;`)
} }
public async down(queryRunner: QueryRunner): Promise<void> { public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`DROP TABLE IF EXISTS "temp_chat_message";`)
await queryRunner.query(`ALTER TABLE "chat_message" DROP COLUMN "chatType";`) await queryRunner.query(`ALTER TABLE "chat_message" DROP COLUMN "chatType";`)
await queryRunner.query(`ALTER TABLE "chat_message" DROP COLUMN "chatId";`)
await queryRunner.query(`ALTER TABLE "chat_message" DROP COLUMN "memoryType";`) await queryRunner.query(`ALTER TABLE "chat_message" DROP COLUMN "memoryType";`)
await queryRunner.query(`ALTER TABLE "chat_message" DROP COLUMN "sessionId";`) await queryRunner.query(`ALTER TABLE "chat_message" DROP COLUMN "sessionId";`)
} }