Chuyển tới nội dung chính

app-ca-nhan — Không gian cá nhân P.A.R.A

Ứng dụng thứ hai trên lõi Signet: mỗi người một chỗ cất tệp của riêng mình trong bốn thư mục Dự án, Lĩnh vực, Tài nguyên, Lưu trữ; tải lên, chuyển thư mục, tải về. Thêm vào mà không sửa mã dịch vụ lõi, chỉ thêm tay cấu hình (realm, route, compose, migration, metadata) — các bước và bằng chứng ở docs/them-ung-dung.md. Trang tĩnh JavaScript thuần (không bước biên dịch), nginx phục vụ ở /ca-nhan/ sau APISIX; mọi dữ liệu lấy qua cổng cùng tên miền — /realms/moc (Keycloak, client app-ca-nhan), /v1/graphql (Hasura, bảng personal.items), /api/files (svc-files: ClamAV, kho tệp).

TệpNội dung
public/index.html, style.cssTrang duy nhất; màu Liền mạch như Văn phòng điện tử, trên điện thoại bảng thành thẻ
fonts/be-vietnam-pro/ (chỉ trong image)Phông Be Vietnam Pro tự phục vụ (OFL-1.1, kèm OFL.txt): Dockerfile lấy từ gói npm @fontsource/be-vietnam-pro như Văn phòng, repo không chứa tệp phông (#305); index.html nạp be-vietnam-pro.css trước style.css; không gọi Google Fonts
public/app.jsVẽ thư mục, danh sách, tải lên → xếp vào thư mục đang mở, chuyển, tải về; chữ gán bằng textContent
public/auth.jsĐăng nhập Authorization Code + PKCE bằng oidc-client-ts (bản cho trình duyệt, lib/), cùng phiên SSO với Văn phòng điện tử; token trong sessionStorage
public/api.jsGọi GraphQL, POST /api/files (có tiến độ), GET /api/files/{id}; lỗi thành câu đọc được
public/i18n.jsBảng dịch vi/en (#306), ngôn ngữ lưu ở localStorage khóa moc.locale chung với Văn phòng điện tử; localize() gán chữ cho phần tử mang data-i18n và đặt <html lang>
public/para.jsPhần không đụng trình duyệt: bốn thư mục, câu GraphQL, định dạng cỡ và giờ, câu báo lỗi, đọc claim
nginx//ca-nhan/config.json (realm từ biến môi trường), CSP script-src 'self', nhật ký không ghi chuỗi truy vấn
tests/npm test (node --test, Node 22+, không cần npm ci): đối chiếu thư mục với ràng buộc CSDL, câu GraphQL với quyền Hasura, client realm, route, compose; logic của para.js, api.js; bảng dịch (i18n.test.js: không chữ tiếng Việt viết cứng ngoài bảng, hai bảng cùng khóa)

Chạy: make up (service app-ca-nhan trong profile app), mở ${MOC_PUBLIC_URL}/ca-nhan/; kiểm cả luồng qua cổng: make demo-ca-nhan. Bản cài dựng trước khi có ứng dụng này: python3 scripts/moc.py realm clients thêm client.