mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2025-04-08 02:31:36 +02:00
migration now works
This commit is contained in:
parent
aa0c7fab21
commit
fee5a5b688
2 changed files with 43 additions and 12 deletions
|
@ -15,9 +15,10 @@ import (
|
|||
// FederationHost data type
|
||||
// swagger:model
|
||||
type FederationHost struct {
|
||||
ID int64 `xorm:"pk autoincr"`
|
||||
HostFqdn string `xorm:"host_fqdn UNIQUE INDEX VARCHAR(255) NOT NULL"`
|
||||
NodeInfo NodeInfo `xorm:"extends NOT NULL"`
|
||||
ID int64 `xorm:"pk autoincr"`
|
||||
HostFqdn string `xorm:"host_fqdn UNIQUE INDEX VARCHAR(255) NOT NULL"`
|
||||
NodeInfo NodeInfo `xorm:"extends NOT NULL"`
|
||||
//TODO: why is this not a number?
|
||||
HostPort string `xorm:"NOT NULL DEFAULT '443'"`
|
||||
HostSchema string `xorm:"NOT NULL DEFAULT 'https'"`
|
||||
LatestActivity time.Time `xorm:"NOT NULL"`
|
||||
|
|
|
@ -4,15 +4,17 @@
|
|||
package forgejo_migrations //nolint:revive
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"forgejo.org/models/migrations/base"
|
||||
"forgejo.org/modules/forgefed"
|
||||
"forgejo.org/modules/timeutil"
|
||||
"xorm.io/xorm"
|
||||
)
|
||||
|
||||
func MigrateNormalizedFederatedURI(x *xorm.Engine) error {
|
||||
// New Fields
|
||||
// Update schema
|
||||
type FederatedUser struct {
|
||||
ID int64 `xorm:"pk autoincr"`
|
||||
UserID int64 `xorm:"NOT NULL"`
|
||||
|
@ -21,6 +23,7 @@ func MigrateNormalizedFederatedURI(x *xorm.Engine) error {
|
|||
NormalizedOriginalURL string
|
||||
}
|
||||
type User struct {
|
||||
ID int64 `xorm:"pk autoincr"`
|
||||
NormalizedFederatedURI string
|
||||
}
|
||||
type FederationHost struct {
|
||||
|
@ -33,26 +36,53 @@ func MigrateNormalizedFederatedURI(x *xorm.Engine) error {
|
|||
Created timeutil.TimeStamp `xorm:"created"`
|
||||
Updated timeutil.TimeStamp `xorm:"updated"`
|
||||
}
|
||||
// TODO: add new fields to FederationHost
|
||||
if err := x.Sync(new(User), new(FederatedUser), new(FederationHost)); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Migrate User.NormalizedFederatedURI -> FederatedUser.NormalizedOriginalUrl
|
||||
// Migrate
|
||||
sessMigration := x.NewSession()
|
||||
defer sessMigration.Close()
|
||||
if err := sessMigration.Begin(); err != nil {
|
||||
return err
|
||||
}
|
||||
if _, err := sessMigration.Exec("UPDATE `federated_user` SET `normalized_original_url` = (SELECT normalized_federated_uri FROM `user` WHERE `user`.id = federated_user.user_id)"); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := sessMigration.Commit(); err != nil {
|
||||
federatedUsers := make([]*FederatedUser, 0)
|
||||
err := sessMigration.Where("normalized_original_url=''").OrderBy("id").Find(&federatedUsers)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Migrate (Port, Schema) FederatedUser.NormalizedOriginalUrl -> FederationHost.(Port, Schema)
|
||||
// TODO
|
||||
for _, federatedUser := range federatedUsers {
|
||||
user := &User{}
|
||||
has, err := sessMigration.Where("id=?", federatedUser.UserID).Get(user)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if !has {
|
||||
return fmt.Errorf("user not found %v", federatedUser.UserID)
|
||||
}
|
||||
fmt.Printf("user: %v\nfederatedUser: %v\n", user, federatedUser)
|
||||
|
||||
// Migrate User.NormalizedFederatedURI -> FederatedUser.NormalizedOriginalUrl
|
||||
sql := "UPDATE `federated_user` SET `normalized_original_url` = ? WHERE `id` = ?"
|
||||
if _, err := sessMigration.Exec(sql, user.NormalizedFederatedURI, federatedUser.FederationHostID); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Migrate (Port, Schema) FederatedUser.NormalizedOriginalUrl -> FederationHost.(Port, Schema)
|
||||
actorId, err := forgefed.NewActorID(user.NormalizedFederatedURI)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
sql = "UPDATE `federation_host` SET `host_port` = ?, `host_schema` = ? WHERE `id` = ?"
|
||||
if _, err := sessMigration.Exec(sql, actorId.HostPort, actorId.HostSchema, federatedUser.FederationHostID); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
if err := sessMigration.Commit(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Drop User.NormalizedFederatedURI field in extra transaction
|
||||
sessSchema := x.NewSession()
|
||||
|
|
Loading…
Add table
Reference in a new issue