Live video on the AT Protocol
at eli/postgres 65 lines 1.4 kB view raw
1package statedb 2 3import ( 4 "context" 5 "os" 6 "time" 7 8 "github.com/lmittmann/tint" 9 slogGorm "github.com/orandin/slog-gorm" 10 "github.com/streamplace/oatproxy/pkg/oatproxy" 11 "gorm.io/driver/sqlite" 12 "gorm.io/gorm" 13 "stream.place/streamplace/pkg/config" 14 "stream.place/streamplace/pkg/log" 15) 16 17func Migrate(cli *config.CLI) error { 18 gormLogger := slogGorm.New( 19 slogGorm.WithHandler(tint.NewHandler(os.Stderr, &tint.Options{ 20 TimeFormat: time.RFC3339, 21 })), 22 // slogGorm.WithTraceAll(), 23 ) 24 25 newDB, err := MakeDB(cli, nil, nil) 26 if err != nil { 27 return err 28 } 29 30 oldDB, err := gorm.Open(sqlite.Open(cli.IndexDBPath), &gorm.Config{ 31 Logger: gormLogger, 32 }) 33 if err != nil { 34 return err 35 } 36 37 var sessions []oatproxy.OAuthSession 38 if err := oldDB.Find(&sessions).Error; err != nil { 39 return err 40 } 41 42 for _, session := range sessions { 43 log.Log(context.Background(), "migrating session", "session", session.DownstreamDPoPJKT) 44 err := newDB.DB.Save(&session).Error 45 if err != nil { 46 return err 47 } 48 } 49 50 var notifications []Notification 51 if err := oldDB.Find(&notifications).Error; err != nil { 52 time.Sleep(1 * time.Second) 53 return err 54 } 55 56 for _, notification := range notifications { 57 log.Log(context.Background(), "migrating notification", "notification", notification) 58 err := newDB.DB.Save(&notification).Error 59 if err != nil { 60 return err 61 } 62 } 63 64 return nil 65}