From ce0413ff8894660f0a5f0a87cbadb6baacb80e4a Mon Sep 17 00:00:00 2001
From: Lunny Xiao <xiaolunwen@gmail.com>
Date: Tue, 18 Feb 2020 08:42:13 +0800
Subject: [PATCH] Fix migration information update bug when linked github
 account (#10310)

* Fix bug on upgrade migrated reactions

* Fix migration information update bug when linked github account

Co-authored-by: zeripath <art27@cantab.net>
---
 models/issue.go   |  5 ++---
 models/migrate.go | 24 ++++++++++++++----------
 2 files changed, 16 insertions(+), 13 deletions(-)

diff --git a/models/issue.go b/models/issue.go
index 4c33767d2..afd110e06 100644
--- a/models/issue.go
+++ b/models/issue.go
@@ -1873,9 +1873,8 @@ func UpdateIssuesMigrationsByType(gitServiceType structs.GitServiceType, origina
 // UpdateReactionsMigrationsByType updates all migrated repositories' reactions from gitServiceType to replace originalAuthorID to posterID
 func UpdateReactionsMigrationsByType(gitServiceType structs.GitServiceType, originalAuthorID string, userID int64) error {
 	_, err := x.Table("reaction").
-		Join("INNER", "issue", "issue.id = reaction.issue_id").
-		Where("issue.repo_id IN (SELECT id FROM repository WHERE original_service_type = ?)", gitServiceType).
-		And("reaction.original_author_id = ?", originalAuthorID).
+		Where("original_author_id = ?", originalAuthorID).
+		And(migratedIssueCond(gitServiceType)).
 		Update(map[string]interface{}{
 			"user_id":            userID,
 			"original_author":    "",
diff --git a/models/migrate.go b/models/migrate.go
index 28661527a..ea4a8c176 100644
--- a/models/migrate.go
+++ b/models/migrate.go
@@ -208,20 +208,24 @@ func InsertReleases(rels ...*Release) error {
 	return sess.Commit()
 }
 
+func migratedIssueCond(tp structs.GitServiceType) builder.Cond {
+	return builder.In("issue_id",
+		builder.Select("issue.id").
+			From("issue").
+			InnerJoin("repository", "issue.repo_id = repository.id").
+			Where(builder.Eq{
+				"repository.original_service_type": tp,
+			}),
+	)
+}
+
 // UpdateReviewsMigrationsByType updates reviews' migrations information via given git service type and original id and poster id
 func UpdateReviewsMigrationsByType(tp structs.GitServiceType, originalAuthorID string, posterID int64) error {
 	_, err := x.Table("review").
-		Where(builder.In("issue_id",
-			builder.Select("issue.id").
-				From("issue").
-				InnerJoin("repository", "issue.repo_id = repository.id").
-				Where(builder.Eq{
-					"repository.original_service_type": tp,
-				}),
-		)).
-		And("review.original_author_id = ?", originalAuthorID).
+		Where("original_author_id = ?", originalAuthorID).
+		And(migratedIssueCond(tp)).
 		Update(map[string]interface{}{
-			"poster_id":          posterID,
+			"reviewer_id":        posterID,
 			"original_author":    "",
 			"original_author_id": 0,
 		})