diff options
Diffstat (limited to 'models')
-rw-r--r-- | models/migrations/migrations.go | 2 | ||||
-rw-r--r-- | models/migrations/v1_20/v247.go | 50 | ||||
-rw-r--r-- | models/project/project.go | 2 | ||||
-rw-r--r-- | models/project/project_test.go | 2 |
4 files changed, 54 insertions, 2 deletions
diff --git a/models/migrations/migrations.go b/models/migrations/migrations.go index d7a4d6e4b5..5401ae2fa6 100644 --- a/models/migrations/migrations.go +++ b/models/migrations/migrations.go @@ -471,6 +471,8 @@ var migrations = []Migration{ NewMigration("Rename Webhook org_id to owner_id", v1_20.RenameWebhookOrgToOwner), // v246 -> v247 NewMigration("Add missed column owner_id for project table", v1_20.AddNewColumnForProject), + // v247 -> v248 + NewMigration("Fix incorrect project type", v1_20.FixIncorrectProjectType), } // GetCurrentDBVersion returns the current db version diff --git a/models/migrations/v1_20/v247.go b/models/migrations/v1_20/v247.go new file mode 100644 index 0000000000..59fc5c46b5 --- /dev/null +++ b/models/migrations/v1_20/v247.go @@ -0,0 +1,50 @@ +// Copyright 2023 The Gitea Authors. All rights reserved. +// SPDX-License-Identifier: MIT + +package v1_20 //nolint + +import ( + "code.gitea.io/gitea/modules/log" + + "xorm.io/xorm" +) + +// FixIncorrectProjectType: set individual project's type from 3(TypeOrganization) to 1(TypeIndividual) +func FixIncorrectProjectType(x *xorm.Engine) error { + type User struct { + ID int64 `xorm:"pk autoincr"` + Type int + } + + const ( + UserTypeIndividual int = 0 + + TypeIndividual uint8 = 1 + TypeOrganization uint8 = 3 + ) + + type Project struct { + OwnerID int64 `xorm:"INDEX"` + Type uint8 + Owner *User `xorm:"extends"` + } + + sess := x.NewSession() + defer sess.Close() + + if err := sess.Begin(); err != nil { + return err + } + + count, err := sess.Table("project"). + Where("type = ? AND owner_id IN (SELECT id FROM `user` WHERE type = ?)", TypeOrganization, UserTypeIndividual). + Update(&Project{ + Type: TypeIndividual, + }) + if err != nil { + return err + } + log.Debug("Updated %d projects to belong to a user instead of an organization", count) + + return sess.Commit() +} diff --git a/models/project/project.go b/models/project/project.go index f3ed723030..679d695881 100644 --- a/models/project/project.go +++ b/models/project/project.go @@ -172,7 +172,7 @@ func GetCardConfig() []CardConfig { // IsTypeValid checks if a project type is valid func IsTypeValid(p Type) bool { switch p { - case TypeRepository, TypeOrganization: + case TypeIndividual, TypeRepository, TypeOrganization: return true default: return false diff --git a/models/project/project_test.go b/models/project/project_test.go index 6caa244f54..71ceda7aa5 100644 --- a/models/project/project_test.go +++ b/models/project/project_test.go @@ -20,7 +20,7 @@ func TestIsProjectTypeValid(t *testing.T) { typ Type valid bool }{ - {TypeIndividual, false}, + {TypeIndividual, true}, {TypeRepository, true}, {TypeOrganization, true}, {UnknownType, false}, |