mirror of
				https://github.com/go-gitea/gitea
				synced 2025-10-31 19:38:23 +00:00 
			
		
		
		
	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>
This commit is contained in:
		| @@ -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 | ||||
|   | ||||
							
								
								
									
										50
									
								
								models/migrations/v1_20/v247.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								models/migrations/v1_20/v247.go
									
									
									
									
									
										Normal file
									
								
							| @@ -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() | ||||
| } | ||||
		Reference in New Issue
	
	Block a user