Koucha/koucha/migrations/20260115003047_initial_schema.sql
Julia Lange 6702f976cb
Add sqlx, add Adapter, create initial schema
Adds SQLX for database management, and an Adapter interface for
interacting with it. Through the type "AdapterPool"

Creates an initial_schema with everything I think I'll need.
2026-02-05 12:25:34 -08:00

62 lines
1.3 KiB
SQL

-- Add migration script here
PRAGMA foreign_keys = ON;
CREATE TABLE users (
id INTEGER PRIMARY KEY,
name TEXT UNIQUE NOT NULL
);
CREATE TABLE channels (
id INTEGER PRIMARY KEY,
title TEXT NOT NULL,
link TEXT UNIQUE NOT NULL,
description TEXT,
last_fetched TEXT
);
CREATE TABLE items (
id INTEGER PRIMARY KEY,
channel_id INTEGER NOT NULL,
guid TEXT NOT NULL,
fetched_at TEXT,
title TEXT,
description TEXT,
content TEXT,
UNIQUE(channel_id, guid),
FOREIGN KEY (channel_id) REFERENCES channels(id)
);
CREATE TABLE feeds (
id INTEGER PRIMARY KEY,
user_id INTEGER NOT NULL,
title TEXT NOT NULL,
FOREIGN KEY (user_id) REFERENCES users(id)
);
CREATE TABLE feed_channels (
feed_id INTEGER NOT NULL,
channel_id INTEGER NOT NULL,
initial_score INTEGER,
gravity INTEGER,
boost INTEGER,
PRIMARY KEY (feed_id, channel_id),
FOREIGN KEY (feed_id) REFERENCES feeds(id),
FOREIGN KEY (channel_id) REFERENCES channels(id)
);
CREATE TABLE feed_items (
item_id INTEGER NOT NULL,
feed_id INTEGER NOT NULL,
score INTEGER NOT NULL,
last_updated TEXT NOT NULL,
boosted_at TEXT,
archived BOOLEAN DEFAULT FALSE,
PRIMARY KEY (item_id, feed_id),
FOREIGN KEY (feed_id) REFERENCES feeds(id),
FOREIGN KEY (item_id) REFERENCES items(id)
);
CREATE INDEX idx_feed_items_score
ON feed_items(feed_id, archived, score DESC);