v1.5 - history and timeline as well as many datastructure updates added, polished, fixes
This commit is contained in:
parent
1f0aa3078f
commit
1d84400aef
63 changed files with 7927 additions and 208 deletions
85
server/src/migrations/008_timeline_view.sql
Normal file
85
server/src/migrations/008_timeline_view.sql
Normal file
|
|
@ -0,0 +1,85 @@
|
|||
-- ═══════════════════════════════════════════════════════════════
|
||||
-- 008 v_timeline
|
||||
--
|
||||
-- 007's tables, indexes and all eight triggers landed; its view did
|
||||
-- not. This file creates it, and nothing else.
|
||||
--
|
||||
-- The definition below is byte-identical to the one at the foot of
|
||||
-- 007. That is deliberate: a fresh database built from 007 and an
|
||||
-- existing one upgraded through 008 must end up with the same view,
|
||||
-- or a restore from backup six months from now produces a subtly
|
||||
-- different site. Leave 007 exactly as it is.
|
||||
--
|
||||
-- No BEGIN...END anywhere in this file — two plain statements and a
|
||||
-- pragma — so a runner that splits on semicolons treats it the same
|
||||
-- way one that doesn't would. 007's triggers are the only place in
|
||||
-- the schema where that distinction bites, and they are already in.
|
||||
--
|
||||
-- Safe to run twice: DROP VIEW IF EXISTS makes it idempotent, and
|
||||
-- dropping a view touches no data.
|
||||
--
|
||||
-- PRAGMA user_version; -- reads 7 before this file
|
||||
-- ═══════════════════════════════════════════════════════════════
|
||||
|
||||
DROP VIEW IF EXISTS v_timeline;
|
||||
|
||||
CREATE VIEW v_timeline AS
|
||||
SELECT
|
||||
t.id,
|
||||
t.kind,
|
||||
t.ref_kind,
|
||||
t.ref_id,
|
||||
t.precision,
|
||||
t.is_featured,
|
||||
t.is_published,
|
||||
t.sort_order,
|
||||
|
||||
COALESCE(t.occurred_on, e.starts_on, pa.awarded_on) AS effective_date,
|
||||
|
||||
COALESCE(
|
||||
t.title,
|
||||
e.title,
|
||||
o.name,
|
||||
aw.name,
|
||||
p.display_name,
|
||||
tm.name
|
||||
) AS effective_title,
|
||||
|
||||
COALESCE(t.blurb, e.tagline, o.tagline, aw.description, p.tagline, tm.tagline)
|
||||
AS effective_blurb,
|
||||
t.meta,
|
||||
t.link_url,
|
||||
|
||||
-- Filename only. The directory is the frontend's business.
|
||||
COALESCE(e.event_logo, e.org_logo, o.logo, aw.logo, p.photo, tm.logo)
|
||||
AS effective_logo,
|
||||
|
||||
o.kind AS org_kind,
|
||||
tm.org_id AS team_org_id,
|
||||
tm.name AS team_name,
|
||||
|
||||
-- Whether the referenced record is itself visible. An entry must not
|
||||
-- outlive the thing it points at being unpublished — a draft event
|
||||
-- would otherwise leak its title and date onto a public page. Null
|
||||
-- for a standalone milestone, which answers to nothing but its own
|
||||
-- is_published.
|
||||
CASE t.ref_kind
|
||||
WHEN 'event' THEN e.is_published
|
||||
WHEN 'organization' THEN o.is_published
|
||||
WHEN 'person' THEN p.is_published
|
||||
WHEN 'team' THEN tm.is_published
|
||||
ELSE NULL
|
||||
END AS ref_is_published,
|
||||
t.occurred_on,
|
||||
t.title AS title_override
|
||||
FROM timeline_entries t
|
||||
LEFT JOIN events e ON t.ref_kind = 'event' AND e.id = t.ref_id
|
||||
LEFT JOIN organizations o ON t.ref_kind = 'organization' AND o.id = t.ref_id
|
||||
LEFT JOIN awards aw ON t.ref_kind = 'award' AND aw.id = t.ref_id
|
||||
LEFT JOIN people p ON t.ref_kind = 'person' AND p.id = t.ref_id
|
||||
LEFT JOIN teams tm ON t.ref_kind = 'team' AND tm.id = t.ref_id
|
||||
LEFT JOIN person_awards pa ON t.ref_kind = 'award' AND pa.award_id = t.ref_id
|
||||
AND pa.id = (SELECT MIN(id) FROM person_awards
|
||||
WHERE award_id = t.ref_id);
|
||||
|
||||
PRAGMA user_version = 8;
|
||||
Loading…
Add table
Add a link
Reference in a new issue