OXYGENHUB
◆ v0.9.2 oxygenhub / crates / hub / migrations / 0004_proposals.sql
3.3 KiB · SQL · last changed Milestone 0.3: proposals and review 1 month ago source blame history raw
de505df5 Andy McCall ↶ 1
-- Proposals and review (hub spec §7). Approvals are seals in the object
2
-- store; rows here only record intent and discussion.
3
4
-- One number space per repository, shared by proposals and issues.
5
CREATE TABLE numbers (
6
    repo_id INTEGER PRIMARY KEY REFERENCES repositories(id) ON DELETE CASCADE,
7
    next    INTEGER NOT NULL DEFAULT 1
8
);
9
10
CREATE TABLE proposals (
11
    id               INTEGER PRIMARY KEY,
12
    repo_id          INTEGER NOT NULL REFERENCES repositories(id) ON DELETE CASCADE,
13
    number           INTEGER NOT NULL,
14
    title            TEXT NOT NULL,
15
    body             TEXT NOT NULL DEFAULT '',
16
    author_id        INTEGER REFERENCES accounts(id) ON DELETE SET NULL,
17
    author           TEXT NOT NULL DEFAULT '',
18
    state            TEXT NOT NULL DEFAULT 'open' CHECK (state IN ('draft', 'open', 'landed', 'closed')),
19
    target           TEXT NOT NULL,
20
    source_kind      TEXT NOT NULL CHECK (source_kind IN ('bookmark', 'fork', 'changes')),
21
    source_repo_id   INTEGER REFERENCES repositories(id) ON DELETE SET NULL,
22
    source_bookmark  TEXT NOT NULL DEFAULT '',
23
    source_changes   TEXT NOT NULL DEFAULT '',
24
    projected_state  TEXT NOT NULL DEFAULT '',
25
    projected_heads  TEXT NOT NULL DEFAULT '',
26
    projected_target TEXT NOT NULL DEFAULT '',
27
    projected_changes TEXT NOT NULL DEFAULT '',
28
    conflicted       INTEGER NOT NULL DEFAULT 0,
29
    landed_state     TEXT NOT NULL DEFAULT '',
30
    created_ms       INTEGER NOT NULL,
31
    updated_ms       INTEGER NOT NULL,
32
    UNIQUE (repo_id, number)
33
);
34
35
CREATE TABLE proposal_comments (
36
    id          INTEGER PRIMARY KEY,
37
    proposal_id INTEGER NOT NULL REFERENCES proposals(id) ON DELETE CASCADE,
38
    author_id   INTEGER REFERENCES accounts(id) ON DELETE SET NULL,
39
    author      TEXT NOT NULL DEFAULT '',
40
    body        TEXT NOT NULL,
41
    path        TEXT NOT NULL DEFAULT '',
42
    -- The atom the comment anchors to: the change that introduced the line and its index.
43
    anchor_change TEXT NOT NULL DEFAULT '',
44
    anchor_index  INTEGER NOT NULL DEFAULT 0,
45
    resolved    INTEGER NOT NULL DEFAULT 0,
46
    created_ms  INTEGER NOT NULL
47
);
48
CREATE INDEX proposal_comments_by_proposal ON proposal_comments (proposal_id, created_ms);
49
50
CREATE TABLE proposal_reviews (
51
    id          INTEGER PRIMARY KEY,
52
    proposal_id INTEGER NOT NULL REFERENCES proposals(id) ON DELETE CASCADE,
53
    author_id   INTEGER NOT NULL REFERENCES accounts(id) ON DELETE CASCADE,
54
    author      TEXT NOT NULL DEFAULT '',
55
    verdict     TEXT NOT NULL CHECK (verdict IN ('comment', 'changes', 'approve')),
56
    body        TEXT NOT NULL DEFAULT '',
57
    created_ms  INTEGER NOT NULL
58
);
59
CREATE INDEX proposal_reviews_by_proposal ON proposal_reviews (proposal_id, created_ms);
60
61
CREATE TABLE proposal_events (
62
    id          INTEGER PRIMARY KEY,
63
    proposal_id INTEGER NOT NULL REFERENCES proposals(id) ON DELETE CASCADE,
64
    at_ms       INTEGER NOT NULL,
65
    actor       TEXT NOT NULL DEFAULT '',
66
    event       TEXT NOT NULL,
67
    detail      TEXT NOT NULL DEFAULT ''
68
);
69
70
-- Landing requirements per repository (hub spec §7.4).
71
ALTER TABLE repositories ADD COLUMN required_approvals INTEGER NOT NULL DEFAULT 0;
72
ALTER TABLE repositories ADD COLUMN require_owners INTEGER NOT NULL DEFAULT 0;
73
ALTER TABLE repositories ADD COLUMN allow_conflicts INTEGER NOT NULL DEFAULT 0;