49 lines
3.0 KiB
MySQL
49 lines
3.0 KiB
MySQL
|
|
-- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||
|
|
-- Posimai Feed - Media Sources Table Migration
|
||
|
|
-- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||
|
|
-- Purpose: Store user-customizable RSS feed sources
|
||
|
|
-- Date: 2026-03-02
|
||
|
|
-- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||
|
|
|
||
|
|
-- Create media_sources table
|
||
|
|
CREATE TABLE IF NOT EXISTS media_sources (
|
||
|
|
id SERIAL PRIMARY KEY,
|
||
|
|
user_id TEXT NOT NULL, -- User identifier (from authMiddleware)
|
||
|
|
feed_url TEXT NOT NULL, -- RSS feed URL
|
||
|
|
feed_name TEXT NOT NULL, -- Display name (e.g., "TechCrunch")
|
||
|
|
feed_icon TEXT, -- Favicon URL
|
||
|
|
category TEXT, -- User-defined category (e.g., "Tech", "News")
|
||
|
|
is_active BOOLEAN DEFAULT true, -- Enable/disable feed without deleting
|
||
|
|
last_fetched_at TIMESTAMP, -- Last time articles were fetched
|
||
|
|
fetch_interval_minutes INTEGER DEFAULT 60, -- How often to fetch (default: 1 hour)
|
||
|
|
created_at TIMESTAMP DEFAULT NOW(),
|
||
|
|
updated_at TIMESTAMP DEFAULT NOW(),
|
||
|
|
|
||
|
|
-- Prevent duplicate feeds per user
|
||
|
|
UNIQUE(user_id, feed_url)
|
||
|
|
);
|
||
|
|
|
||
|
|
-- Create index for efficient queries
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_media_sources_user_active
|
||
|
|
ON media_sources(user_id, is_active);
|
||
|
|
|
||
|
|
-- Create index for scheduled fetching
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_media_sources_fetch_schedule
|
||
|
|
ON media_sources(is_active, last_fetched_at)
|
||
|
|
WHERE is_active = true;
|
||
|
|
|
||
|
|
-- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||
|
|
-- Sample Data (Optional - for testing)
|
||
|
|
-- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||
|
|
|
||
|
|
-- Example: Add default feeds for new users
|
||
|
|
-- INSERT INTO media_sources (user_id, feed_url, feed_name, category) VALUES
|
||
|
|
-- ('pk_maita_demo', 'https://zenn.dev/feed', 'Zenn', 'Tech'),
|
||
|
|
-- ('pk_maita_demo', 'https://qiita.com/popular-items/feed', 'Qiita', 'Tech');
|
||
|
|
|
||
|
|
-- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||
|
|
-- Rollback (if needed)
|
||
|
|
-- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||
|
|
|
||
|
|
-- DROP TABLE IF EXISTS media_sources;
|