mirror of https://github.com/go-gitea/gitea
Do not store user projects as organization projects (#23353)
A part of https://github.com/go-gitea/gitea/pull/22865 At first, I think we do not need 3 ProjectTypes, as we can check user type, but it seems that it is not database friendly. --------- Co-authored-by: delvh <dev.lh@web.de> Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com> Co-authored-by: 6543 <6543@obermui.de>pull/23271/head^2
parent
8120c0c20c
commit
8e45fcb63a
@ -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() |
||||
} |
Loading…
Reference in new issue