feat(news): backend ingester service + curated feed API

Adds the services/news-ingester Bun service that pulls 25 public RSS/JSON
feeds into news.curated_articles every 15 min, with Mozilla Readability
fallback for thin RSS bodies and 30-day retention. apps/api /feed is
rewritten to read from the new pool table directly instead of the
sync_changes hack, with topics/lang/since/limit/offset query params.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Till JS 2026-04-09 15:53:26 +02:00
parent 45790ffbb8
commit 9ef97a1877
17 changed files with 1058 additions and 64 deletions

View file

@ -34,6 +34,7 @@ push_schema "mana-credits" "services/mana-credits"
push_schema "mana-user" "services/mana-user"
push_schema "mana-subscriptions" "services/mana-subscriptions"
push_schema "mana-analytics" "services/mana-analytics"
push_schema "news-ingester" "services/news-ingester"
echo ""
echo "Done. mana-sync creates its schema automatically on startup."

View file

@ -77,6 +77,7 @@ PLATFORM_SCHEMAS=(
"uload"
"cards"
"events"
"news"
)
# Check if specific service requested
@ -122,9 +123,12 @@ setup_service() {
events|mana-events)
push_schema "@mana/events" "mana-events"
;;
news|news-ingester)
push_schema "@mana/news-ingester" "news-ingester"
;;
*)
echo -e "${RED}Unknown service: $service${NC}"
echo "Available services: auth, credits, user, subscriptions, analytics, media, todo, traces, presi, uload, cards, events"
echo "Available services: auth, credits, user, subscriptions, analytics, media, todo, traces, presi, uload, cards, events, news"
exit 1
;;
esac
@ -154,7 +158,7 @@ done
echo -e "\n${GREEN}Step 3: Pushing schemas${NC}"
echo "--------------------------------------"
for service in auth credits user subscriptions analytics media todo traces presi uload cards events; do
for service in auth credits user subscriptions analytics media todo traces presi uload cards events news; do
setup_service "$service" 2>/dev/null || true
done