From 28a491c46b467228980e83f9c12e466791bcfe1a Mon Sep 17 00:00:00 2001 From: bender Date: Wed, 11 Mar 2026 20:29:38 +0000 Subject: [PATCH] Update src/hooks/useAuth.ts --- src/hooks/useAuth.ts | 139 ++++++++++++++----------------------------- 1 file changed, 45 insertions(+), 94 deletions(-) diff --git a/src/hooks/useAuth.ts b/src/hooks/useAuth.ts index c845ff7..ec193c2 100644 --- a/src/hooks/useAuth.ts +++ b/src/hooks/useAuth.ts @@ -1,111 +1,62 @@ -"use client"; +/** + * Custom Hook for Authentication Management + * Provides easy access to auth state and functions throughout the app + */ -import { useState, useEffect, useCallback } from "react"; +import { useState, useCallback, useEffect } from 'react'; +import { + getUserSession, + isUserLoggedIn, + clearUserSession, + authenticateUser, + validateEmail, + validatePassword, + UserSession +} from '@/utils/auth'; -interface User { - id: string; - email: string; - name: string; -} +export const useAuth = () => { + const [isLoggedIn, setIsLoggedIn] = useState(false); + const [userSession, setUserSession] = useState(null); + const [isLoading, setIsLoading] = useState(true); -interface UserSession { - token: string; - user: User; - expiresAt: string; -} - -export function useAuth() { - const [user, setUser] = useState(null); - const [token, setToken] = useState(null); - const [isLoading, setIsLoading] = useState(true); - const [isAuthenticated, setIsAuthenticated] = useState(false); - - // Initialize auth state from localStorage + // Check login status on mount useEffect(() => { - const storedSession = localStorage.getItem("userSession"); - if (storedSession) { - try { - const session: UserSession = JSON.parse(storedSession); - - // Check if session has expired - if (new Date(session.expiresAt) > new Date()) { - setUser(session.user); - setToken(session.token); - setIsAuthenticated(true); - } else { - // Session expired, clear it - localStorage.removeItem("userSession"); - setIsAuthenticated(false); - } - } catch (error) { - console.error("Failed to parse session:", error); - localStorage.removeItem("userSession"); - setIsAuthenticated(false); - } - } + const loggedIn = isUserLoggedIn(); + const session = getUserSession(); + setIsLoggedIn(loggedIn); + setUserSession(session); setIsLoading(false); }, []); - const login = useCallback((sessionData: UserSession) => { - setUser(sessionData.user); - setToken(sessionData.token); - setIsAuthenticated(true); - localStorage.setItem("userSession", JSON.stringify(sessionData)); - }, []); - - const logout = useCallback(async () => { + const login = useCallback(async (email: string, password: string) => { + setIsLoading(true); try { - await fetch("/api/auth/logout", { method: "POST" }); - } catch (error) { - console.error("Logout error:", error); - } finally { - setUser(null); - setToken(null); - setIsAuthenticated(false); - localStorage.removeItem("userSession"); - window.location.href = "/"; - } - }, []); - - const verifySession = useCallback(async (): Promise => { - if (!token) return false; - - try { - const response = await fetch("/api/auth/verify-session", { - headers: { - Authorization: `Bearer ${token}`, - }, - }); - return response.ok; - } catch (error) { - console.error("Session verification error:", error); - return false; - } - }, [token]); - - const updateUser = useCallback((updatedUser: Partial) => { - setUser((prev) => (prev ? { ...prev, ...updatedUser } : null)); - - const storedSession = localStorage.getItem("userSession"); - if (storedSession) { - try { - const session: UserSession = JSON.parse(storedSession); - session.user = { ...session.user, ...updatedUser }; - localStorage.setItem("userSession", JSON.stringify(session)); - } catch (error) { - console.error("Failed to update session:", error); + const result = await authenticateUser(email, password); + if (result.success) { + setIsLoggedIn(true); + setUserSession(getUserSession()); } + setIsLoading(false); + return result; + } catch (error) { + setIsLoading(false); + return { success: false, message: 'Erro ao fazer login' }; } }, []); + const logout = useCallback(() => { + clearUserSession(); + setIsLoggedIn(false); + setUserSession(null); + }, []); + return { - user, - token, + isLoggedIn, + userSession, isLoading, - isAuthenticated, login, logout, - verifySession, - updateUser, + validateEmail, + validatePassword }; -} +};