mirror of
https://github.com/juherr/kill-the-news.git
synced 2026-06-20 22:03:48 +00:00
refactor(domain): introduce FeedRepository as the single KV access layer
Centralise the KV key schema and all get/put access behind a FeedRepository class under src/domain/. Every feed/email/list/icon/websub/counter key was previously inlined across ~12 modules with two divergent storeEmail and addFeedToList implementations; the dead src/utils/storage.ts write path is removed and the email key convention unified on feed:<id>:<ts>. Behaviour-preserving: existing tests pass unchanged in logic, plus a new feed-repository.test.ts covering CRUD, key builders, list ops and counters. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -8,7 +8,7 @@ import { ADMIN_COOKIE_MAX_AGE } from "../config/constants";
|
||||
import { logger } from "../lib/logger";
|
||||
import { timingSafeEqual, checkProxyAuth } from "../lib/auth";
|
||||
import { Layout, clampText } from "./admin/ui";
|
||||
import { listAllFeeds } from "./admin/helpers";
|
||||
import { FeedRepository } from "../domain/feed-repository";
|
||||
import { updateFeedRecord } from "../lib/feed-service";
|
||||
import { feedRssUrl, feedAtomUrl, feedEmailAddress } from "../utils/urls";
|
||||
import { feedsRouter } from "./admin/feeds";
|
||||
@@ -282,14 +282,13 @@ const ExpiryBadge = ({ expiresAt }: { expiresAt: number }) => {
|
||||
app.get("/", async (c) => {
|
||||
// Type assertion for environment variables
|
||||
const env = c.env;
|
||||
const emailStorage = env.EMAIL_STORAGE;
|
||||
const url = new URL(c.req.url);
|
||||
const view = url.searchParams.get("view") === "table" ? "table" : "list";
|
||||
const message = url.searchParams.get("message");
|
||||
const count = Number(url.searchParams.get("count") || "0");
|
||||
|
||||
// List all feeds
|
||||
const feedList = await listAllFeeds(emailStorage);
|
||||
const feedList = await FeedRepository.from(env).listFeeds();
|
||||
|
||||
// Keep the dashboard fast: avoid N KV reads for N feeds.
|
||||
// We store title/description in `feeds:list` (description is optional for older data).
|
||||
|
||||
Reference in New Issue
Block a user