diff --git a/.changeset/activity-user-names.md b/.changeset/activity-user-names.md new file mode 100644 index 000000000..3b1026e46 --- /dev/null +++ b/.changeset/activity-user-names.md @@ -0,0 +1,4 @@ +--- +--- + +Display user names instead of Slack IDs in proactive outreach history diff --git a/server/public/admin-outreach.html b/server/public/admin-outreach.html index b0ee31d8b..ffe78b0f0 100644 --- a/server/public/admin-outreach.html +++ b/server/public/admin-outreach.html @@ -663,10 +663,12 @@

New Variant

function renderHistory() { const tbody = document.getElementById('history-body'); - tbody.innerHTML = history.map(item => ` + tbody.innerHTML = history.map(item => { + const userName = item.slack_display_name || item.slack_real_name || item.slack_user_id; + return ` ${formatDate(item.sent_at)} - ${escapeHtml(item.slack_user_id)} + ${escapeHtml(userName)} ${item.outreach_type} ${item.tone ? `${item.tone} / ${item.approach}` : '—'} @@ -680,7 +682,7 @@

New Variant

- `).join(''); + `}).join(''); } async function loadVariants() { diff --git a/server/src/db/insights-db.ts b/server/src/db/insights-db.ts index 91d75f395..6762f52cb 100644 --- a/server/src/db/insights-db.ts +++ b/server/src/db/insights-db.ts @@ -117,6 +117,11 @@ export interface ResponseAnalysis { analysisNote: string; } +export interface MemberOutreachWithUser extends MemberOutreach { + slack_display_name: string | null; + slack_real_name: string | null; +} + // Input types export interface CreateInsightTypeInput { name: string; @@ -1295,9 +1300,13 @@ export class InsightsDatabase { /** * Get recent outreach history for admin dashboard */ - async getRecentOutreach(limit = 50): Promise { - const result = await query( - 'SELECT * FROM member_outreach ORDER BY sent_at DESC LIMIT $1', + async getRecentOutreach(limit = 50): Promise { + const result = await query( + `SELECT mo.*, sm.slack_display_name, sm.slack_real_name + FROM member_outreach mo + LEFT JOIN slack_user_mappings sm ON sm.slack_user_id = mo.slack_user_id + ORDER BY mo.sent_at DESC + LIMIT $1`, [limit] ); return result.rows;