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>
32 lines
1.0 KiB
Go
32 lines
1.0 KiB
Go
package scraper
|
|
|
|
import (
|
|
"context"
|
|
|
|
"git.leaktechnologies.dev/stu/Goondex/internal/model"
|
|
)
|
|
|
|
// Scraper defines the interface that all scrapers must implement
|
|
type Scraper interface {
|
|
// Name returns the scraper's unique identifier
|
|
Name() string
|
|
|
|
// SearchPerformers searches for performers by query string
|
|
SearchPerformers(ctx context.Context, query string) ([]model.Performer, error)
|
|
|
|
// SearchStudios searches for studios by query string
|
|
SearchStudios(ctx context.Context, query string) ([]model.Studio, error)
|
|
|
|
// SearchScenes searches for scenes by query string
|
|
SearchScenes(ctx context.Context, query string) ([]model.Scene, error)
|
|
|
|
// GetSceneByID retrieves a scene by its remote ID
|
|
GetSceneByID(ctx context.Context, remoteID string) (*model.Scene, error)
|
|
|
|
// GetPerformerByID retrieves a performer by its remote ID
|
|
GetPerformerByID(ctx context.Context, remoteID string) (*model.Performer, error)
|
|
|
|
// GetStudioByID retrieves a studio by its remote ID
|
|
GetStudioByID(ctx context.Context, remoteID string) (*model.Studio, error)
|
|
}
|