argus/lib/schema.sql
Nazim 091e17c55b feat: smart notification filtering with reasons, own-PR detection, pagination
- Add filter_rules table for configurable dismiss/keep rules
- Batch own-PR lookup via GitHub search API (1 call vs N)
- CI status check only for own PRs (targeted, not blanket)
- filter_reason column on every notification explaining why kept/dismissed
- --no-filter flag to bypass filtering
- notif filter list/add/rm subcommands for rule management
- notif list --dismissed/--own flags
- gh_api --paginate support (was capped at 50)
- Auto-migration for existing databases
- Version bump to 0.4.0
2026-03-19 14:22:15 +00:00

97 lines
2.8 KiB
SQL

-- Argus Database Schema
-- Version: 0.1.0
-- Repositories being tracked
CREATE TABLE IF NOT EXISTS repos (
id TEXT PRIMARY KEY, -- owner/repo
description TEXT,
is_primary INTEGER DEFAULT 0,
last_synced_at TEXT
);
-- Issues and PRs
CREATE TABLE IF NOT EXISTS issues (
id TEXT PRIMARY KEY, -- owner/repo#number
repo_id TEXT NOT NULL,
number INTEGER NOT NULL,
type TEXT NOT NULL, -- issue | pr
title TEXT NOT NULL,
state TEXT NOT NULL, -- open | closed | merged
author TEXT,
labels TEXT DEFAULT '[]',
created_at TEXT,
updated_at TEXT,
FOREIGN KEY (repo_id) REFERENCES repos(id)
);
-- GitHub notifications
CREATE TABLE IF NOT EXISTS notifications (
id TEXT PRIMARY KEY,
issue_id TEXT,
repo_id TEXT,
reason TEXT,
title TEXT,
url TEXT,
type TEXT,
seen_at TEXT,
acted_at TEXT,
action_taken TEXT,
dismissed INTEGER DEFAULT 0,
filter_reason TEXT,
is_own_pr INTEGER DEFAULT 0,
ci_status TEXT,
FOREIGN KEY (issue_id) REFERENCES issues(id),
FOREIGN KEY (repo_id) REFERENCES repos(id)
);
-- Filter rules for auto-dismissing notifications
CREATE TABLE IF NOT EXISTS filter_rules (
id INTEGER PRIMARY KEY AUTOINCREMENT,
field TEXT NOT NULL, -- reason | repo_id | title | type
op TEXT NOT NULL, -- eq | neq | contains | matches
value TEXT NOT NULL,
action TEXT DEFAULT 'dismiss', -- dismiss | keep
priority INTEGER DEFAULT 0, -- higher = checked first
enabled INTEGER DEFAULT 1,
description TEXT
);
-- Activity log
CREATE TABLE IF NOT EXISTS activity_log (
id INTEGER PRIMARY KEY AUTOINCREMENT,
timestamp TEXT DEFAULT (datetime('now')),
issue_id TEXT,
action TEXT NOT NULL,
detail TEXT,
github_url TEXT,
FOREIGN KEY (issue_id) REFERENCES issues(id)
);
-- Escalations
CREATE TABLE IF NOT EXISTS escalations (
id INTEGER PRIMARY KEY AUTOINCREMENT,
created_at TEXT DEFAULT (datetime('now')),
category TEXT NOT NULL,
priority TEXT DEFAULT 'normal',
title TEXT NOT NULL,
detail TEXT,
status TEXT DEFAULT 'open',
resolved_at TEXT,
resolved_by TEXT,
resolution TEXT
);
-- Poll history
CREATE TABLE IF NOT EXISTS notification_polls (
id INTEGER PRIMARY KEY AUTOINCREMENT,
polled_at TEXT DEFAULT (datetime('now')),
new_count INTEGER DEFAULT 0
);
-- Indexes for common queries
CREATE INDEX IF NOT EXISTS idx_notifications_dismissed ON notifications(dismissed);
CREATE INDEX IF NOT EXISTS idx_notifications_acted ON notifications(acted_at);
CREATE INDEX IF NOT EXISTS idx_activity_timestamp ON activity_log(timestamp);
CREATE INDEX IF NOT EXISTS idx_escalations_status ON escalations(status);
CREATE INDEX IF NOT EXISTS idx_issues_state ON issues(state);
CREATE INDEX IF NOT EXISTS idx_issues_repo ON issues(repo_id);