@@ -162,6 +162,18 @@ func (issue *Issue) LoadAttributes() error {
162
162
return issue .loadAttributes (x )
163
163
}
164
164
165
+ // GetIsRead load the `IsRead` field of the issue
166
+ func (issue * Issue ) GetIsRead (userID int64 ) error {
167
+ issueUser := & IssueUser {IssueID : issue .ID , UID : userID }
168
+ if has , err := x .Get (issueUser ); err != nil {
169
+ return err
170
+ } else if ! has {
171
+ return ErrUserNotExist {UID : userID }
172
+ }
173
+ issue .IsRead = issueUser .IsRead
174
+ return nil
175
+ }
176
+
165
177
// HTMLURL returns the absolute URL to this issue.
166
178
func (issue * Issue ) HTMLURL () string {
167
179
var path string
@@ -473,8 +485,6 @@ func (issue *Issue) changeStatus(e *xorm.Session, doer *User, repo *Repository,
473
485
474
486
if err = updateIssueCols (e , issue , "is_closed" ); err != nil {
475
487
return err
476
- } else if err = updateIssueUsersByStatus (e , issue .ID , isClosed ); err != nil {
477
- return err
478
488
}
479
489
480
490
// Update issue count of labels
@@ -999,13 +1009,9 @@ type IssueUser struct {
999
1009
ID int64 `xorm:"pk autoincr"`
1000
1010
UID int64 `xorm:"INDEX"` // User ID.
1001
1011
IssueID int64
1002
- RepoID int64 `xorm:"INDEX"`
1003
- MilestoneID int64
1004
1012
IsRead bool
1005
1013
IsAssigned bool
1006
1014
IsMentioned bool
1007
- IsPoster bool
1008
- IsClosed bool
1009
1015
}
1010
1016
1011
1017
func newIssueUsers (e * xorm.Session , repo * Repository , issue * Issue ) error {
@@ -1021,24 +1027,17 @@ func newIssueUsers(e *xorm.Session, repo *Repository, issue *Issue) error {
1021
1027
// and just waste 1 unit is cheaper than re-allocate memory once.
1022
1028
issueUsers := make ([]* IssueUser , 0 , len (assignees )+ 1 )
1023
1029
for _ , assignee := range assignees {
1024
- isPoster := assignee .ID == issue .PosterID
1025
1030
issueUsers = append (issueUsers , & IssueUser {
1026
1031
IssueID : issue .ID ,
1027
- RepoID : repo .ID ,
1028
1032
UID : assignee .ID ,
1029
- IsPoster : isPoster ,
1030
1033
IsAssigned : assignee .ID == issue .AssigneeID ,
1031
1034
})
1032
- if ! isPosterAssignee && isPoster {
1033
- isPosterAssignee = true
1034
- }
1035
+ isPosterAssignee = isPosterAssignee || assignee .ID == issue .PosterID
1035
1036
}
1036
1037
if ! isPosterAssignee {
1037
1038
issueUsers = append (issueUsers , & IssueUser {
1038
- IssueID : issue .ID ,
1039
- RepoID : repo .ID ,
1040
- UID : issue .PosterID ,
1041
- IsPoster : true ,
1039
+ IssueID : issue .ID ,
1040
+ UID : issue .PosterID ,
1042
1041
})
1043
1042
}
1044
1043
@@ -1063,62 +1062,6 @@ func NewIssueUsers(repo *Repository, issue *Issue) (err error) {
1063
1062
return sess .Commit ()
1064
1063
}
1065
1064
1066
- // PairsContains returns true when pairs list contains given issue.
1067
- func PairsContains (ius []* IssueUser , issueID , uid int64 ) int {
1068
- for i := range ius {
1069
- if ius [i ].IssueID == issueID &&
1070
- ius [i ].UID == uid {
1071
- return i
1072
- }
1073
- }
1074
- return - 1
1075
- }
1076
-
1077
- // GetIssueUsers returns issue-user pairs by given repository and user.
1078
- func GetIssueUsers (rid , uid int64 , isClosed bool ) ([]* IssueUser , error ) {
1079
- ius := make ([]* IssueUser , 0 , 10 )
1080
- err := x .Where ("is_closed=?" , isClosed ).Find (& ius , & IssueUser {RepoID : rid , UID : uid })
1081
- return ius , err
1082
- }
1083
-
1084
- // GetIssueUserPairsByRepoIds returns issue-user pairs by given repository IDs.
1085
- func GetIssueUserPairsByRepoIds (rids []int64 , isClosed bool , page int ) ([]* IssueUser , error ) {
1086
- if len (rids ) == 0 {
1087
- return []* IssueUser {}, nil
1088
- }
1089
-
1090
- ius := make ([]* IssueUser , 0 , 10 )
1091
- sess := x .
1092
- Limit (20 , (page - 1 )* 20 ).
1093
- Where ("is_closed=?" , isClosed ).
1094
- In ("repo_id" , rids )
1095
- err := sess .Find (& ius )
1096
- return ius , err
1097
- }
1098
-
1099
- // GetIssueUserPairsByMode returns issue-user pairs by given repository and user.
1100
- func GetIssueUserPairsByMode (uid , rid int64 , isClosed bool , page , filterMode int ) ([]* IssueUser , error ) {
1101
- ius := make ([]* IssueUser , 0 , 10 )
1102
- sess := x .
1103
- Limit (20 , (page - 1 )* 20 ).
1104
- Where ("uid=?" , uid ).
1105
- And ("is_closed=?" , isClosed )
1106
- if rid > 0 {
1107
- sess .And ("repo_id=?" , rid )
1108
- }
1109
-
1110
- switch filterMode {
1111
- case FilterModeAssign :
1112
- sess .And ("is_assigned=?" , true )
1113
- case FilterModeCreate :
1114
- sess .And ("is_poster=?" , true )
1115
- default :
1116
- return ius , nil
1117
- }
1118
- err := sess .Find (& ius )
1119
- return ius , err
1120
- }
1121
-
1122
1065
// UpdateIssueMentions extracts mentioned people from content and
1123
1066
// updates issue-user relations for them.
1124
1067
func UpdateIssueMentions (e Engine , issueID int64 , mentions []string ) error {
@@ -1348,16 +1291,6 @@ func UpdateIssue(issue *Issue) error {
1348
1291
return updateIssue (x , issue )
1349
1292
}
1350
1293
1351
- func updateIssueUsersByStatus (e Engine , issueID int64 , isClosed bool ) error {
1352
- _ , err := e .Exec ("UPDATE `issue_user` SET is_closed=? WHERE issue_id=?" , isClosed , issueID )
1353
- return err
1354
- }
1355
-
1356
- // UpdateIssueUsersByStatus updates issue-user relations by issue status.
1357
- func UpdateIssueUsersByStatus (issueID int64 , isClosed bool ) error {
1358
- return updateIssueUsersByStatus (x , issueID , isClosed )
1359
- }
1360
-
1361
1294
func updateIssueUserByAssignee (e * xorm.Session , issue * Issue ) (err error ) {
1362
1295
if _ , err = e .Exec ("UPDATE `issue_user` SET is_assigned = ? WHERE issue_id = ?" , false , issue .ID ); err != nil {
1363
1296
return err
@@ -1702,8 +1635,6 @@ func changeMilestoneAssign(e *xorm.Session, issue *Issue, oldMilestoneID int64)
1702
1635
1703
1636
if err = updateMilestone (e , m ); err != nil {
1704
1637
return err
1705
- } else if _ , err = e .Exec ("UPDATE `issue_user` SET milestone_id = 0 WHERE issue_id = ?" , issue .ID ); err != nil {
1706
- return err
1707
1638
}
1708
1639
}
1709
1640
@@ -1720,8 +1651,6 @@ func changeMilestoneAssign(e *xorm.Session, issue *Issue, oldMilestoneID int64)
1720
1651
1721
1652
if err = updateMilestone (e , m ); err != nil {
1722
1653
return err
1723
- } else if _ , err = e .Exec ("UPDATE `issue_user` SET milestone_id = ? WHERE issue_id = ?" , m .ID , issue .ID ); err != nil {
1724
- return err
1725
1654
}
1726
1655
}
1727
1656
@@ -1775,8 +1704,6 @@ func DeleteMilestoneByRepoID(repoID, id int64) error {
1775
1704
1776
1705
if _ , err = sess .Exec ("UPDATE `issue` SET milestone_id = 0 WHERE milestone_id = ?" , m .ID ); err != nil {
1777
1706
return err
1778
- } else if _ , err = sess .Exec ("UPDATE `issue_user` SET milestone_id = 0 WHERE milestone_id = ?" , m .ID ); err != nil {
1779
- return err
1780
1707
}
1781
1708
return sess .Commit ()
1782
1709
}
0 commit comments