storage

package
v1.4.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 1, 2026 License: MIT Imports: 10 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type ChannelCount

type ChannelCount struct {
	Channel string `json:"channel"`
	Count   int    `json:"count"`
}

type DB

type DB struct {
	*db.DB
}

DB wraps meltkit's DB to allow defining storage methods in this package.

func NewDB

func NewDB(d *db.DB) *DB

NewDB wraps a meltkit db.DB for use with storage query methods.

func (*DB) DeleteByBookmarkID

func (db *DB) DeleteByBookmarkID(ctx context.Context, userID int, bookmarkID string) error

func (*DB) DeleteVideo

func (db *DB) DeleteVideo(ctx context.Context, userID int, id uuid.UUID) error

func (*DB) GetByYouTubeID

func (db *DB) GetByYouTubeID(ctx context.Context, userID int, youtubeID string) (*Video, error)

func (*DB) GetKarakeepAPIKey

func (db *DB) GetKarakeepAPIKey(ctx context.Context, userID int) (string, error)

GetKarakeepAPIKey retrieves the Karakeep API key for a user. Returns empty string if not set.

func (*DB) GetModelPreference

func (db *DB) GetModelPreference(ctx context.Context, userID int) (provider, model string, err error)

GetModelPreference returns the user's preferred summary model (provider + model ID). Empty means use default.

func (*DB) GetOrCreateFeedToken added in v1.1.0

func (db *DB) GetOrCreateFeedToken(ctx context.Context, userID int) (string, error)

GetOrCreateFeedToken returns the user's feed token, generating one if it doesn't exist.

func (*DB) GetOrCreateUser

func (db *DB) GetOrCreateUser(ctx context.Context, login, displayName string) (int, error)

func (*DB) GetOrCreateWebhookToken

func (db *DB) GetOrCreateWebhookToken(ctx context.Context, userID int) (string, error)

GetOrCreateWebhookToken returns the user's webhook token, generating one if it doesn't exist.

func (*DB) GetPrimaryUser

func (db *DB) GetPrimaryUser(ctx context.Context) (id int, login string, err error)

func (*DB) GetStats

func (db *DB) GetStats(ctx context.Context, userID int) (*VideoStats, error)

func (*DB) GetSummaryPrompts

func (db *DB) GetSummaryPrompts(ctx context.Context, userID int) (medium, deep *string, err error)

GetSummaryPrompts returns the user's custom summary prompts. Nil means use default.

func (*DB) GetUserByFeedToken added in v1.1.0

func (db *DB) GetUserByFeedToken(ctx context.Context, token string) (int, error)

GetUserByFeedToken looks up a user ID by feed token. Returns pgx.ErrNoRows if not found.

func (*DB) GetUserByWebhookToken

func (db *DB) GetUserByWebhookToken(ctx context.Context, token string) (int, error)

GetUserByWebhookToken looks up a user ID by webhook token. Returns pgx.ErrNoRows if not found.

func (*DB) GetVideo

func (db *DB) GetVideo(ctx context.Context, userID int, id uuid.UUID) (*Video, error)

func (*DB) InsertVideo

func (db *DB) InsertVideo(ctx context.Context, v *Video) error

func (*DB) ListFailedVideos

func (db *DB) ListFailedVideos(ctx context.Context, userID int) ([]Video, error)

func (*DB) ListNoCaptionsVideos

func (db *DB) ListNoCaptionsVideos(ctx context.Context, userID int) ([]Video, error)

func (*DB) ListRecent

func (db *DB) ListRecent(ctx context.Context, userID int, filters ListFilters, limit, offset int) ([]Video, int, error)

func (*DB) ListVideosWithoutMetadata

func (db *DB) ListVideosWithoutMetadata(ctx context.Context, userID int) ([]Video, error)

func (*DB) SearchVideos

func (db *DB) SearchVideos(ctx context.Context, userID int, embedding []float32, threshold float64, limit int) ([]VideoMatch, error)

func (*DB) SetKarakeepAPIKey

func (db *DB) SetKarakeepAPIKey(ctx context.Context, userID int, apiKey string) error

SetKarakeepAPIKey stores an encrypted Karakeep API key for a user.

func (*DB) SetModelPreference

func (db *DB) SetModelPreference(ctx context.Context, userID int, provider, model string) error

SetModelPreference sets the user's preferred summary model. Empty values reset to default (NULL).

func (*DB) SetSummaryPrompt

func (db *DB) SetSummaryPrompt(ctx context.Context, userID int, level, prompt string) error

SetSummaryPrompt sets a custom summary prompt for the given level. Empty string resets to default (NULL).

func (*DB) TextSearchVideos

func (db *DB) TextSearchVideos(ctx context.Context, userID int, query string, limit int) ([]VideoMatch, error)

func (*DB) UpdateBookmarkID

func (db *DB) UpdateBookmarkID(ctx context.Context, id uuid.UUID, bookmarkID string) error

func (*DB) UpdateVideoMetadata

func (db *DB) UpdateVideoMetadata(ctx context.Context, id uuid.UUID, title, channel, language string, durationSeconds int) error

func (*DB) UpdateVideoStatus

func (db *DB) UpdateVideoStatus(ctx context.Context, id uuid.UUID, status, errorMsg string) error

func (*DB) UpdateVideoSummary

func (db *DB) UpdateVideoSummary(ctx context.Context, id uuid.UUID, summary string, detailLevel string, provider string, model string, inputTokens, outputTokens int, embedding []float32, metadata json.RawMessage) error

func (*DB) UpdateVideoTranscript

func (db *DB) UpdateVideoTranscript(ctx context.Context, id uuid.UUID, transcript, title, channel, language string, durationSeconds int) error

type DailyCount

type DailyCount struct {
	Date  string `json:"date"`
	Count int    `json:"count"`
}

type ListFilters

type ListFilters struct {
	Channel  string
	Language string
	Topic    string
	Status   string
}

type TopicCount

type TopicCount struct {
	Topic string `json:"topic"`
	Count int    `json:"count"`
}

type Video

type Video struct {
	ID                  uuid.UUID       `json:"id"`
	UserID              int             `json:"user_id"`
	KarakeepBookmarkID  string          `json:"karakeep_bookmark_id,omitempty"`
	YouTubeID           string          `json:"youtube_id"`
	Title               string          `json:"title"`
	Channel             string          `json:"channel"`
	DurationSeconds     int             `json:"duration_seconds,omitempty"`
	Language            string          `json:"language,omitempty"`
	Transcript          string          `json:"transcript,omitempty"`
	Summary             string          `json:"summary,omitempty"`
	DetailLevel         string          `json:"detail_level"`
	SummaryProvider     string          `json:"summary_provider,omitempty"`
	SummaryModel        string          `json:"summary_model,omitempty"`
	SummaryInputTokens  int             `json:"summary_input_tokens,omitempty"`
	SummaryOutputTokens int             `json:"summary_output_tokens,omitempty"`
	Metadata            json.RawMessage `json:"metadata"`
	Status              string          `json:"status"`
	ErrorMessage        string          `json:"error_message,omitempty"`
	CreatedAt           time.Time       `json:"created_at"`
	UpdatedAt           time.Time       `json:"updated_at"`
}

type VideoMatch

type VideoMatch struct {
	ID         uuid.UUID       `json:"id"`
	YouTubeID  string          `json:"youtube_id"`
	Title      string          `json:"title"`
	Channel    string          `json:"channel"`
	Summary    string          `json:"summary"`
	Metadata   json.RawMessage `json:"metadata"`
	Similarity float64         `json:"similarity"`
	CreatedAt  time.Time       `json:"created_at"`
}

type VideoStats

type VideoStats struct {
	TotalCount           int            `json:"total_count"`
	TotalDurationSeconds int64          `json:"total_duration_seconds"`
	ByStatus             map[string]int `json:"by_status"`
	ByChannel            []ChannelCount `json:"by_channel"`
	TopTopics            []TopicCount   `json:"top_topics"`
	DailyActivity        []DailyCount   `json:"daily_activity"`
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL