Yimaru-BackEnd/internal/repository/store.go

62 lines
1.2 KiB
Go

package repository
import (
"context"
"time"
dbgen "github.com/SamuelTariku/FortuneBet-Backend/gen/db"
"github.com/jackc/pgx/v5"
"github.com/jackc/pgx/v5/pgxpool"
// "golang.org/x/net/websocket"
)
type Store struct {
queries *dbgen.Queries
conn *pgxpool.Pool
}
func NewStore(conn *pgxpool.Pool) *Store {
queries := dbgen.New(conn)
return &Store{
queries: queries,
conn: conn,
}
}
func OpenDB(url string) (*pgxpool.Pool, func(), error) {
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
conn, err := pgxpool.New(ctx, url)
if err != nil {
return nil, func() {}, err
}
if err := conn.Ping(ctx); err != nil {
return nil, func() {}, err
}
return conn, func() {
conn.Close()
}, nil
}
func (s *Store) BeginTx(ctx context.Context) (*dbgen.Queries, pgx.Tx, error) {
tx, err := s.conn.Begin(ctx)
if err != nil {
return nil, nil, err
}
q := s.queries.WithTx(tx)
return q, tx, nil
}
// func (s *Store) ConnectWebSocket(ctx context.Context, recipientID int64, c *websocket.Conn) error {
// // Implement WebSocket connection logic
// return nil
// }
// func (s *Store) DisconnectWebSocket(recipientID int64) {
// // Implement WebSocket disconnection logic
// }