Feature 4: Webinterface — React-Frontend, Discord-OAuth2, REST-API
- Discord-OAuth2-Login (identify-Scope, CSRF-State, signierte Session-Cookies, keine Token-Speicherung) - REST-API: /api/devlogs (öffentlich), /api/commits (nur ADMIN_DISCORD_ID), /api/me - React + Vite Frontend: Devlog-Archiv mit Mini-Markdown-Renderer, Commit-Tabelle, dunkles EcoGame-Theme - Fastify liefert frontend/dist mit SPA-Fallback aus; Vite-Dev-Proxy für lokale Entwicklung - Multi-Stage-Dockerfile (Frontend-Build im Image), neue Env-Vars in Compose + .env.example - README: OAuth2-Setup (Redirect-URLs, Client Secret) und Frontend-Workflow Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -58,3 +58,25 @@ const insertDevlog = db.prepare(`
|
||||
export function saveDevlog(devlog) {
|
||||
return insertDevlog.run(devlog).changes > 0;
|
||||
}
|
||||
|
||||
// --- Lese-Queries für die Web-API (Feature 4) ---
|
||||
|
||||
const selectDevlogs = db.prepare(`
|
||||
SELECT message_id, content, author_name, posted_at
|
||||
FROM devlogs ORDER BY posted_at DESC LIMIT ? OFFSET ?
|
||||
`);
|
||||
const countDevlogsStmt = db.prepare('SELECT COUNT(*) AS n FROM devlogs');
|
||||
|
||||
export function listDevlogs(limit, offset) {
|
||||
return { items: selectDevlogs.all(limit, offset), total: countDevlogsStmt.get().n };
|
||||
}
|
||||
|
||||
const selectCommits = db.prepare(`
|
||||
SELECT sha, repo, branch, message, author_name, url, committed_at
|
||||
FROM commits ORDER BY committed_at DESC LIMIT ? OFFSET ?
|
||||
`);
|
||||
const countCommitsStmt = db.prepare('SELECT COUNT(*) AS n FROM commits');
|
||||
|
||||
export function listCommits(limit, offset) {
|
||||
return { items: selectCommits.all(limit, offset), total: countCommitsStmt.get().n };
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user