diff --git a/.phase5-state.json b/.phase5-state.json index 0f56e26..e1fa6cc 100644 --- a/.phase5-state.json +++ b/.phase5-state.json @@ -4,9 +4,10 @@ "customer-detail-page", "project-detail-page" ], - "current_feature": "api-client-phase5", + "current_feature": "router-phase5", "started_at": "2026-05-23T05:20:11.407108", "attempted_features": [ - "settings-page" + "settings-page", + "api-client-phase5" ] } \ No newline at end of file diff --git a/GENERATION_LOG.md b/GENERATION_LOG.md index a700c80..ef0dfd9 100644 --- a/GENERATION_LOG.md +++ b/GENERATION_LOG.md @@ -603,3 +603,21 @@ src/routes/settings.ts(3,10): error TS2305: Module '"../db/schema"' has no expor undefined /home/dark/Developer/EmberClone/apps/api:  ERR_PNPM_RECURSIVE_EXEC_FIRST_FAIL  Command failed with exit code 2: tsc --noEmit -p tsconfig.json +- `05:24:51` **INFO** Committed feature api-client-phase5 +- `05:24:52` **INFO** Pushed: rc=0 + +## Phase-3 Feature: router-phase5 (2026-05-23 05:24:52) + +- `05:24:52` **INFO** Description: App.tsx + Nav um neue Routen erweitern + db-migrate nicht vergessen +- `05:24:52` **INFO** Generating apps/api/src/routes/index.ts (ERWEITERT — behalte alle bestehenden registrations. Füge `settingsRout…) +- `05:24:57` **INFO** wrote 703 chars in 5.6s (attempt 1) +- `05:24:57` **INFO** Generating apps/web/src/App.tsx (ERWEITERT — füge Routes /customers/$id (CustomerDetail), /projects/$id…) +- `05:25:26` **INFO** wrote 3410 chars in 29.0s (attempt 1) +- `05:25:26` **INFO** Generating apps/web/src/components/Nav.tsx (ERWEITERT — füge Settings-Link bei admin-role + Theme-Toggle. Behalte …) +- `05:26:12` **INFO** wrote 5232 chars in 46.3s (attempt 1) +- `05:26:12` **INFO** Running tsc --noEmit on api… +- `05:26:14` **WARN** tsc errors: +src/routes/settings.ts(3,10): error TS2305: Module '"../db/schema"' has no exported member 'settings'. +undefined +/home/dark/Developer/EmberClone/apps/api: + ERR_PNPM_RECURSIVE_EXEC_FIRST_FAIL  Command failed with exit code 2: tsc --noEmit -p tsconfig.json diff --git a/apps/api/src/routes/index.ts b/apps/api/src/routes/index.ts index ac21070..c6b68f8 100644 --- a/apps/api/src/routes/index.ts +++ b/apps/api/src/routes/index.ts @@ -4,6 +4,7 @@ import customerRoutes from "./customers" import projectRoutes from "./projects" import timeEntryRoutes from "./time-entries" import userRoutes from "./users" +import settingsRoutes from "./settings" export async function setupRoutes(server: FastifyInstance) { server.register(authRoutes, { prefix: "/api/auth" }) @@ -11,4 +12,5 @@ export async function setupRoutes(server: FastifyInstance) { server.register(customerRoutes, { prefix: "/api/customers" }) server.register(projectRoutes, { prefix: "/api/projects" }) server.register(userRoutes, { prefix: "/api/users" }) -} + server.register(settingsRoutes, { prefix: "/api/settings" }) +} \ No newline at end of file diff --git a/apps/web/src/App.tsx b/apps/web/src/App.tsx index 47b0b51..5291cf4 100644 --- a/apps/web/src/App.tsx +++ b/apps/web/src/App.tsx @@ -3,9 +3,12 @@ import Dashboard from "./pages/Dashboard" import Login from "./pages/Login" import TimeEntries from "./pages/TimeEntries" import Customers from "./pages/Customers" +import CustomerDetail from "./pages/CustomerDetail" import Projects from "./pages/Projects" +import ProjectDetail from "./pages/ProjectDetail" import Profile from "./pages/Profile" import AdminUsers from "./pages/AdminUsers" +import Settings from "./pages/Settings" import Nav from "./components/Nav" import { ToastProvider } from "./components/Toast" import ErrorBoundary from "./components/ErrorBoundary" @@ -73,6 +76,13 @@ const customersRoute = createRoute({ component: Customers }) +const customerDetailRoute = createRoute({ + getParentRoute: () => rootRoute, + path: "/customers/$id", + beforeLoad: authCheck, + component: CustomerDetail +}) + const projectsRoute = createRoute({ getParentRoute: () => rootRoute, path: "/projects", @@ -80,6 +90,13 @@ const projectsRoute = createRoute({ component: Projects }) +const projectDetailRoute = createRoute({ + getParentRoute: () => rootRoute, + path: "/projects/$id", + beforeLoad: authCheck, + component: ProjectDetail +}) + const profileRoute = createRoute({ getParentRoute: () => rootRoute, path: "/profile", @@ -94,14 +111,24 @@ const adminRoute = createRoute({ component: AdminUsers }) +const settingsRoute = createRoute({ + getParentRoute: () => rootRoute, + path: "/settings", + beforeLoad: adminCheck, + component: Settings +}) + const routeTree = rootRoute.addChildren([ indexRoute, loginRoute, timeEntriesRoute, customersRoute, + customerDetailRoute, projectsRoute, + projectDetailRoute, profileRoute, - adminRoute + adminRoute, + settingsRoute ]) const router = createRouter({ diff --git a/apps/web/src/components/Nav.tsx b/apps/web/src/components/Nav.tsx index eb44e70..3135bfc 100644 --- a/apps/web/src/components/Nav.tsx +++ b/apps/web/src/components/Nav.tsx @@ -9,7 +9,8 @@ import { LogOut, ShieldCheck, Sun, - Moon + Moon, + Settings } from "lucide-react" import { useQuery } from "@tanstack/react-query" import { api } from "../lib/api" @@ -73,17 +74,30 @@ export default function Nav() { })} {user?.role === 'admin' && ( - - - Admin - + <> + + + Admin + + + + Settings + + )} @@ -108,10 +122,10 @@ export default function Nav() { Profile - +