feat(profile): add profile page and styles, update route access
Docker Image / Build and Push Docker Image (push) Successful in 4m8s

This commit is contained in:
2026-07-07 19:11:25 +08:00
parent 1f1674ee59
commit 43e5cc95af
6 changed files with 597 additions and 2 deletions
+7 -2
View File
@@ -1,13 +1,14 @@
import { describe, expect, it } from "vitest";
import { getRouteAccess, isInternalRoute } from "../route-meta";
import { ROUTES } from "../routes";
import { ALL_STATIC_ROUTES, ROUTES } from "../routes";
describe("route meta", () => {
it("classifies static routes by access level", () => {
expect(getRouteAccess(ROUTES.splash)).toBe("authOnly");
expect(getRouteAccess(ROUTES.auth)).toBe("authOnly");
expect(getRouteAccess(ROUTES.chat)).toBe("session");
expect(getRouteAccess(ROUTES.chat)).toBe("guestEntry");
expect(getRouteAccess(ROUTES.profile)).toBe("public");
expect(getRouteAccess(ROUTES.sidebar)).toBe("session");
expect(getRouteAccess(ROUTES.subscription)).toBe("realUser");
expect(getRouteAccess(ROUTES.coinsRules)).toBe("public");
@@ -18,6 +19,10 @@ describe("route meta", () => {
expect(getRouteAccess("/chat/deviceid/device_1")).toBe("public");
});
it("includes profile in static routes", () => {
expect(ALL_STATIC_ROUTES).toContain(ROUTES.profile);
});
it("treats unknown routes as public by default", () => {
expect(getRouteAccess("/unknown")).toBe("public");
});
+1
View File
@@ -12,6 +12,7 @@ const STATIC_ROUTE_ACCESS: Partial<Record<string, RouteAccess>> = {
[ROUTES.splash]: "authOnly",
[ROUTES.auth]: "authOnly",
[ROUTES.chat]: "guestEntry",
[ROUTES.profile]: "public",
[ROUTES.sidebar]: "session",
[ROUTES.subscription]: "realUser",
[ROUTES.coinsRules]: "public",
+2
View File
@@ -21,6 +21,7 @@ export const ROUTES = {
root: "/",
splash: "/splash",
chat: "/chat",
profile: "/profile",
auth: "/auth",
sidebar: "/sidebar",
subscription: "/subscription",
@@ -52,6 +53,7 @@ export const ROUTE_BUILDERS = {
export const ALL_STATIC_ROUTES: readonly StaticRoute[] = [
ROUTES.splash,
ROUTES.chat,
ROUTES.profile,
ROUTES.auth,
ROUTES.sidebar,
ROUTES.coinsRules,