Update admin panel and server configuration

This commit is contained in:
2025-06-08 21:59:24 +09:00
parent b7f3ca6a27
commit 00ae265314
4 changed files with 584 additions and 79 deletions

View File

@ -14,12 +14,16 @@ import {
fetchEpisodesWithArticles,
getAllCategories,
getAllFeedsIncludingInactive,
getAllSettings,
getFeedByUrl,
getFeedRequests,
getFeedsByCategory,
getFeedsGroupedByCategory,
getSetting,
getSettingsForAdminUI,
toggleFeedActive,
updateFeedRequestStatus,
updateSetting,
} from "./services/database.js";
// Validate configuration on startup
@ -92,6 +96,74 @@ app.get("/api/admin/env", async (c) => {
}
});
// Settings management API endpoints
app.get("/api/admin/settings", async (c) => {
try {
const settings = await getSettingsForAdminUI();
return c.json(settings);
} catch (error) {
console.error("Error fetching settings:", error);
return c.json({ error: "Failed to fetch settings" }, 500);
}
});
app.get("/api/admin/settings/:key", async (c) => {
try {
const key = c.req.param("key");
const setting = await getSetting(key);
if (!setting) {
return c.json({ error: "Setting not found" }, 404);
}
// Mask credential values for security
if (setting.isCredential && setting.value) {
setting.value = "••••••••";
}
return c.json(setting);
} catch (error) {
console.error("Error fetching setting:", error);
return c.json({ error: "Failed to fetch setting" }, 500);
}
});
app.put("/api/admin/settings/:key", async (c) => {
try {
const key = c.req.param("key");
const { value } = await c.req.json<{ value: string }>();
if (!value && value !== "") {
return c.json({ error: "Setting value is required" }, 400);
}
console.log(`🔧 Admin updating setting: ${key}`);
// Check if setting exists
const existingSetting = await getSetting(key);
if (!existingSetting) {
return c.json({ error: "Setting not found" }, 404);
}
const updated = await updateSetting(key, value);
if (updated) {
return c.json({
result: "UPDATED",
message: "Setting updated successfully",
key,
// Don't return the value for credentials
value: existingSetting.isCredential ? "••••••••" : value,
});
} else {
return c.json({ error: "Failed to update setting" }, 500);
}
} catch (error) {
console.error("Error updating setting:", error);
return c.json({ error: "Failed to update setting" }, 500);
}
});
// Feed management API endpoints
app.get("/api/admin/feeds", async (c) => {
try {