Files

52 lines
1.3 KiB
Go
Raw Permalink 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 sqlite
import (
"database/sql"
"fmt"
"messenger/internal/pkg/logger"
"time"
_ "modernc.org/sqlite"
)
type DB struct {
*sql.DB
}
func NewDB(dbPath string) (*DB, error) {
// Подключение к SQLite с оптимизациями
db, err := sql.Open("sqlite", fmt.Sprintf("%s?_journal=WAL&_foreign_keys=on&_busy_timeout=5000", dbPath))
if err != nil {
return nil, fmt.Errorf("failed to open database: %w", err)
}
// Настройка пула соединений
db.SetMaxOpenConns(25)
db.SetMaxIdleConns(10)
db.SetConnMaxLifetime(5 * time.Minute)
// Проверка соединения
if err := db.Ping(); err != nil {
return nil, fmt.Errorf("failed to ping database: %w", err)
}
// Автоматически выполняем миграции
if err := RunMigrations(db, "./migrations"); err != nil {
logger.Error("Failed to run migrations", "error", err)
// Не возвращаем ошибку, продолжаем работу
}
logger.Info("SQLite database connected", "path", dbPath)
return &DB{DB: db}, nil
}
func (db *DB) Close() error {
logger.Info("Closing SQLite database connection")
return db.DB.Close()
}
// BeginTx начинает транзакцию
func (db *DB) BeginTx() (*sql.Tx, error) {
return db.DB.Begin()
}