From 0bd1f1049820bbc569f14923e37bb40489f74c84 Mon Sep 17 00:00:00 2001 From: DarkSky <25152247+darkskygit@users.noreply.github.com> Date: Tue, 8 Jul 2025 21:16:56 +0800 Subject: [PATCH] fix(server): session updated at (#13099) fix AI-325 ## Summary by CodeRabbit * **Chores** * Improved database handling for session update times to ensure more accurate tracking of session activity. * Enhanced migration process to better manage and update session metadata. --- .../migration.sql | 6 +++- ...51966744168-correct-session-update-time.ts | 34 +++++++++++++++++++ .../server/src/data/migrations/index.ts | 1 + 3 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 packages/backend/server/src/data/migrations/1751966744168-correct-session-update-time.ts diff --git a/packages/backend/server/migrations/20250625070609_ai_session_updated_at/migration.sql b/packages/backend/server/migrations/20250625070609_ai_session_updated_at/migration.sql index 3fac9cd02..7595483b7 100644 --- a/packages/backend/server/migrations/20250625070609_ai_session_updated_at/migration.sql +++ b/packages/backend/server/migrations/20250625070609_ai_session_updated_at/migration.sql @@ -1,5 +1,9 @@ -- AlterTable -ALTER TABLE "ai_sessions_metadata" ADD COLUMN "updated_at" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP; +ALTER TABLE ai_sessions_metadata ADD COLUMN updated_at TIMESTAMPTZ(3); + +UPDATE ai_sessions_metadata SET updated_at = created_at; + +ALTER TABLE ai_sessions_metadata ALTER COLUMN updated_at SET NOT NULL, ALTER COLUMN updated_at SET DEFAULT CURRENT_TIMESTAMP; -- DropIndex DROP INDEX IF EXISTS "ai_session_unique_doc_session_idx"; \ No newline at end of file diff --git a/packages/backend/server/src/data/migrations/1751966744168-correct-session-update-time.ts b/packages/backend/server/src/data/migrations/1751966744168-correct-session-update-time.ts new file mode 100644 index 000000000..1ea17170b --- /dev/null +++ b/packages/backend/server/src/data/migrations/1751966744168-correct-session-update-time.ts @@ -0,0 +1,34 @@ +import { PrismaClient } from '@prisma/client'; + +type SessionTime = { + sessionId: string; + _max: { + createdAt: Date; + }; +}; + +export class CorrectSessionUpdateTime1751966744168 { + // do the migration + static async up(db: PrismaClient) { + const sessionTime = await db.aiSessionMessage.groupBy({ + by: ['sessionId'], + _max: { + createdAt: true, + }, + }); + + await Promise.all( + sessionTime + .filter((s): s is SessionTime => !!s._max.createdAt) + .map(s => + db.aiSession.update({ + where: { id: s.sessionId }, + data: { updatedAt: s._max.createdAt }, + }) + ) + ); + } + + // revert the migration + static async down(_db: PrismaClient) {} +} diff --git a/packages/backend/server/src/data/migrations/index.ts b/packages/backend/server/src/data/migrations/index.ts index adf0c8529..314c09663 100644 --- a/packages/backend/server/src/data/migrations/index.ts +++ b/packages/backend/server/src/data/migrations/index.ts @@ -6,3 +6,4 @@ export * from './1732861452428-migrate-invite-status'; export * from './1733125339942-universal-subscription'; export * from './1738590347632-feature-redundant'; export * from './1745211351719-create-indexer-tables'; +export * from './1751966744168-correct-session-update-time';