package db import ( "context" "database/sql" "fmt" "os" "code.lila.network/adoralaura/go-urlsh/models" "github.com/uptrace/bun" "github.com/uptrace/bun/dialect/pgdialect" "github.com/uptrace/bun/driver/pgdriver" ) func InitializeDB() error { sqldb := sql.OpenDB(pgdriver.NewConnector(pgdriver.WithDSN(os.Getenv("DATABASE_URL")))) models.DB = bun.NewDB(sqldb, pgdialect.New()) _, err := models.DB.NewCreateTable().IfNotExists().Model((*models.Link)(nil)).Exec(context.Background()) if err != nil { return fmt.Errorf("[DB] couldn't create database: [%w]", err) } _, err = models.DB.NewCreateTable().IfNotExists().Model((*models.User)(nil)).Exec(context.Background()) if err != nil { return fmt.Errorf("[DB] couldn't create database: [%w]", err) } _, err = models.DB.NewCreateTable().IfNotExists().Model((*models.Session)(nil)).Exec(context.Background()) if err != nil { return fmt.Errorf("[DB] couldn't create database: [%w]", err) } _, err = models.DB.NewCreateTable().IfNotExists().Model((*models.ApiKey)(nil)).Exec(context.Background()) if err != nil { return fmt.Errorf("[DB] couldn't create database: [%w]", err) } _, err = models.DB.NewCreateTable().IfNotExists().Model((*models.MFALoginTransaction)(nil)).Exec(context.Background()) if err != nil { return fmt.Errorf("[DB] couldn't create database: [%w]", err) } _, err = models.DB.NewCreateTable().IfNotExists().Model((*models.MFAConfig)(nil)).Exec(context.Background()) if err != nil { return fmt.Errorf("[DB] couldn't create database: [%w]", err) } _, err = models.DB.NewCreateTable().IfNotExists().Model((*models.MFAScratchCode)(nil)).Exec(context.Background()) if err != nil { return fmt.Errorf("[DB] couldn't create database: [%w]", err) } err = doMigrations() if err != nil { return fmt.Errorf("[DB] Error during Migrations: [%w]", err) } return nil }