main pico / pkg / db / postgres / storage.go
Antonio Mika  ·  2026-10-10
 1package postgres
 2
 3import (
 4	"database/sql"
 5	"log/slog"
 6
 7	"github.com/jmoiron/sqlx"
 8	_ "github.com/lib/pq"
 9)
10
11var PAGER_SIZE = 15
12
13type PsqlDB struct {
14	Logger *slog.Logger
15	Db     *sqlx.DB
16}
17
18type RowScanner interface {
19	Scan(dest ...any) error
20}
21
22func NewDB(databaseUrl string, logger *slog.Logger) *PsqlDB {
23	var err error
24	d := &PsqlDB{
25		Logger: logger,
26	}
27	d.Logger.Info("Connecting to postgres", "databaseUrl", databaseUrl)
28
29	db, err := sqlx.Connect("postgres", databaseUrl)
30	if err != nil {
31		d.Logger.Error(err.Error())
32	}
33	d.Db = db
34	return d
35}
36
37func (me *PsqlDB) Close() error {
38	me.Logger.Info("Closing db")
39	return me.Db.Close()
40}
41
42func newNullString(s string) sql.NullString {
43	if len(s) == 0 {
44		return sql.NullString{}
45	}
46	return sql.NullString{
47		String: s,
48		Valid:  true,
49	}
50}