Live video on the AT Protocol
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(¬ifications).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(¬ification).Error
59 if err != nil {
60 return err
61 }
62 }
63
64 return nil
65}