Skip to content

feat(frontend): P2-A static hosting + API client + login/session integration (v0.3.1) - #78

Merged
argszero merged 1 commit into
mainfrom
feat/frontend-p2a-serve-login
Aug 18, 2026
Merged

argszero merged 1 commit into
mainfrom
feat/frontend-p2a-serve-login

Conversation

@argszero

Copy link
Copy Markdown
Owner

Summary

Backend P2-A — frontend integration phase 1 (rant 2026-08-18T11:49:52.330450, "前端对接 P2-A — 静态托管 + API 客户端层 + 登录/会话对接"). Makes the UI prototype run against the real backend (v0.3.1):

  1. Static hostingRouter::fallback_service(ServeDir::new("ui")) (API routes take priority; tower-http fs feature already present). cargo run → browse http://127.0.0.1:8080/ opens the app directly.
  2. API client layer (ui/js/api.js, new) — api.get/post/patch with automatic Authorization: Bearer <token>; token in localStorage (remember-me) vs sessionStorage (session-only); unified 401 handling (clear token → back to login); non-2xx throws {status, message} from backend error.message/error; base URL same-origin by default, overridable via ?api=.
  3. Login integration (app.js) — POST /api/auth/login → save token → GET /api/me (new endpoint returning id/email/name/role) + GET /api/wallet (sidebar balance = available, failure → 0 + red toast); wrong password → inline field error; logout clears token; refresh with token auto-restores session.
  4. Role-based nav — admin view only visible for role=admin (renderNav filter + switchView/keyboard guards).

Related Issue

Rant: 2026-08-18T11:49:52.330450 (P2-A frontend integration)

Tests

  • 63/63 pass (+2: static hosting serves ui/index.html + /css/style.css; /api/me returns user info + role)
  • cargo fmt --check + cargo clippy --all-targets -- -D warnings clean; node --check on new/modified JS
  • Live smoke (release build): GET / → 200 text/html; /js/api.js → 200; demo login → key; /api/me{name: 阿零, role: user}; /api/wallet → real balance; wrong password → 401; admin login → role: admin; admin users 200 / demo 403; API routes take priority over static

Checklist

  • Branch per convention (feat/frontend-p2a-serve-login)
  • Conventional Commits message
  • Single purpose, minimal change

- 后端:router fallback_service(ServeDir::new("ui")) 静态托管(API 路由优先);新增 GET /api/me(id/email/name/role)
- ui/js/api.js 新增:api.get/post/patch 封装 + Bearer token(记住我 localStorage / 关闭失效 sessionStorage)+ 401 统一清 token 回登录页 + 非 2xx 抛 {status,message} + ?api= base 覆盖
- 登录页对接 POST /api/auth/login:成功存 token 拉会话(/api/me + /api/wallet 侧边栏余额);401 行内报错;登出清 token;刷新有 token 自动恢复会话
- 管理视图按 role 显隐(renderNav 过滤 + switchView/快捷键兜底);登录页文案更新(demo/admin 账号提示)
- 测试 61→63(静态托管返回 index.html / me 返回用户信息与 role)
@argszero
argszero merged commit 8bd1063 into main Aug 18, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant