refactor(store): single account name on users; rename profile/laps tables
users.display_name becomes users.name and is now the only human-facing name -- profiles.name is dropped (it duplicated the account name; the Profile page's Name field now edits users.name through PUT /api/profile, which carries Name alongside the profiles columns). The profile table becomes profiles and laps becomes activity_laps, homogeneous with activity_samples. Onboarding pre-fills the display name from the OIDC claim's name. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -8,26 +8,26 @@
|
||||
-- here rather than appending an ALTER TABLE migration.
|
||||
|
||||
-- One geniusrun account per OIDC subject. Every other table below is scoped
|
||||
-- to a user_id, directly (profile/workout_kinds/activities/sync_state/
|
||||
-- sync_runs) or transitively through a JOIN to the owning row (laps/
|
||||
-- to a user_id, directly (profiles/workout_kinds/activities/sync_state/
|
||||
-- sync_runs) or transitively through a JOIN to the owning row (activity_laps/
|
||||
-- activity_samples/kind_assignments/workout_type_paces, which have no
|
||||
-- user_id column of their own since they're never queried except through a
|
||||
-- specific activity or workout kind).
|
||||
-- specific activity or workout kind). name is the account's single
|
||||
-- human-facing name: set at onboarding, editable from the Profile page.
|
||||
CREATE TABLE users (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
oidc_sub TEXT NOT NULL UNIQUE,
|
||||
display_name TEXT NOT NULL,
|
||||
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
oidc_sub TEXT NOT NULL UNIQUE,
|
||||
name TEXT NOT NULL,
|
||||
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
||||
);
|
||||
|
||||
-- One row per user: Garmin credentials plus every tunable analysis-engine
|
||||
-- parameter (HR zones, phase-detection minutes, pace-artifact filtering,
|
||||
-- chart colors). store.ProvisionUser creates this (and everything else
|
||||
-- below) in one transaction when a new account signs up.
|
||||
CREATE TABLE profile (
|
||||
CREATE TABLE profiles (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
||||
name TEXT NOT NULL DEFAULT 'Default',
|
||||
garmin_email TEXT NOT NULL DEFAULT '',
|
||||
garmin_password TEXT NOT NULL DEFAULT '',
|
||||
-- Set once, the first time this user successfully authenticates with
|
||||
@@ -168,7 +168,7 @@ CREATE INDEX idx_activities_start_time ON activities(start_time_utc);
|
||||
-- One row per lap/split (from get_activity_splits), plus HR drift/recovery
|
||||
-- derived from activity_samples. No user_id column -- always accessed
|
||||
-- through a specific owning activity.
|
||||
CREATE TABLE laps (
|
||||
CREATE TABLE activity_laps (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
activity_id INTEGER NOT NULL REFERENCES activities(id) ON DELETE CASCADE,
|
||||
lap_index INTEGER NOT NULL,
|
||||
|
||||
Reference in New Issue
Block a user