Openstatus
www.openstatus.dev
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}