feat(meetings): call log, past pagination + date filter; last-seen exact time (batch83)
#7 The past list was hard-capped at 12 (a .slice(0,12) in the client) and there was NO record of how many people were ever in a finished call — so the "only calls with >2 people" rule was impossible to apply. Added a call_history table: signaling tracks the HIGH-WATER participant count per room and logs the call when the room tears down (scheduled meetings are skipped — they already have their own row). Past meetings now follow the rules asked for: • a plain 1:1 direct call is NOT listed — unless it produced a recording/transcript (those already surface as recording entries); • a call that ever held MORE than 2 people IS listed (e.g. a 1:1 a third person joined), showing its participant count and duration; • entries are visible only to people who were actually in the call (or the group). Server-side pagination (10/page) + a from/to date filter; nothing is double-listed. #2 Last seen now shows the exact time/date, WhatsApp-style — "last seen today at 1:36 PM", "last seen yesterday at 10:15 AM", "last seen 14/07/2026 at 9:00 AM" — instead of "10 minutes ago". Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -238,6 +238,24 @@ try { db.exec('CREATE INDEX IF NOT EXISTS idx_users_bizgaze_user_id ON users(biz
|
||||
// When two accounts merge (#2), the merged-away row is deleted. This records old_id -> survivor so
|
||||
// any lingering reference to the old id (a cached contact, an in-flight DM) resolves to the survivor
|
||||
// instead of hitting a deleted user (which made messages to merged contacts silently vanish).
|
||||
// #7: a log of finished CALLS (ad-hoc / group / 1:1). Scheduled meetings already have their own row, so
|
||||
// they're not duplicated here. `peak` is the most people who were in the room at once — that's what lets
|
||||
// "Past meetings" show a call that grew past 2 people while hiding plain 1:1s.
|
||||
db.exec(`
|
||||
CREATE TABLE IF NOT EXISTS call_history (
|
||||
id TEXT PRIMARY KEY,
|
||||
team_id TEXT NOT NULL,
|
||||
room TEXT NOT NULL,
|
||||
group_id TEXT,
|
||||
kind TEXT,
|
||||
title TEXT,
|
||||
peak INTEGER NOT NULL DEFAULT 0,
|
||||
participants TEXT,
|
||||
uids TEXT,
|
||||
started_at INTEGER NOT NULL,
|
||||
ended_at INTEGER NOT NULL
|
||||
)`);
|
||||
try { db.exec('CREATE INDEX IF NOT EXISTS idx_call_history_team ON call_history(team_id, ended_at)'); } catch (e) {}
|
||||
db.exec(`
|
||||
CREATE TABLE IF NOT EXISTS user_aliases (
|
||||
old_id TEXT PRIMARY KEY,
|
||||
|
||||
Reference in New Issue
Block a user