From caace928ac81c284629ee50942d72179d4da9784 Mon Sep 17 00:00:00 2001 From: Biswa Kalyan Bhuyan Date: Thu, 24 Apr 2025 09:13:07 +0530 Subject: feat: Fix loan API type assertion and complete core loan features - Resolve interface conversion panic in loan handlers by correcting user type assertions from *models.User to models.User - Finalize loan management API integration with frontend components - Implement remaining loan calculation logic and CRUD operations - Connect loan display components to backend APIs as per Phase 3 - Update project status in README.md to reflect completed loan features - Add CORS middleware configuration for frontend-backend communication This commit completes core loan management functionality and fixes critical type safety issues in the API handlers, enabling proper user context handling. --- frontend/src/app/(main)/layout.tsx | 94 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 frontend/src/app/(main)/layout.tsx (limited to 'frontend/src/app/(main)/layout.tsx') diff --git a/frontend/src/app/(main)/layout.tsx b/frontend/src/app/(main)/layout.tsx new file mode 100644 index 0000000..846a118 --- /dev/null +++ b/frontend/src/app/(main)/layout.tsx @@ -0,0 +1,94 @@ +'use client'; + +import { useEffect, useState } from 'react'; +import { useRouter } from 'next/navigation'; +import Link from 'next/link'; +import { Button } from '@/components/ui/button'; +import { authApi, userApi } from '@/lib/api'; +import { ThemeToggle } from '@/components/shared/ThemeToggle'; + + +export default function MainLayout({ + children, +}: Readonly<{ + children: React.ReactNode; +}>) { + const router = useRouter(); + const [userName, setUserName] = useState(''); + const [isLoading, setIsLoading] = useState(true); + + useEffect(() => { + // Check if user is authenticated + const token = localStorage.getItem('token'); + if (!token) { + router.push('/login'); + return; + } + + // Fetch user profile + userApi.getProfile() + .then(data => { + setUserName(data.user.Name); + setIsLoading(false); + }) + .catch(() => { + // If error fetching profile, redirect to login + router.push('/login'); + }); + }, [router]); + + const handleLogout = () => { + authApi.logout(); + }; + + if (isLoading) { + return
Loading...
; + } + + return ( +
+ {/* Top Navigation */} +
+
+
+
Finance Management
+
+ +
+ Welcome!, {userName} + + +
+
+
+ + {/* Main Content */} +
+ {/* Sidebar */} + + + {/* Page Content */} +
+ {children} +
+
+
+ ); +} \ No newline at end of file -- cgit v1.2.3-59-g8ed1b