Goondex/internal/db/db.go
Team Goon 2e747c6660 Initial release: v0.1.0-dev1
Clean slate initialization of Goondex - a fast, local-first media indexer.

Features:
- SQLite database with WAL mode and foreign keys
- Full schema for performers, studios, scenes, and tags
- Many-to-many relationships via junction tables
- CRUD stores for all entities with search capabilities
- CLI with performer/studio/scene search commands
- Pluggable scraper architecture with registry
- TPDB client stub (ready for implementation)
- Configuration system via YAML files
- Comprehensive .gitignore and documentation

Architecture:
- cmd/goondex: CLI application with Cobra
- cmd/goondexd: Daemon placeholder for v0.2.0
- internal/db: Database layer with stores
- internal/model: Clean data models
- internal/scraper: Scraper interface and TPDB client
- config/: YAML configuration templates

Database schema includes indexes on common query fields and uses
RFC3339 timestamps for consistency.

Built and tested successfully with Go 1.25.4.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-14 21:37:26 -05:00

55 lines
1.1 KiB
Go

package db
import (
"database/sql"
"fmt"
_ "modernc.org/sqlite"
)
// DB wraps the SQLite database connection
type DB struct {
conn *sql.DB
}
// Open opens a connection to the SQLite database and initializes schema
func Open(dbPath string) (*DB, error) {
conn, err := sql.Open("sqlite", dbPath)
if err != nil {
return nil, fmt.Errorf("failed to open database: %w", err)
}
// Enable WAL mode for better concurrency
if _, err := conn.Exec("PRAGMA journal_mode=WAL"); err != nil {
conn.Close()
return nil, fmt.Errorf("failed to enable WAL mode: %w", err)
}
// Enable foreign keys
if _, err := conn.Exec("PRAGMA foreign_keys=ON"); err != nil {
conn.Close()
return nil, fmt.Errorf("failed to enable foreign keys: %w", err)
}
// Initialize schema
if _, err := conn.Exec(schema); err != nil {
conn.Close()
return nil, fmt.Errorf("failed to initialize schema: %w", err)
}
return &DB{conn: conn}, nil
}
// Close closes the database connection
func (db *DB) Close() error {
if db.conn != nil {
return db.conn.Close()
}
return nil
}
// Conn returns the underlying *sql.DB connection
func (db *DB) Conn() *sql.DB {
return db.conn
}