Add grouping categories feature

This commit is contained in:
2025-06-08 17:12:48 +09:00
parent fdaa7bb445
commit 3fee0294d9
3 changed files with 140 additions and 12 deletions

View File

@ -10,10 +10,12 @@ import {
deleteFeed,
fetchAllEpisodes,
fetchEpisodesWithArticles,
getAllCategories,
getAllFeedsIncludingInactive,
getFeedById,
getFeedByUrl,
getFeedRequests,
getFeedsByCategory,
getFeedsGroupedByCategory,
toggleFeedActive,
updateFeedRequestStatus,
} from "./services/database.js";
@ -199,6 +201,38 @@ app.patch("/api/admin/feeds/:id/toggle", async (c) => {
}
});
// Categories management
app.get("/api/admin/categories", async (c) => {
try {
const categories = await getAllCategories();
return c.json(categories);
} catch (error) {
console.error("Error fetching categories:", error);
return c.json({ error: "Failed to fetch categories" }, 500);
}
});
app.get("/api/admin/feeds/by-category", async (c) => {
try {
const category = c.req.query("category");
const feeds = await getFeedsByCategory(category);
return c.json(feeds);
} catch (error) {
console.error("Error fetching feeds by category:", error);
return c.json({ error: "Failed to fetch feeds by category" }, 500);
}
});
app.get("/api/admin/feeds/grouped-by-category", async (c) => {
try {
const groupedFeeds = await getFeedsGroupedByCategory();
return c.json(groupedFeeds);
} catch (error) {
console.error("Error fetching feeds grouped by category:", error);
return c.json({ error: "Failed to fetch feeds grouped by category" }, 500);
}
});
// Episodes management
app.get("/api/admin/episodes", async (c) => {
try {
@ -349,7 +383,10 @@ app.get("/api/admin/db-diagnostic", async (c) => {
} catch (error) {
console.error("Error running database diagnostic:", error);
return c.json(
{ error: "Failed to run database diagnostic", details: error.message },
{
error: "Failed to run database diagnostic",
details: error instanceof Error ? error.message : String(error)
},
500,
);
}
@ -635,16 +672,6 @@ app.get("/", serveAdminIndex);
app.get("/index.html", serveAdminIndex);
app.get("*", serveAdminIndex);
// Utility functions
async function runBatchProcess(): Promise<void> {
try {
await batchProcess();
} catch (error) {
console.error("Admin batch process failed:", error);
throw error;
}
}
// Start admin server
serve(
{