feat: add episode availability cache and provider mapping tables

This commit is contained in:
2026-05-17 21:15:59 +02:00
parent 9ba327d5c5
commit dd2f7247f1
2 changed files with 106 additions and 0 deletions

View File

@@ -0,0 +1,27 @@
-- +goose Up
CREATE TABLE IF NOT EXISTS episode_availability_cache (
anime_id INTEGER PRIMARY KEY,
data TEXT NOT NULL,
next_refresh_at DATETIME,
retry_until_at DATETIME,
last_attempt_at DATETIME,
last_success_at DATETIME,
failure_count INTEGER NOT NULL DEFAULT 0,
last_error TEXT NOT NULL DEFAULT '',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS episode_provider_mapping (
anime_id INTEGER NOT NULL,
provider TEXT NOT NULL,
provider_show_id TEXT NOT NULL,
failed_until DATETIME,
last_error TEXT NOT NULL DEFAULT '',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (anime_id, provider)
);
CREATE INDEX IF NOT EXISTS idx_episode_availability_next_refresh
ON episode_availability_cache(next_refresh_at);
-- +goose Down

View File

@@ -0,0 +1,79 @@
-- +goose Up
PRAGMA foreign_keys=OFF;
ALTER TABLE episode_availability_cache RENAME TO episode_availability_cache_old;
CREATE TABLE IF NOT EXISTS episode_availability_cache (
anime_id INTEGER PRIMARY KEY,
data TEXT NOT NULL,
next_refresh_at DATETIME,
retry_until_at DATETIME,
last_attempt_at DATETIME,
last_success_at DATETIME,
failure_count INTEGER NOT NULL DEFAULT 0,
last_error TEXT NOT NULL DEFAULT '',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
);
INSERT OR REPLACE INTO episode_availability_cache (
anime_id,
data,
next_refresh_at,
retry_until_at,
last_attempt_at,
last_success_at,
failure_count,
last_error,
updated_at
)
SELECT
anime_id,
data,
next_refresh_at,
retry_until_at,
last_attempt_at,
last_success_at,
failure_count,
last_error,
updated_at
FROM episode_availability_cache_old;
DROP TABLE episode_availability_cache_old;
ALTER TABLE episode_provider_mapping RENAME TO episode_provider_mapping_old;
CREATE TABLE IF NOT EXISTS episode_provider_mapping (
anime_id INTEGER NOT NULL,
provider TEXT NOT NULL,
provider_show_id TEXT NOT NULL,
failed_until DATETIME,
last_error TEXT NOT NULL DEFAULT '',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (anime_id, provider)
);
INSERT OR REPLACE INTO episode_provider_mapping (
anime_id,
provider,
provider_show_id,
failed_until,
last_error,
updated_at
)
SELECT
anime_id,
provider,
provider_show_id,
failed_until,
last_error,
updated_at
FROM episode_provider_mapping_old;
DROP TABLE episode_provider_mapping_old;
CREATE INDEX IF NOT EXISTS idx_episode_availability_next_refresh
ON episode_availability_cache(next_refresh_at);
PRAGMA foreign_keys=ON;
-- +goose Down