feat: Implement an admin quest management table, enhance toast notifications with descriptions, and add new agent documentation.

This commit is contained in:
syntaxbullet
2026-01-16 15:58:48 +01:00
parent 4ecbffd617
commit 58f261562a
12 changed files with 589 additions and 44 deletions

View File

@@ -222,6 +222,67 @@ export async function createWebServer(config: WebServerConfig = {}): Promise<Web
}
}
if (url.pathname.startsWith("/api/quests/") && req.method === "DELETE") {
const id = parseInt(url.pathname.split("/").pop() || "0", 10);
if (!id) {
return Response.json({ error: "Invalid quest ID" }, { status: 400 });
}
try {
const { questService } = await import("@shared/modules/quest/quest.service");
const result = await questService.deleteQuest(id);
if (result.length === 0) {
return Response.json({ error: "Quest not found" }, { status: 404 });
}
return Response.json({ success: true, deleted: result[0].id });
} catch (error) {
logger.error("web", "Error deleting quest", error);
return Response.json(
{ error: "Failed to delete quest", details: error instanceof Error ? error.message : String(error) },
{ status: 500 }
);
}
}
if (url.pathname.startsWith("/api/quests/") && req.method === "PUT") {
const id = parseInt(url.pathname.split("/").pop() || "0", 10);
if (!id) {
return Response.json({ error: "Invalid quest ID" }, { status: 400 });
}
try {
const { questService } = await import("@shared/modules/quest/quest.service");
const data = await req.json();
const result = await questService.updateQuest(id, {
name: data.name,
description: data.description,
triggerEvent: data.triggerEvent,
requirements: { target: Number(data.target) || 1 },
rewards: {
xp: Number(data.xpReward) || 0,
balance: Number(data.balanceReward) || 0
}
});
if (result.length === 0) {
return Response.json({ error: "Quest not found" }, { status: 404 });
}
return Response.json({ success: true, quest: result[0] });
} catch (error) {
logger.error("web", "Error updating quest", error);
return Response.json(
{ error: "Failed to update quest", details: error instanceof Error ? error.message : String(error) },
{ status: 500 }
);
}
}
// Settings Management
if (url.pathname === "/api/settings") {
try {