@@ -187,6 +187,18 @@ func (issue *Issue) LoadAttributes() error {
187
187
return issue .loadAttributes (x )
188
188
}
189
189
190
+ // GetIsRead load the `IsRead` field of the issue
191
+ func (issue * Issue ) GetIsRead (userID int64 ) error {
192
+ issueUser := & IssueUser {IssueID : issue .ID , UID : userID }
193
+ if has , err := x .Get (issueUser ); err != nil {
194
+ return err
195
+ } else if ! has {
196
+ return ErrUserNotExist {UID : userID }
197
+ }
198
+ issue .IsRead = issueUser .IsRead
199
+ return nil
200
+ }
201
+
190
202
// HTMLURL returns the absolute URL to this issue.
191
203
func (issue * Issue ) HTMLURL () string {
192
204
var path string
@@ -554,8 +566,6 @@ func (issue *Issue) changeStatus(e *xorm.Session, doer *User, repo *Repository,
554
566
555
567
if err = updateIssueCols (e , issue , "is_closed" ); err != nil {
556
568
return err
557
- } else if err = updateIssueUsersByStatus (e , issue .ID , isClosed ); err != nil {
558
- return err
559
569
}
560
570
561
571
// Update issue count of labels
@@ -1087,13 +1097,9 @@ type IssueUser struct {
1087
1097
ID int64 `xorm:"pk autoincr"`
1088
1098
UID int64 `xorm:"INDEX"` // User ID.
1089
1099
IssueID int64
1090
- RepoID int64 `xorm:"INDEX"`
1091
- MilestoneID int64
1092
1100
IsRead bool
1093
1101
IsAssigned bool
1094
1102
IsMentioned bool
1095
- IsPoster bool
1096
- IsClosed bool
1097
1103
}
1098
1104
1099
1105
func newIssueUsers (e * xorm.Session , repo * Repository , issue * Issue ) error {
@@ -1109,24 +1115,17 @@ func newIssueUsers(e *xorm.Session, repo *Repository, issue *Issue) error {
1109
1115
// and just waste 1 unit is cheaper than re-allocate memory once.
1110
1116
issueUsers := make ([]* IssueUser , 0 , len (assignees )+ 1 )
1111
1117
for _ , assignee := range assignees {
1112
- isPoster := assignee .ID == issue .PosterID
1113
1118
issueUsers = append (issueUsers , & IssueUser {
1114
1119
IssueID : issue .ID ,
1115
- RepoID : repo .ID ,
1116
1120
UID : assignee .ID ,
1117
- IsPoster : isPoster ,
1118
1121
IsAssigned : assignee .ID == issue .AssigneeID ,
1119
1122
})
1120
- if ! isPosterAssignee && isPoster {
1121
- isPosterAssignee = true
1122
- }
1123
+ isPosterAssignee = isPosterAssignee || assignee .ID == issue .PosterID
1123
1124
}
1124
1125
if ! isPosterAssignee {
1125
1126
issueUsers = append (issueUsers , & IssueUser {
1126
- IssueID : issue .ID ,
1127
- RepoID : repo .ID ,
1128
- UID : issue .PosterID ,
1129
- IsPoster : true ,
1127
+ IssueID : issue .ID ,
1128
+ UID : issue .PosterID ,
1130
1129
})
1131
1130
}
1132
1131
@@ -1151,62 +1150,6 @@ func NewIssueUsers(repo *Repository, issue *Issue) (err error) {
1151
1150
return sess .Commit ()
1152
1151
}
1153
1152
1154
- // PairsContains returns true when pairs list contains given issue.
1155
- func PairsContains (ius []* IssueUser , issueID , uid int64 ) int {
1156
- for i := range ius {
1157
- if ius [i ].IssueID == issueID &&
1158
- ius [i ].UID == uid {
1159
- return i
1160
- }
1161
- }
1162
- return - 1
1163
- }
1164
-
1165
- // GetIssueUsers returns issue-user pairs by given repository and user.
1166
- func GetIssueUsers (rid , uid int64 , isClosed bool ) ([]* IssueUser , error ) {
1167
- ius := make ([]* IssueUser , 0 , 10 )
1168
- err := x .Where ("is_closed=?" , isClosed ).Find (& ius , & IssueUser {RepoID : rid , UID : uid })
1169
- return ius , err
1170
- }
1171
-
1172
- // GetIssueUserPairsByRepoIds returns issue-user pairs by given repository IDs.
1173
- func GetIssueUserPairsByRepoIds (rids []int64 , isClosed bool , page int ) ([]* IssueUser , error ) {
1174
- if len (rids ) == 0 {
1175
- return []* IssueUser {}, nil
1176
- }
1177
-
1178
- ius := make ([]* IssueUser , 0 , 10 )
1179
- sess := x .
1180
- Limit (20 , (page - 1 )* 20 ).
1181
- Where ("is_closed=?" , isClosed ).
1182
- In ("repo_id" , rids )
1183
- err := sess .Find (& ius )
1184
- return ius , err
1185
- }
1186
-
1187
- // GetIssueUserPairsByMode returns issue-user pairs by given repository and user.
1188
- func GetIssueUserPairsByMode (uid , rid int64 , isClosed bool , page , filterMode int ) ([]* IssueUser , error ) {
1189
- ius := make ([]* IssueUser , 0 , 10 )
1190
- sess := x .
1191
- Limit (20 , (page - 1 )* 20 ).
1192
- Where ("uid=?" , uid ).
1193
- And ("is_closed=?" , isClosed )
1194
- if rid > 0 {
1195
- sess .And ("repo_id=?" , rid )
1196
- }
1197
-
1198
- switch filterMode {
1199
- case FilterModeAssign :
1200
- sess .And ("is_assigned=?" , true )
1201
- case FilterModeCreate :
1202
- sess .And ("is_poster=?" , true )
1203
- default :
1204
- return ius , nil
1205
- }
1206
- err := sess .Find (& ius )
1207
- return ius , err
1208
- }
1209
-
1210
1153
// UpdateIssueMentions extracts mentioned people from content and
1211
1154
// updates issue-user relations for them.
1212
1155
func UpdateIssueMentions (e Engine , issueID int64 , mentions []string ) error {
@@ -1436,16 +1379,6 @@ func UpdateIssue(issue *Issue) error {
1436
1379
return updateIssue (x , issue )
1437
1380
}
1438
1381
1439
- func updateIssueUsersByStatus (e Engine , issueID int64 , isClosed bool ) error {
1440
- _ , err := e .Exec ("UPDATE `issue_user` SET is_closed=? WHERE issue_id=?" , isClosed , issueID )
1441
- return err
1442
- }
1443
-
1444
- // UpdateIssueUsersByStatus updates issue-user relations by issue status.
1445
- func UpdateIssueUsersByStatus (issueID int64 , isClosed bool ) error {
1446
- return updateIssueUsersByStatus (x , issueID , isClosed )
1447
- }
1448
-
1449
1382
func updateIssueUserByAssignee (e * xorm.Session , issue * Issue ) (err error ) {
1450
1383
if _ , err = e .Exec ("UPDATE `issue_user` SET is_assigned = ? WHERE issue_id = ?" , false , issue .ID ); err != nil {
1451
1384
return err
@@ -1790,8 +1723,6 @@ func changeMilestoneAssign(e *xorm.Session, doer *User, issue *Issue, oldMilesto
1790
1723
1791
1724
if err = updateMilestone (e , m ); err != nil {
1792
1725
return err
1793
- } else if _ , err = e .Exec ("UPDATE `issue_user` SET milestone_id = 0 WHERE issue_id = ?" , issue .ID ); err != nil {
1794
- return err
1795
1726
}
1796
1727
}
1797
1728
@@ -1808,8 +1739,6 @@ func changeMilestoneAssign(e *xorm.Session, doer *User, issue *Issue, oldMilesto
1808
1739
1809
1740
if err = updateMilestone (e , m ); err != nil {
1810
1741
return err
1811
- } else if _ , err = e .Exec ("UPDATE `issue_user` SET milestone_id = ? WHERE issue_id = ?" , m .ID , issue .ID ); err != nil {
1812
- return err
1813
1742
}
1814
1743
}
1815
1744
@@ -1873,8 +1802,6 @@ func DeleteMilestoneByRepoID(repoID, id int64) error {
1873
1802
1874
1803
if _ , err = sess .Exec ("UPDATE `issue` SET milestone_id = 0 WHERE milestone_id = ?" , m .ID ); err != nil {
1875
1804
return err
1876
- } else if _ , err = sess .Exec ("UPDATE `issue_user` SET milestone_id = 0 WHERE milestone_id = ?" , m .ID ); err != nil {
1877
- return err
1878
1805
}
1879
1806
return sess .Commit ()
1880
1807
}
0 commit comments