migrate.go raw
1 package migrations
2
3 import (
4 "fmt"
5 "strings"
6 "text/template"
7
8 "github.com/go-gormigrate/gormigrate/v2"
9 "gorm.io/gorm"
10 )
11
12 func Migrate(gormDB *gorm.DB) error {
13
14 m := gormigrate.New(gormDB, gormigrate.DefaultOptions, []*gormigrate.Migration{
15 _202401191539_initial_migration,
16 _202403171120_delete_ldk_payments,
17 _202404021909_nullable_expires_at,
18 _202405302121_store_decrypted_request,
19 _202406061259_delete_content,
20 _202406071726_vacuum,
21 _202406301207_rename_request_methods,
22 _202407012100_transactions,
23 _202407151352_autoincrement,
24 _202407201604_transactions_indexes,
25 _202407262257_remove_invalid_scopes,
26 _202408061737_add_boostagrams_and_use_json,
27 _202408191242_transaction_failure_reason,
28 _202408291715_app_metadata,
29 _202410141503_add_wallet_pubkey,
30 _202412212345_fix_types,
31 _202504231037_add_indexes,
32 _202505091314_hold_invoices,
33 _202506170342_swaps,
34 _202508041712_delete_non_cascade_deleted_records,
35 _202508041737_postgres_amount_bigint,
36 _202508041738_app_last_used,
37 _202508041739_response_events_index,
38 _202508151405_swap_xpub,
39 _202508192137_forwards,
40 _202509031250_transactions_updated_at_index,
41 _202604081200_app_last_settled_transaction,
42 })
43
44 return m.Migrate()
45 }
46
47 type sqlDialectDef struct {
48 Timestamp string
49 AutoincrementPrimaryKey string
50 DropTableCascade string
51 }
52
53 var sqlDialectSqlite = sqlDialectDef{
54 Timestamp: "datetime",
55 AutoincrementPrimaryKey: "INTEGER PRIMARY KEY AUTOINCREMENT",
56 DropTableCascade: "",
57 }
58
59 var sqlDialectPostgres = sqlDialectDef{
60 Timestamp: "timestamptz",
61 AutoincrementPrimaryKey: "SERIAL PRIMARY KEY",
62 DropTableCascade: "CASCADE",
63 }
64
65 func getDialect(tx *gorm.DB) *sqlDialectDef {
66 switch tx.Dialector.Name() {
67 case "postgres":
68 return &sqlDialectPostgres
69 default:
70 return &sqlDialectSqlite
71 }
72 }
73
74 func exec(tx *gorm.DB, templ *template.Template) error {
75 dialect := getDialect(tx)
76 var buf strings.Builder
77 err := templ.Execute(&buf, dialect)
78 if err != nil {
79 panic(fmt.Sprintf("failed to render SQL template: %v", err))
80 }
81
82 return tx.Exec(buf.String()).Error
83 }
84