at main 822 B view raw
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}