plc.directory mirror
1package database
2
3import (
4 "context"
5 "database/sql"
6 "fmt"
7 "log/slog"
8
9 "entgo.io/ent/dialect"
10 entsql "entgo.io/ent/dialect/sql"
11 _ "github.com/lib/pq"
12
13 "tangled.sh/seiso.moe/aletheia.directory/ent"
14)
15
16func NewClient(dbURL string, logger *slog.Logger) (*ent.Client, error) {
17 db, err := sql.Open("postgres", dbURL)
18 if err != nil {
19 return nil, fmt.Errorf("failed to open database connection: %w", err)
20 }
21
22 if err := db.Ping(); err != nil {
23 return nil, fmt.Errorf("failed to ping database: %w", err)
24 }
25
26 drv := entsql.OpenDB(dialect.Postgres, db)
27 client := ent.NewClient(ent.Driver(drv))
28
29 if err := client.Schema.Create(context.Background()); err != nil {
30 return nil, fmt.Errorf("failed to create schema: %w", err)
31 }
32
33 logger.Info("database connection established and schema created")
34 return client, nil
35}