Skip to content

Commit 6e4c2a2

Browse files
committed
update reactions when external user binding
1 parent 962d0c3 commit 6e4c2a2

File tree

8 files changed

+51
-15
lines changed

8 files changed

+51
-15
lines changed

models/external_login_user.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,5 +177,9 @@ func UpdateMigrationsByType(tp structs.GitServiceType, externalUserID string, us
177177
return err
178178
}
179179

180-
return UpdateReleasesMigrationsByType(tp, externalUserID, userID)
180+
if err := UpdateReleasesMigrationsByType(tp, externalUserID, userID); err != nil {
181+
return err
182+
}
183+
184+
return UpdateReactionsMigrationsByType(tp, externalUserID, userID)
181185
}

models/issue.go

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,8 +218,11 @@ func (issue *Issue) loadReactions(e Engine) (err error) {
218218
if err != nil {
219219
return err
220220
}
221+
if err = issue.loadRepo(e); err != nil {
222+
return err
223+
}
221224
// Load reaction user data
222-
if _, err := ReactionList(reactions).loadUsers(e); err != nil {
225+
if _, err := ReactionList(reactions).loadUsers(e, issue.Repo); err != nil {
223226
return err
224227
}
225228

@@ -1836,3 +1839,17 @@ func UpdateIssuesMigrationsByType(gitServiceType structs.GitServiceType, origina
18361839
})
18371840
return err
18381841
}
1842+
1843+
// UpdateReactionsMigrationsByType updates all migrated repositories' reactions from gitServiceType to replace originalAuthorID to posterID
1844+
func UpdateReactionsMigrationsByType(gitServiceType structs.GitServiceType, originalAuthorID string, userID int64) error {
1845+
_, err := x.Table("reaction").
1846+
Join("INNER", "issue", "issue.id = reaction.issue_id").
1847+
Where("issue.repo_id IN (SELECT id FROM repository WHERE original_service_type = ?)", gitServiceType).
1848+
And("reaction.original_author_id = ?", originalAuthorID).
1849+
Update(map[string]interface{}{
1850+
"user_id": userID,
1851+
"original_author": "",
1852+
"original_author_id": 0,
1853+
})
1854+
return err
1855+
}

models/issue_comment.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -425,7 +425,7 @@ func (c *Comment) LoadDepIssueDetails() (err error) {
425425
return err
426426
}
427427

428-
func (c *Comment) loadReactions(e Engine) (err error) {
428+
func (c *Comment) loadReactions(e Engine, repo *Repository) (err error) {
429429
if c.Reactions != nil {
430430
return nil
431431
}
@@ -437,15 +437,15 @@ func (c *Comment) loadReactions(e Engine) (err error) {
437437
return err
438438
}
439439
// Load reaction user data
440-
if _, err := c.Reactions.LoadUsers(); err != nil {
440+
if _, err := c.Reactions.loadUsers(e, repo); err != nil {
441441
return err
442442
}
443443
return nil
444444
}
445445

446446
// LoadReactions loads comment reactions
447-
func (c *Comment) LoadReactions() error {
448-
return c.loadReactions(x)
447+
func (c *Comment) LoadReactions(repo *Repository) error {
448+
return c.loadReactions(x, repo)
449449
}
450450

451451
func (c *Comment) loadReview(e Engine) (err error) {

models/issue_reaction.go

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ func (list ReactionList) HasUser(userID int64) bool {
235235
return false
236236
}
237237
for _, reaction := range list {
238-
if reaction.UserID == userID {
238+
if reaction.OriginalAuthor == "" && reaction.UserID == userID {
239239
return true
240240
}
241241
}
@@ -254,14 +254,17 @@ func (list ReactionList) GroupByType() map[string]ReactionList {
254254
func (list ReactionList) getUserIDs() []int64 {
255255
userIDs := make(map[int64]struct{}, len(list))
256256
for _, reaction := range list {
257+
if reaction.OriginalAuthor == "" {
258+
continue
259+
}
257260
if _, ok := userIDs[reaction.UserID]; !ok {
258261
userIDs[reaction.UserID] = struct{}{}
259262
}
260263
}
261264
return keysInt64(userIDs)
262265
}
263266

264-
func (list ReactionList) loadUsers(e Engine) ([]*User, error) {
267+
func (list ReactionList) loadUsers(e Engine, repo *Repository) ([]*User, error) {
265268
if len(list) == 0 {
266269
return nil, nil
267270
}
@@ -276,7 +279,9 @@ func (list ReactionList) loadUsers(e Engine) ([]*User, error) {
276279
}
277280

278281
for _, reaction := range list {
279-
if user, ok := userMaps[reaction.UserID]; ok {
282+
if reaction.OriginalAuthor != "" {
283+
reaction.User = NewReplaceUser(fmt.Sprintf("%s(%s)", reaction.OriginalAuthor, repo.OriginalServiceType.Name()))
284+
} else if user, ok := userMaps[reaction.UserID]; ok {
280285
reaction.User = user
281286
} else {
282287
reaction.User = NewGhostUser()
@@ -286,8 +291,8 @@ func (list ReactionList) loadUsers(e Engine) ([]*User, error) {
286291
}
287292

288293
// LoadUsers loads reactions' all users
289-
func (list ReactionList) LoadUsers() ([]*User, error) {
290-
return list.loadUsers(x)
294+
func (list ReactionList) LoadUsers(repo *Repository) ([]*User, error) {
295+
return list.loadUsers(x, repo)
291296
}
292297

293298
// GetFirstUsers returns first reacted user display names separated by comma

models/migrate.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,7 @@ func InsertIssueComments(comments []*Comment) error {
143143
}
144144

145145
for _, reaction := range comment.Reactions {
146+
reaction.IssueID = comment.IssueID
146147
reaction.CommentID = comment.ID
147148
}
148149
if _, err := sess.Insert(comment.Reactions); err != nil {

models/user.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -793,6 +793,15 @@ func NewGhostUser() *User {
793793
}
794794
}
795795

796+
// NewReplaceUser creates and returns a fake user for external user
797+
func NewReplaceUser(name string) *User {
798+
return &User{
799+
ID: -1,
800+
Name: name,
801+
LowerName: strings.ToLower(name),
802+
}
803+
}
804+
796805
// IsGhost check if user is fake user for a deleted account
797806
func (u *User) IsGhost() bool {
798807
if u == nil {

routers/api/v1/repo/issue_reaction.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ func GetIssueCommentReactions(ctx *context.APIContext) {
6565
ctx.Error(http.StatusInternalServerError, "FindIssueReactions", err)
6666
return
6767
}
68-
_, err = reactions.LoadUsers()
68+
_, err = reactions.LoadUsers(ctx.Repo.Repository)
6969
if err != nil {
7070
ctx.Error(http.StatusInternalServerError, "ReactionList.LoadUsers()", err)
7171
return
@@ -271,7 +271,7 @@ func GetIssueReactions(ctx *context.APIContext) {
271271
ctx.Error(http.StatusInternalServerError, "FindIssueReactions", err)
272272
return
273273
}
274-
_, err = reactions.LoadUsers()
274+
_, err = reactions.LoadUsers(ctx.Repo.Repository)
275275
if err != nil {
276276
ctx.Error(http.StatusInternalServerError, "ReactionList.LoadUsers()", err)
277277
return

routers/repo/issue.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1608,7 +1608,7 @@ func ChangeCommentReaction(ctx *context.Context, form auth.ReactionForm) {
16081608
}
16091609
// Reload new reactions
16101610
comment.Reactions = nil
1611-
if err = comment.LoadReactions(); err != nil {
1611+
if err = comment.LoadReactions(ctx.Repo.Repository); err != nil {
16121612
log.Info("comment.LoadReactions: %s", err)
16131613
break
16141614
}
@@ -1622,7 +1622,7 @@ func ChangeCommentReaction(ctx *context.Context, form auth.ReactionForm) {
16221622

16231623
// Reload new reactions
16241624
comment.Reactions = nil
1625-
if err = comment.LoadReactions(); err != nil {
1625+
if err = comment.LoadReactions(ctx.Repo.Repository); err != nil {
16261626
log.Info("comment.LoadReactions: %s", err)
16271627
break
16281628
}

0 commit comments

Comments
 (0)