axe/internal/repository/db.go
2026-10-18 22:07:25 +03:00

31 lines
1.6 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Package repository — доступ к данным: репозитории профилей, заявок
// и refresh-сессий. Всё общение с PostgreSQL живёт здесь; ошибки
// pgx превращаются в три доменных класса (ErrNotFound/ErrConflict/ErrInvalid),
// детали которых наружу не уходят.
package repository
import (
"context"
"github.com/jackc/pgx/v5"
"github.com/jackc/pgx/v5/pgconn"
)
// Querier — минимальный набор запросов, который нужен репозиториям.
// Реализуют и *pgxpool.Pool (боевой путь), и pgx.Tx (тесты: выполняют
// сценарий и откатывают транзакцию, не оставляя данных в БД).
type Querier interface {
Exec(ctx context.Context, sql string, args ...any) (pgconn.CommandTag, error)
Query(ctx context.Context, sql string, args ...any) (pgx.Rows, error)
QueryRow(ctx context.Context, sql string, args ...any) pgx.Row
}
// Beginer — то, что умеет начать транзакцию: *pgxpool.Pool (боевой путь)
// и pgx.Tx (в тестах — SAVEPOINT внутри тестовой транзакции). Нужен
// репозиториям, чьи шаги обязаны выполниться атомарно: например,
// клиентское удаление мастера (членства + профиль) не должно остаться
// наполовину, если второй шаг упёрся в FK.
type Beginer interface {
Begin(ctx context.Context) (pgx.Tx, error)
}