Skip to content

Commit

Permalink
add packages: clientdb, closer
Browse files Browse the repository at this point in the history
  • Loading branch information
valek177 committed Oct 30, 2024
1 parent 7bc0e59 commit 890fdf8
Show file tree
Hide file tree
Showing 10 changed files with 1,090 additions and 0 deletions.
19 changes: 19 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,24 @@ module github.com/valek177/platform-common
go 1.23

require (
github.com/georgysavva/scany v1.2.2
github.com/gojuno/minimock/v3 v3.4.1
github.com/jackc/pgconn v1.14.3
github.com/jackc/pgx/v4 v4.18.3
github.com/joho/godotenv v1.5.1
github.com/pkg/errors v0.9.1
)

require (
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/jackc/chunkreader/v2 v2.0.1 // indirect
github.com/jackc/pgio v1.0.0 // indirect
github.com/jackc/pgpassfile v1.0.0 // indirect
github.com/jackc/pgproto3/v2 v2.3.3 // indirect
github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect
github.com/jackc/pgtype v1.14.0 // indirect
github.com/jackc/puddle v1.3.0 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
golang.org/x/crypto v0.20.0 // indirect
golang.org/x/text v0.14.0 // indirect
)
220 changes: 220 additions & 0 deletions go.sum

Large diffs are not rendered by default.

66 changes: 66 additions & 0 deletions pkg/client/db/db.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
package db

import (
"context"

"github.com/jackc/pgconn"
"github.com/jackc/pgx/v4"
)

// Handler - функция, которая выполняется в транзакции
type Handler func(ctx context.Context) error

// Client клиент для работы с БД
type Client interface {
DB() DB
Close() error
}

// TxManager менеджер транзакций, который выполняет указанный пользователем обработчик в транзакции
type TxManager interface {
ReadCommitted(ctx context.Context, f Handler) error
}

// Query обертка над запросом, хранящая имя запроса и сам запрос
// Имя запроса используется для логирования и потенциально может использоваться еще где-то, например, для трейсинга
type Query struct {
Name string
QueryRaw string
}

// Transactor интерфейс для работы с транзакциями
type Transactor interface {
BeginTx(ctx context.Context, txOptions pgx.TxOptions) (pgx.Tx, error)
}

// SQLExecer комбинирует NamedExecer и QueryExecer
type SQLExecer interface {
NamedExecer
QueryExecer
}

// NamedExecer интерфейс для работы с именованными запросами с помощью тегов в структурах
type NamedExecer interface {
ScanOneContext(ctx context.Context, dest interface{}, q Query, args ...interface{}) error
ScanAllContext(ctx context.Context, dest interface{}, q Query, args ...interface{}) error
}

// QueryExecer интерфейс для работы с обычными запросами
type QueryExecer interface {
ExecContext(ctx context.Context, q Query, args ...interface{}) (pgconn.CommandTag, error)
QueryContext(ctx context.Context, q Query, args ...interface{}) (pgx.Rows, error)
QueryRowContext(ctx context.Context, q Query, args ...interface{}) pgx.Row
}

// Pinger интерфейс для проверки соединения с БД
type Pinger interface {
Ping(ctx context.Context) error
}

// DB интерфейс для работы с БД
type DB interface {
SQLExecer
Transactor
Pinger
Close()
}
4 changes: 4 additions & 0 deletions pkg/client/db/generate.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package db

//go:generate sh -c "rm -rf mocks && mkdir -p mocks"
//go:generate minimock -i TxManager -o ./mocks/ -s "_minimock.go"
Loading

0 comments on commit 890fdf8

Please sign in to comment.