Lesezeichen, Import/Export, Favoriten-Sortierung im Frontend, Favicon-Fix, sortierbare Spalten, Kategorie-Dropdown

This commit is contained in:
2026-07-19 21:56:25 +02:00
parent 31e17ff77b
commit dc91a9aba9
24 changed files with 1655 additions and 180 deletions

View File

@@ -10,8 +10,10 @@ import { scanRoutes } from "./routes/scan.js";
import { logRoutes } from "./routes/logs.js";
import { pluginRoutes } from "./routes/plugins.js";
import { resetRoutes } from "./routes/reset.js";
import { bookmarkRoutes } from "./routes/bookmarks.js";
import { loadPlugins } from "./plugins/loader.js";
import * as serviceRepo from "./db/repositories/services.js";
import * as bookmarkRepo from "./db/repositories/bookmarks.js";
import * as categoryRepo from "./db/repositories/categories.js";
const PORT = Number(process.env.PORT ?? 3001);
@@ -40,10 +42,10 @@ async function main() {
// der Suche als Kategorie auftaucht.
const existingCategoryNames = Array.from(
new Set(
serviceRepo
.listServices()
.map((s) => s.category)
.filter((c): c is string => !!c)
[
...serviceRepo.listServices().map((s) => s.category),
...bookmarkRepo.listBookmarks().map((b) => b.category),
].filter((c): c is string => !!c)
)
);
const syncedCount = categoryRepo.syncCategoriesFromServiceValues(existingCategoryNames);
@@ -62,6 +64,7 @@ async function main() {
await app.register(logRoutes);
await app.register(pluginRoutes);
await app.register(resetRoutes);
await app.register(bookmarkRoutes);
app.get("/", async () => {
return { name: "LaunchPad API", status: "running" };