···114114 pull_at text,
115115 rkey text not null,
116116 target_branch text not null,
117117- open integer not null default 1,
117117+ state integer not null default 0 check (state in (0, 1, 2)), -- open, merged, closed
118118 created text not null default (strftime('%Y-%m-%dT%H:%M:%SZ', 'now')),
119119 unique(repo_at, pull_id),
120120 foreign key (repo_at) references repos(at_uri) on delete cascade
+70-15
appview/db/pulls.go
···77 "github.com/bluesky-social/indigo/atproto/syntax"
88)
991010+type PullState int
1111+1212+const (
1313+ PullOpen PullState = iota
1414+ PullMerged
1515+ PullClosed
1616+)
1717+1818+func (p PullState) String() string {
1919+ switch p {
2020+ case PullOpen:
2121+ return "open"
2222+ case PullMerged:
2323+ return "merged"
2424+ case PullClosed:
2525+ return "closed"
2626+ default:
2727+ return "closed"
2828+ }
2929+}
3030+3131+func (p PullState) IsOpen() bool {
3232+ return p == PullOpen
3333+}
3434+func (p PullState) IsMerged() bool {
3535+ return p == PullMerged
3636+}
3737+func (p PullState) IsClosed() bool {
3838+ return p == PullClosed
3939+}
4040+1041type Pull struct {
1142 ID int
1243 OwnerDid string
···1748 PullId int
1849 Title string
1950 Body string
2020- Open int
5151+ State PullState
2152 Created time.Time
2253 Rkey string
2354}
···89120 return pullId - 1, err
90121}
911229292-func GetPulls(e Execer, repoAt syntax.ATURI) ([]Pull, error) {
123123+func GetPulls(e Execer, repoAt syntax.ATURI, state PullState) ([]Pull, error) {
93124 var pulls []Pull
941259595- rows, err := e.Query(`select owner_did, pull_id, created, title, open, target_branch, pull_at, body, patch, rkey from pulls where repo_at = ? order by created desc`, repoAt)
126126+ rows, err := e.Query(`
127127+ select
128128+ owner_did,
129129+ pull_id,
130130+ created,
131131+ title,
132132+ state,
133133+ target_branch,
134134+ pull_at,
135135+ body,
136136+ patch,
137137+ rkey
138138+ from
139139+ pulls
140140+ where
141141+ repo_at = ? and state = ?
142142+ order by
143143+ created desc`, repoAt, state)
96144 if err != nil {
97145 return nil, err
98146 }
···101149 for rows.Next() {
102150 var pull Pull
103151 var createdAt string
104104- err := rows.Scan(&pull.OwnerDid, &pull.PullId, &createdAt, &pull.Title, &pull.Open, &pull.TargetBranch, &pull.PullAt, &pull.Body, &pull.Patch, &pull.Rkey)
152152+ err := rows.Scan(&pull.OwnerDid, &pull.PullId, &createdAt, &pull.Title, &pull.State, &pull.TargetBranch, &pull.PullAt, &pull.Body, &pull.Patch, &pull.Rkey)
105153 if err != nil {
106154 return nil, err
107155 }
···123171}
124172125173func GetPull(e Execer, repoAt syntax.ATURI, pullId int) (*Pull, error) {
126126- query := `select owner_did, created, title, open, target_branch, pull_at, body, patch, rkey from pulls where repo_at = ? and pull_id = ?`
174174+ query := `select owner_did, created, title, state, target_branch, pull_at, body, patch, rkey from pulls where repo_at = ? and pull_id = ?`
127175 row := e.QueryRow(query, repoAt, pullId)
128176129177 var pull Pull
130178 var createdAt string
131131- err := row.Scan(&pull.OwnerDid, &createdAt, &pull.Title, &pull.Open, &pull.TargetBranch, &pull.PullAt, &pull.Body, &pull.Patch, &pull.Rkey)
179179+ err := row.Scan(&pull.OwnerDid, &createdAt, &pull.Title, &pull.State, &pull.TargetBranch, &pull.PullAt, &pull.Body, &pull.Patch, &pull.Rkey)
132180 if err != nil {
133181 return nil, err
134182 }
···143191}
144192145193func GetPullWithComments(e Execer, repoAt syntax.ATURI, pullId int) (*Pull, []PullComment, error) {
146146- query := `select owner_did, pull_id, created, title, open, target_branch, pull_at, body, patch, rkey from pulls where repo_at = ? and pull_id = ?`
194194+ query := `select owner_did, pull_id, created, title, state, target_branch, pull_at, body, patch, rkey from pulls where repo_at = ? and pull_id = ?`
147195 row := e.QueryRow(query, repoAt, pullId)
148196149197 var pull Pull
150198 var createdAt string
151151- err := row.Scan(&pull.OwnerDid, &pull.PullId, &createdAt, &pull.Title, &pull.Open, &pull.TargetBranch, &pull.PullAt, &pull.Body, &pull.Patch, &pull.Rkey)
199199+ err := row.Scan(&pull.OwnerDid, &pull.PullId, &createdAt, &pull.Title, &pull.State, &pull.TargetBranch, &pull.PullAt, &pull.Body, &pull.Patch, &pull.Rkey)
152200 if err != nil {
153201 return nil, nil, err
154202 }
···217265 return comments, nil
218266}
219267268268+func SetPullState(e Execer, repoAt syntax.ATURI, pullId int, pullState PullState) error {
269269+ _, err := e.Exec(`update pulls set state = ? where repo_at = ? and pull_id = ?`, pullState, repoAt, pullId)
270270+ return err
271271+}
272272+220273func ClosePull(e Execer, repoAt syntax.ATURI, pullId int) error {
221221- _, err := e.Exec(`update pulls set open = 0 where repo_at = ? and pull_id = ?`, repoAt, pullId)
274274+ err := SetPullState(e, repoAt, pullId, PullClosed)
222275 return err
223276}
224277225278func ReopenPull(e Execer, repoAt syntax.ATURI, pullId int) error {
226226- _, err := e.Exec(`update pulls set open = 1 where repo_at = ? and pull_id = ?`, repoAt, pullId)
279279+ err := SetPullState(e, repoAt, pullId, PullOpen)
227280 return err
228281}
229282230283func MergePull(e Execer, repoAt syntax.ATURI, pullId int) error {
231231- _, err := e.Exec(`update pulls set open = 2 where repo_at = ? and pull_id = ?`, repoAt, pullId)
284284+ err := SetPullState(e, repoAt, pullId, PullMerged)
232285 return err
233286}
234287235288type PullCount struct {
236289 Open int
290290+ Merged int
237291 Closed int
238292}
239293240294func GetPullCount(e Execer, repoAt syntax.ATURI) (PullCount, error) {
241295 row := e.QueryRow(`
242296 select
243243- count(case when open = 1 then 1 end) as open_count,
244244- count(case when open = 0 then 1 end) as closed_count
297297+ count(case when state = 0 then 1 end) as open_count,
298298+ count(case when state = 1 then 1 end) as merged_count,
299299+ count(case when state = 2 then 1 end) as closed_count
245300 from pulls
246301 where repo_at = ?`,
247302 repoAt,
248303 )
249304250305 var count PullCount
251251- if err := row.Scan(&count.Open, &count.Closed); err != nil {
252252- return PullCount{0, 0}, err
306306+ if err := row.Scan(&count.Open, &count.Merged, &count.Closed); err != nil {
307307+ return PullCount{0, 0, 0}, err
253308 }
254309255310 return count, nil