From b5024631f7ba1f600ea8581e46f2d35b876a1b7d Mon Sep 17 00:00:00 2001 From: Justin Lin Date: Fri, 9 Oct 2026 23:49:12 +1100 Subject: [PATCH 1/6] fix: store session finish time --- server/src/models/sessionManager.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/server/src/models/sessionManager.ts b/server/src/models/sessionManager.ts index c58266e..c37e7e1 100644 --- a/server/src/models/sessionManager.ts +++ b/server/src/models/sessionManager.ts @@ -97,6 +97,7 @@ export async function finishSession( session: HydratedDocument ): Promise { session.status = 'finished' + session.finishedAt = new Date() await session.save() const userProfile = await UserProfile.findOne({ user: session.user }) From 994618f71c336d5ebfb8e6211eba61e23c14c839 Mon Sep 17 00:00:00 2001 From: Justin Lin Date: Fri, 9 Oct 2026 23:51:09 +1100 Subject: [PATCH 2/6] feat: display session locale --- services/analytics/src/interface.ts | 13 ++++--------- services/analytics/src/models/sessions.ts | 17 ++++++++++++++++- services/analytics/views/sessions.handlebars | 4 +++- 3 files changed, 23 insertions(+), 11 deletions(-) diff --git a/services/analytics/src/interface.ts b/services/analytics/src/interface.ts index 94ed03b..36421c4 100644 --- a/services/analytics/src/interface.ts +++ b/services/analytics/src/interface.ts @@ -8,8 +8,10 @@ export interface SessionDocument { user: User quest: string status: string + locale: string createdAt: Date finishedAt: Date + lastActivityAt: Date } export interface CommandObject { command: string @@ -23,22 +25,15 @@ export interface SessionObject { _id: Types.ObjectId user: string quest: string + locale: string status: string createdAt: string finishedAt: string lastActivityAt: string usedTime: string commandCount: number - commands: CommandObject[] } -export interface SessionDetail { - _id: Types.ObjectId - user: string - quest: string - status: string - createdAt: string - finishedAt: string - usedTime: string +export interface SessionDetail extends SessionObject { commands: CommandObject[] } export interface IUser extends Document { diff --git a/services/analytics/src/models/sessions.ts b/services/analytics/src/models/sessions.ts index 19928d7..8e2c114 100644 --- a/services/analytics/src/models/sessions.ts +++ b/services/analytics/src/models/sessions.ts @@ -45,6 +45,7 @@ export async function sessionList( _id, user, quest, + locale, status, createdAt, finishedAt, @@ -55,6 +56,7 @@ export async function sessionList( _id, user: user.username, // Assuming `user` is always populated. quest, + locale: locale ?? 'zh-TW', status, createdAt: createdAt?.toLocaleString(), finishedAt: finishedAt?.toLocaleString(), @@ -83,14 +85,27 @@ export async function sessionDetail(id: string): Promise { createdAt: createdAt?.toLocaleString(), }) ) - const { _id, user, quest, status, createdAt, finishedAt } = session + const { + _id, + user, + quest, + locale, + status, + createdAt, + finishedAt, + lastActivityAt, + } = session + console.log('session: ', session) return { _id, user: user.username, quest, + locale: locale ?? 'zh-TW', status, createdAt: createdAt?.toLocaleString(), finishedAt: finishedAt?.toLocaleString(), + lastActivityAt: lastActivityAt?.toLocaleDateString(), + commandCount: commands.length, usedTime: finishedAt ? formatTime(finishedAt.getTime() - createdAt.getTime()) : '', diff --git a/services/analytics/views/sessions.handlebars b/services/analytics/views/sessions.handlebars index 765ce13..21c2223 100644 --- a/services/analytics/views/sessions.handlebars +++ b/services/analytics/views/sessions.handlebars @@ -12,6 +12,7 @@ User Quest + Locale Status Created At Finished At @@ -23,6 +24,7 @@ {{user}} {{quest}} + {{locale}} {{status}} {{createdAt}} {{finishedAt}} @@ -37,4 +39,4 @@

Next

- \ No newline at end of file + From accfbc620c182daedeeeed42c998283099250ffc Mon Sep 17 00:00:00 2001 From: Justin Lin Date: Fri, 9 Oct 2026 23:54:32 +1100 Subject: [PATCH 3/6] feat: add link to user from session list --- services/analytics/src/interface.ts | 3 ++- services/analytics/src/models/sessions.ts | 4 ++-- services/analytics/views/sessions.handlebars | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/services/analytics/src/interface.ts b/services/analytics/src/interface.ts index 36421c4..9350749 100644 --- a/services/analytics/src/interface.ts +++ b/services/analytics/src/interface.ts @@ -1,6 +1,7 @@ import { Types } from 'mongoose' export interface User { + _id: string username: string } export interface SessionDocument { @@ -23,7 +24,7 @@ export interface CommandObject { } export interface SessionObject { _id: Types.ObjectId - user: string + user: User quest: string locale: string status: string diff --git a/services/analytics/src/models/sessions.ts b/services/analytics/src/models/sessions.ts index 8e2c114..9b34c11 100644 --- a/services/analytics/src/models/sessions.ts +++ b/services/analytics/src/models/sessions.ts @@ -54,7 +54,7 @@ export async function sessionList( } = session return { _id, - user: user.username, // Assuming `user` is always populated. + user: { _id: user._id, username: user.username }, quest, locale: locale ?? 'zh-TW', status, @@ -98,7 +98,7 @@ export async function sessionDetail(id: string): Promise { console.log('session: ', session) return { _id, - user: user.username, + user: { _id: user._id, username: user.username }, quest, locale: locale ?? 'zh-TW', status, diff --git a/services/analytics/views/sessions.handlebars b/services/analytics/views/sessions.handlebars index 21c2223..c3b3c09 100644 --- a/services/analytics/views/sessions.handlebars +++ b/services/analytics/views/sessions.handlebars @@ -22,7 +22,7 @@ {{#each sessions}} - {{user}} + {{user.username}} {{quest}} {{locale}} {{status}} From 3d6eaf6b646183c01512d6f97014252ad75215b8 Mon Sep 17 00:00:00 2001 From: Justin Lin Date: Sat, 10 Oct 2026 00:12:30 +1100 Subject: [PATCH 4/6] fix: disable join commands on session list for performance --- services/analytics/src/models/sessions.ts | 12 +----------- services/analytics/views/sessions.handlebars | 2 -- 2 files changed, 1 insertion(+), 13 deletions(-) diff --git a/services/analytics/src/models/sessions.ts b/services/analytics/src/models/sessions.ts index 9b34c11..e789bc4 100644 --- a/services/analytics/src/models/sessions.ts +++ b/services/analytics/src/models/sessions.ts @@ -28,14 +28,6 @@ export async function sessionList( }, }, { $unwind: '$user' }, - { - $lookup: { - from: 'commands', - localField: '_id', - foreignField: 'session', - as: 'commands', - }, - }, pagination.sort('_id'), pagination.limit(), ]) @@ -49,7 +41,6 @@ export async function sessionList( status, createdAt, finishedAt, - commands, lastActivityAt, } = session return { @@ -65,8 +56,7 @@ export async function sessionList( lastActivityAt && createdAt ? formatTime(lastActivityAt.getTime() - createdAt.getTime()) : 'N/A', // Ensure both dates are present - commandCount: commands?.length || 0, - commands, + commandCount: 0, } }) } diff --git a/services/analytics/views/sessions.handlebars b/services/analytics/views/sessions.handlebars index c3b3c09..1ef718f 100644 --- a/services/analytics/views/sessions.handlebars +++ b/services/analytics/views/sessions.handlebars @@ -17,7 +17,6 @@ Created At Finished At Used Time - Command Count Session {{#each sessions}} @@ -29,7 +28,6 @@ {{createdAt}} {{finishedAt}} {{usedTime}} - {{commandCount}} Detail {{/each}} From 218c4cce44a9d1c79a622b05adf5b34c927dfcf9 Mon Sep 17 00:00:00 2001 From: Justin Lin Date: Sat, 10 Oct 2026 00:15:02 +1100 Subject: [PATCH 5/6] feat: show locale and user link on session detail --- services/analytics/views/sessionDetail.handlebars | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/services/analytics/views/sessionDetail.handlebars b/services/analytics/views/sessionDetail.handlebars index f6af4fa..cf1938a 100644 --- a/services/analytics/views/sessionDetail.handlebars +++ b/services/analytics/views/sessionDetail.handlebars @@ -6,9 +6,13 @@ Quest {{quest}} + + Locale + {{locale}} + User - {{user}} + {{user.username}} Status @@ -55,4 +59,4 @@ {{/each}} - {{/with}} \ No newline at end of file + {{/with}} From 4c3b7434c9acf7cc80d6832c61a87f43afd6bab8 Mon Sep 17 00:00:00 2001 From: Justin Lin Date: Sat, 10 Oct 2026 00:15:26 +1100 Subject: [PATCH 6/6] chore: clean up logs --- services/analytics/src/models/sessions.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/services/analytics/src/models/sessions.ts b/services/analytics/src/models/sessions.ts index e789bc4..6fc2c2b 100644 --- a/services/analytics/src/models/sessions.ts +++ b/services/analytics/src/models/sessions.ts @@ -85,7 +85,6 @@ export async function sessionDetail(id: string): Promise { finishedAt, lastActivityAt, } = session - console.log('session: ', session) return { _id, user: { _id: user._id, username: user.username },