All checks were successful
Deploy Development / deploy (push) Successful in 44s
Test Suite / pytest-backend (push) Successful in 4m54s
Test Suite / lint-backend (push) Successful in 2s
Test Suite / compose-smoke (push) Has been skipped
Test Suite / k6 /api/health Baseline (push) Successful in 18s
Test Suite / playwright-smoke (push) Successful in 13s
PO No-Go A1 adressieren: Tages-Tracking mit Messnotiz, Work-UI für Übung, Next-Action-Link, Gate-Fortschritt in Kontrolle, Eingang aus A1-Nav entfernt. Co-authored-by: Cursor <cursoragent@cursor.com>
26 lines
1022 B
SQL
26 lines
1022 B
SQL
-- AP A1.1 — CadenceInstance (minimal): eine offene Instanz pro Recurring, Tages-Tracking
|
|
|
|
CREATE TABLE cadence_instances (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
tenant_id UUID NOT NULL REFERENCES tenants(id) ON DELETE CASCADE,
|
|
recurring_element_id UUID NOT NULL REFERENCES recurring_elements(id) ON DELETE CASCADE,
|
|
status VARCHAR(32) NOT NULL DEFAULT 'open'
|
|
CHECK (status IN ('open', 'completed')),
|
|
due_at TIMESTAMPTZ NOT NULL,
|
|
completed_at TIMESTAMPTZ NULL,
|
|
measurement_note TEXT NOT NULL DEFAULT '',
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
);
|
|
|
|
CREATE INDEX idx_cadence_instances_tenant_recurring
|
|
ON cadence_instances(tenant_id, recurring_element_id);
|
|
|
|
CREATE INDEX idx_cadence_instances_open_due
|
|
ON cadence_instances(tenant_id, due_at)
|
|
WHERE status = 'open';
|
|
|
|
CREATE UNIQUE INDEX idx_cadence_instances_one_open_per_recurring
|
|
ON cadence_instances(recurring_element_id)
|
|
WHERE status = 'open';
|