refactor(domain): make FeedId circulate through the domain and repository

FeedId is now the type of Feed.id and of every single-feed method on
FeedRepository; callers wrap raw strings via FeedId.fromTrusted at the
repository boundary. String-medium operations (URLs, logs, JSON,
list registry, email keys) stay string. Drop the redundant
generateFeedId wrapper in favour of FeedId.generate.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Julien Herr
2026-05-24 00:44:24 +02:00
parent 05388b45c8
commit ab1c15e69a
18 changed files with 162 additions and 124 deletions
+4 -1
View File
@@ -1,6 +1,7 @@
import { Context } from "hono";
import { Env } from "../types";
import { FeedRepository } from "../domain/feed-repository";
import { FeedId } from "../domain/value-objects/feed-id";
import { cacheFaviconForDomain, getCachedIcon } from "../utils/favicon-fetcher";
export const FAVICON_PATH = "/favicon.svg";
@@ -40,7 +41,9 @@ export async function handleFeedFavicon(
const feedId = c.req.param("feedId");
if (!feedId) return projectFavicon();
const metadata = await FeedRepository.from(env).getMetadata(feedId);
const metadata = await FeedRepository.from(env).getMetadata(
FeedId.fromTrusted(feedId),
);
const domain = metadata?.iconDomain;
if (!domain) return projectFavicon();