aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRunxi Yu <me@runxiyu.org>2025-04-05 23:33:20 +0800
committerRunxi Yu <me@runxiyu.org>2025-04-05 23:33:20 +0800
commitb29061d0798ad854cd0f27ce60d7c58c10a239e9 (patch)
treeb1892db8fe9b49cba1a6a48227144e0863257ae1
parentMove trivial template functions into misc (diff)
downloadforge-b29061d0798ad854cd0f27ce60d7c58c10a239e9.tar.gz
forge-b29061d0798ad854cd0f27ce60d7c58c10a239e9.tar.zst
forge-b29061d0798ad854cd0f27ce60d7c58c10a239e9.zip
database: Separate opening the database into its own package
-rw-r--r--config.go5
-rw-r--r--internal/database/database.go16
-rw-r--r--server.go7
3 files changed, 20 insertions, 8 deletions
diff --git a/config.go b/config.go
index abb71dd..b8e5e28 100644
--- a/config.go
+++ b/config.go
@@ -5,12 +5,11 @@ package forge
import (
"bufio"
- "context"
"errors"
"log/slog"
"os"
- "github.com/jackc/pgx/v5/pgxpool"
+ "go.lindenii.runxiyu.org/forge/internal/database"
"go.lindenii.runxiyu.org/forge/internal/scfg"
)
@@ -88,7 +87,7 @@ func (s *Server) LoadConfig(path string) (err error) {
return errors.New("unsupported database type")
}
- if s.database, err = pgxpool.New(context.Background(), s.config.DB.Conn); err != nil {
+ if s.database, err = database.Open(s.config.DB.Conn); err != nil {
return err
}
diff --git a/internal/database/database.go b/internal/database/database.go
new file mode 100644
index 0000000..27c3b38
--- /dev/null
+++ b/internal/database/database.go
@@ -0,0 +1,16 @@
+package database
+
+import (
+ "context"
+
+ "github.com/jackc/pgx/v5/pgxpool"
+)
+
+type Database struct {
+ *pgxpool.Pool
+}
+
+func Open(connString string) (Database, error) {
+ db, err := pgxpool.New(context.Background(), connString)
+ return Database{db}, err
+}
diff --git a/server.go b/server.go
index 6737ac6..90b2e2e 100644
--- a/server.go
+++ b/server.go
@@ -15,7 +15,7 @@ import (
"syscall"
"time"
- "github.com/jackc/pgx/v5/pgxpool"
+ "go.lindenii.runxiyu.org/forge/internal/database"
"go.lindenii.runxiyu.org/lindenii-common/cmap"
goSSH "golang.org/x/crypto/ssh"
)
@@ -23,10 +23,7 @@ import (
type Server struct {
config Config
- // database serves as the primary database handle for this entire application.
- // Transactions or single reads may be used from it. A [pgxpool.Pool] is
- // necessary to safely use pgx concurrently; pgx.Conn, etc. are insufficient.
- database *pgxpool.Pool
+ database database.Database
sourceHandler http.Handler
staticHandler http.Handler