pulse/infrastructure/db/database.ts
Edo Limburg c79eb6d76d Add CLI entry point, RSS content extraction, and image support
Features:
- Add CLI with commands: start, add, remove, list, fetch, status, items
- Auto-detect RSS format when adding feeds
- Auto-run database migrations on startup
- Extract full HTML content from RSS description field (NOS-style feeds)
- Extract image URLs from RSS enclosure tags
- Display images in terminal output with emoji
- Include imageUrl in JSON formatter output

Database:
- Add image_url column to feed_items table
- Update storage layer to persist imageUrl field

Tests:
- Add 10 CLI integration tests
- Add 3 RSS parser tests for image/content extraction
- Add 2 storage tests for imageUrl persistence

Dependencies:
- Add commander for CLI framework

All 144 tests passing
2026-05-05 23:05:30 +02:00

43 lines
1020 B
TypeScript

/**
* Kysely database type definitions.
* Defines the table schemas for type-safe queries.
*/
export interface FeedItemTable {
id: string;
source: string;
title: string;
url: string;
published_at: string; // ISO 8601 format
content: string | null;
summary: string | null;
image_url: string | null;
created_at: string; // ISO 8601 format
}
export interface SeenIdTable {
id: string;
seen_at: string; // ISO 8601 format
}
export interface FeedSourceTable {
id: string;
url: string;
name: string | null;
format: 'rss' | 'atom';
poll_interval_ms: number;
is_active: number; // SQLite stores boolean as 0/1
last_fetched_at: string | null; // ISO 8601
last_success_at: string | null; // ISO 8601
consecutive_failures: number;
created_at: string; // ISO 8601
updated_at: string; // ISO 8601
}
// Database interface used by Kysely
export interface Database {
feed_items: FeedItemTable;
seen_ids: SeenIdTable;
feed_sources: FeedSourceTable;
}