Openstatus www.openstatus.dev
at main 47 lines 876 B view raw
1package database 2 3import ( 4 "database/sql" 5 "fmt" 6 "os" 7 8 "github.com/jmoiron/sqlx" 9 _ "github.com/joho/godotenv/autoload" 10 _ "github.com/tursodatabase/libsql-client-go/libsql" 11) 12 13var ( 14 dbUrl = os.Getenv("DB_URL") 15 authToken = os.Getenv("DB_AUTH_TOKEN") 16 dbInstance *sqlx.DB 17) 18 19// New returns a database connection, reusing an existing connection if available. 20func New() *sqlx.DB { 21 // Reuse Connection 22 if dbInstance != nil { 23 return dbInstance 24 } 25 26 url := fmt.Sprintf("%s?auth_token=%s", dbUrl, authToken) 27 c, err := sql.Open("libsql", url) 28 if err != nil { 29 fmt.Fprintf(os.Stderr, "failed to open db %s: %s", url, err) 30 os.Exit(1) 31 } 32 33 db := sqlx.NewDb(c, "sqlite3") 34 dbInstance = db 35 36 return db 37} 38 39// Close closes the database connection. 40func Close() error { 41 if dbInstance != nil { 42 err := dbInstance.Close() 43 dbInstance = nil 44 return err 45 } 46 return nil 47}