@@ -1119,6 +1119,7 @@ type IssuesOptions struct { //nolint
1119
1119
PosterID int64
1120
1120
MentionedID int64
1121
1121
ReviewRequestedID int64
1122
+ ReviewedID int64
1122
1123
SubscriberID int64
1123
1124
MilestoneIDs []int64
1124
1125
ProjectID int64
@@ -1233,6 +1234,10 @@ func (opts *IssuesOptions) setupSessionNoLimit(sess *xorm.Session) {
1233
1234
applyReviewRequestedCondition (sess , opts .ReviewRequestedID )
1234
1235
}
1235
1236
1237
+ if opts .ReviewedID > 0 {
1238
+ applyReviewedCondition (sess , opts .ReviewedID )
1239
+ }
1240
+
1236
1241
if opts .SubscriberID > 0 {
1237
1242
applySubscribedCondition (sess , opts .SubscriberID )
1238
1243
}
@@ -1403,6 +1408,33 @@ func applyReviewRequestedCondition(sess *xorm.Session, reviewRequestedID int64)
1403
1408
reviewRequestedID , ReviewTypeApprove , ReviewTypeReject , ReviewTypeRequest , reviewRequestedID )
1404
1409
}
1405
1410
1411
+ func applyReviewedCondition (sess * xorm.Session , reviewedID int64 ) * xorm.Session {
1412
+ // Query for pull requests where you are a reviewer or commenter, excluding
1413
+ // any pull requests already returned by the the review requested filter.
1414
+ notPoster := builder.Neq {"issue.poster_id" : reviewedID }
1415
+ reviewed := builder .In ("issue.id" , builder .
1416
+ Select ("issue_id" ).
1417
+ From ("review" ).
1418
+ Where (builder .And (
1419
+ builder.Neq {"type" : ReviewTypeRequest },
1420
+ builder .Or (
1421
+ builder.Eq {"reviewer_id" : reviewedID },
1422
+ builder .In ("reviewer_team_id" , builder .
1423
+ Select ("team_id" ).
1424
+ From ("team_user" ).
1425
+ Where (builder.Eq {"uid" : reviewedID }),
1426
+ ),
1427
+ ),
1428
+ )),
1429
+ )
1430
+ comment := builder .In ("issue.id" , builder .
1431
+ Select ("issue_id" ).
1432
+ From ("comment" ).
1433
+ Where (builder.Eq {"poster_id" : reviewedID }),
1434
+ )
1435
+ return sess .And (notPoster , reviewed , comment )
1436
+ }
1437
+
1406
1438
func applySubscribedCondition (sess * xorm.Session , subscriberID int64 ) * xorm.Session {
1407
1439
return sess .And (
1408
1440
builder .
@@ -1557,6 +1589,7 @@ type IssueStats struct {
1557
1589
CreateCount int64
1558
1590
MentionCount int64
1559
1591
ReviewRequestedCount int64
1592
+ ReviewedCount int64
1560
1593
}
1561
1594
1562
1595
// Filter modes.
@@ -1566,6 +1599,7 @@ const (
1566
1599
FilterModeCreate
1567
1600
FilterModeMention
1568
1601
FilterModeReviewRequested
1602
+ FilterModeReviewed
1569
1603
FilterModeYourRepositories
1570
1604
)
1571
1605
@@ -1579,6 +1613,7 @@ type IssueStatsOptions struct {
1579
1613
MentionedID int64
1580
1614
PosterID int64
1581
1615
ReviewRequestedID int64
1616
+ ReviewedID int64
1582
1617
IsPull util.OptionalBool
1583
1618
IssueIDs []int64
1584
1619
}
@@ -1617,6 +1652,7 @@ func GetIssueStats(opts *IssueStatsOptions) (*IssueStats, error) {
1617
1652
accum .CreateCount += stats .CreateCount
1618
1653
accum .OpenCount += stats .MentionCount
1619
1654
accum .ReviewRequestedCount += stats .ReviewRequestedCount
1655
+ accum .ReviewedCount += stats .ReviewedCount
1620
1656
i = chunk
1621
1657
}
1622
1658
return accum , nil
@@ -1674,6 +1710,10 @@ func getIssueStatsChunk(opts *IssueStatsOptions, issueIDs []int64) (*IssueStats,
1674
1710
applyReviewRequestedCondition (sess , opts .ReviewRequestedID )
1675
1711
}
1676
1712
1713
+ if opts .ReviewedID > 0 {
1714
+ applyReviewedCondition (sess , opts .ReviewedID )
1715
+ }
1716
+
1677
1717
switch opts .IsPull {
1678
1718
case util .OptionalBoolTrue :
1679
1719
sess .And ("issue.is_pull=?" , true )
@@ -1814,6 +1854,19 @@ func GetUserIssueStats(opts UserIssueStatsOptions) (*IssueStats, error) {
1814
1854
if err != nil {
1815
1855
return nil , err
1816
1856
}
1857
+ case FilterModeReviewed :
1858
+ stats .OpenCount , err = applyReviewedCondition (sess (cond ), opts .UserID ).
1859
+ And ("issue.is_closed = ?" , false ).
1860
+ Count (new (Issue ))
1861
+ if err != nil {
1862
+ return nil , err
1863
+ }
1864
+ stats .ClosedCount , err = applyReviewedCondition (sess (cond ), opts .UserID ).
1865
+ And ("issue.is_closed = ?" , true ).
1866
+ Count (new (Issue ))
1867
+ if err != nil {
1868
+ return nil , err
1869
+ }
1817
1870
}
1818
1871
1819
1872
cond = cond .And (builder.Eq {"issue.is_closed" : opts .IsClosed })
@@ -1842,6 +1895,11 @@ func GetUserIssueStats(opts UserIssueStatsOptions) (*IssueStats, error) {
1842
1895
return nil , err
1843
1896
}
1844
1897
1898
+ stats .ReviewedCount , err = applyReviewedCondition (sess (cond ), opts .UserID ).Count (new (Issue ))
1899
+ if err != nil {
1900
+ return nil , err
1901
+ }
1902
+
1845
1903
return stats , nil
1846
1904
}
1847
1905
0 commit comments