From 290440e1eedc732ac9ea0162fe8f535f8f8ae492 Mon Sep 17 00:00:00 2001
From: Giteabot <teabot@gitea.io>
Date: Wed, 4 Oct 2023 14:53:00 +0800
Subject: [PATCH] Add Index to `action.user_id` (#27403) (#27425)

Backport #27403 by @JakobDev

Another Column that needs a Index. Found at
https://codeberg.org/forgejo/discussions/issues/61#issuecomment-1258744.

Co-authored-by: JakobDev <jakobdev@gmx.de>
---
 models/activities/action.go     |  2 +-
 models/migrations/migrations.go |  2 ++
 models/migrations/v1_21/v279.go | 16 ++++++++++++++++
 3 files changed, 19 insertions(+), 1 deletion(-)
 create mode 100644 models/migrations/v1_21/v279.go

diff --git a/models/activities/action.go b/models/activities/action.go
index 67828f65a1..bf56f27a8b 100644
--- a/models/activities/action.go
+++ b/models/activities/action.go
@@ -140,7 +140,7 @@ func (at ActionType) InActions(actions ...string) bool {
 // used in template render.
 type Action struct {
 	ID          int64 `xorm:"pk autoincr"`
-	UserID      int64 // Receiver user id.
+	UserID      int64 `xorm:"INDEX"` // Receiver user id.
 	OpType      ActionType
 	ActUserID   int64            // Action user id.
 	ActUser     *user_model.User `xorm:"-"`
diff --git a/models/migrations/migrations.go b/models/migrations/migrations.go
index 4527bcc1ae..020043cfc3 100644
--- a/models/migrations/migrations.go
+++ b/models/migrations/migrations.go
@@ -538,6 +538,8 @@ var migrations = []Migration{
 	NewMigration("Add Index to issue_user.issue_id", v1_21.AddIndexToIssueUserIssueID),
 	// v278 -> v279
 	NewMigration("Add Index to comment.dependent_issue_id", v1_21.AddIndexToCommentDependentIssueID),
+	// v279 -> v280
+	NewMigration("Add Index to action.user_id", v1_21.AddIndexToActionUserID),
 }
 
 // GetCurrentDBVersion returns the current db version
diff --git a/models/migrations/v1_21/v279.go b/models/migrations/v1_21/v279.go
new file mode 100644
index 0000000000..19647225c9
--- /dev/null
+++ b/models/migrations/v1_21/v279.go
@@ -0,0 +1,16 @@
+// Copyright 2023 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package v1_21 //nolint
+
+import (
+	"xorm.io/xorm"
+)
+
+func AddIndexToActionUserID(x *xorm.Engine) error {
+	type Action struct {
+		UserID int64 `xorm:"INDEX"`
+	}
+
+	return x.Sync(new(Action))
+}