Files

35 lines
1.6 KiB
SQL
Raw Permalink Normal View History

-- +goose Up
-- +goose StatementBegin
-- Active Audiobookshelf-compatible play sessions. One row per
-- /abs/api/items/{id}/play that hasn't yet been closed via
-- /abs/api/session/{sid}/close. Used to track per-session listening
-- time for ABS apps' "time listened today" stats.
CREATE TABLE IF NOT EXISTS public.abs_playback_sessions (
id TEXT PRIMARY KEY, -- ULID issued at play start
user_id INTEGER NOT NULL REFERENCES public.users(id) ON DELETE CASCADE,
profile_id TEXT NOT NULL,
content_id TEXT NOT NULL REFERENCES public.media_items(content_id) ON DELETE CASCADE,
media_file_id INTEGER REFERENCES public.media_files(id) ON DELETE SET NULL,
started_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(),
last_sync_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(),
closed_at TIMESTAMP WITH TIME ZONE,
time_listening_seconds INTEGER NOT NULL DEFAULT 0,
current_position_seconds DOUBLE PRECISION NOT NULL DEFAULT 0
);
CREATE INDEX IF NOT EXISTS idx_abs_playback_sessions_user_profile
ON public.abs_playback_sessions (user_id, profile_id);
CREATE INDEX IF NOT EXISTS idx_abs_playback_sessions_open
ON public.abs_playback_sessions (closed_at)
WHERE closed_at IS NULL;
-- +goose StatementEnd
-- +goose Down
-- +goose StatementBegin
DROP INDEX IF EXISTS public.idx_abs_playback_sessions_open;
DROP INDEX IF EXISTS public.idx_abs_playback_sessions_user_profile;
DROP TABLE IF EXISTS public.abs_playback_sessions;
-- +goose StatementEnd