65 lines
1.7 KiB
Go
65 lines
1.7 KiB
Go
|
|
package database
|
||
|
|
|
||
|
|
import (
|
||
|
|
"fmt"
|
||
|
|
"log/slog"
|
||
|
|
)
|
||
|
|
|
||
|
|
// DB — интерфейс подключения к базе данных.
|
||
|
|
// Потребители зависят от этого интерфейса, а не от конкретной реализации.
|
||
|
|
// Структура db неэкспортируемая — создать объект можно только через New.
|
||
|
|
type DB interface {
|
||
|
|
Query(query string) error
|
||
|
|
QueryRow(query string) error
|
||
|
|
Exec(query string) error
|
||
|
|
BeginTx() error
|
||
|
|
BulkInsert(query string, args ...any) error
|
||
|
|
Close() error
|
||
|
|
}
|
||
|
|
|
||
|
|
// db — обёртка над подключением к базе данных.
|
||
|
|
type db struct {
|
||
|
|
dsn string
|
||
|
|
}
|
||
|
|
|
||
|
|
// New создаёт подключение к базе данных.
|
||
|
|
func New(dsn string) (DB, error) {
|
||
|
|
if dsn == "" {
|
||
|
|
return nil, fmt.Errorf("dsn пустой")
|
||
|
|
}
|
||
|
|
|
||
|
|
slog.Info("подключились к базе данных", "dsn", dsn)
|
||
|
|
return &db{dsn: dsn}, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
// Query выполняет запрос на чтение.
|
||
|
|
func (d *db) Query(query string) error {
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
|
||
|
|
// QueryRow выполняет запрос, возвращающий одну строку.
|
||
|
|
func (d *db) QueryRow(query string) error {
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
|
||
|
|
// Exec выполняет запрос на запись.
|
||
|
|
func (d *db) Exec(query string) error {
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
|
||
|
|
// BeginTx начинает транзакцию.
|
||
|
|
func (d *db) BeginTx() error {
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
|
||
|
|
// BulkInsert выполняет массовую вставку.
|
||
|
|
func (d *db) BulkInsert(query string, args ...any) error {
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
|
||
|
|
// Close закрывает подключение к базе данных.
|
||
|
|
func (d *db) Close() error {
|
||
|
|
slog.Info("подключение к базе данных закрыто")
|
||
|
|
return nil
|
||
|
|
}
|