feat(dashboard): dashboard_layout table + repo

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
root
2026-06-02 22:17:27 +10:00
parent 629b42f502
commit c67ac27545
3 changed files with 61 additions and 0 deletions

View File

@@ -0,0 +1,10 @@
-- 012_dashboard_layout.sql
-- Single global, owner-scoped dashboard layout. One logical row keyed by a
-- stable owner key (v2 is single-owner; 'owner' is the only key for now).
CREATE TABLE dashboard_layout (
owner_key text PRIMARY KEY DEFAULT 'owner',
card_order jsonb NOT NULL DEFAULT '[]'::jsonb, -- ["clock","weather",...]
hidden jsonb NOT NULL DEFAULT '[]'::jsonb, -- ["speedtest"]
sizes jsonb NOT NULL DEFAULT '{}'::jsonb, -- {"weather":"s"}
updated_at timestamptz NOT NULL DEFAULT now()
);

View File

@@ -0,0 +1,24 @@
import { pool } from '../pool.js';
const DEFAULTS = { card_order: [], hidden: [], sizes: {} };
export async function get() {
const { rows } = await pool.query(
`SELECT card_order, hidden, sizes FROM dashboard_layout WHERE owner_key = 'owner'`
);
return rows[0] || { ...DEFAULTS };
}
export async function put({ card_order = [], hidden = [], sizes = {} }) {
await pool.query(
`INSERT INTO dashboard_layout (owner_key, card_order, hidden, sizes, updated_at)
VALUES ('owner', $1::jsonb, $2::jsonb, $3::jsonb, now())
ON CONFLICT (owner_key) DO UPDATE
SET card_order = EXCLUDED.card_order,
hidden = EXCLUDED.hidden,
sizes = EXCLUDED.sizes,
updated_at = now()`,
[JSON.stringify(card_order), JSON.stringify(hidden), JSON.stringify(sizes)]
);
return get();
}