diff --git a/marketplace/src/pages/Login.tsx b/marketplace/src/pages/Login.tsx index 68c7ebc..eb32385 100644 --- a/marketplace/src/pages/Login.tsx +++ b/marketplace/src/pages/Login.tsx @@ -2,6 +2,7 @@ import { FormEvent, useState } from 'react' import axios from 'axios' import { useAuth, UserRole } from '../context/AuthContext' import { authService } from '../services/auth' +import { logger } from '../utils/logger' import { decodeJwtPayload } from '../utils/jwt' // Eye icon components for password visibility toggle @@ -27,7 +28,7 @@ export function LoginPage() { const [loading, setLoading] = useState(false) const resolveRole = (role?: string): UserRole => { - console.log('πŸ” [Login] Resolving role:', role) + logger.info('πŸ” [Login] Resolving role:', role) switch (role?.toLowerCase()) { case 'admin': return 'admin' @@ -42,7 +43,7 @@ export function LoginPage() { case 'seller': // keep legacy default: // Default to seller/owner or log warning? - console.warn('⚠️ [Login] Unknown role, defaulting to seller:', role) + logger.warn('⚠️ [Login] Unknown role, defaulting to seller:', role) return 'seller' } } @@ -52,37 +53,37 @@ export function LoginPage() { setLoading(true) setErrorMessage(null) - console.log('πŸ” [Login] Attempting login with username:', username) + logger.info('πŸ” [Login] Attempting login with username:', username) try { - console.log('πŸ” [Login] Calling authService.login...') + logger.info('πŸ” [Login] Calling authService.login...') const response = await authService.login({ username, password }) - console.log('πŸ” [Login] Response received:', response) + logger.info('πŸ” [Login] Response received:', response) const { token } = response - console.log('πŸ” [Login] Token extracted:', token ? `${token.substring(0, 50)}...` : 'NULL/UNDEFINED') + logger.debug('πŸ” [Login] Token extracted:', token ? `${token.substring(0, 50)}...` : 'NULL/UNDEFINED') if (!token) { - console.error('πŸ” [Login] ERROR: Token is null or undefined!') + logger.error('πŸ” [Login] ERROR: Token is null or undefined!') throw new Error('Resposta de login invΓ‘lida. Verifique o usuΓ‘rio e a senha.') } const payload = decodeJwtPayload<{ role?: string, sub: string }>(token) - console.log('πŸ” [Login] JWT payload decoded:', payload) + logger.debug('πŸ” [Login] JWT payload decoded:', payload) const role = resolveRole(payload?.role) - console.log('πŸ” [Login] Role resolved:', role) + logger.info('πŸ” [Login] Role resolved:', role) login(token, role, username, payload?.sub || '', undefined, username) - console.log('πŸ” [Login] Login successful!') + logger.info('πŸ” [Login] Login successful!') } catch (error) { - console.error('πŸ” [Login] ERROR caught:', error) + logger.error('πŸ” [Login] ERROR caught:', error) const fallback = 'NΓ£o foi possΓ­vel autenticar. Verifique suas credenciais.' if (axios.isAxiosError(error)) { - console.error('πŸ” [Login] Axios error response:', error.response?.data) + logger.error('πŸ” [Login] Axios error response:', error.response?.data) setErrorMessage(error.response?.data?.error ?? fallback) } else if (error instanceof Error) { - console.error('πŸ” [Login] Error message:', error.message) + logger.error('πŸ” [Login] Error message:', error.message) setErrorMessage(error.message) } else { setErrorMessage(fallback) diff --git a/marketplace/src/services/apiClient.ts b/marketplace/src/services/apiClient.ts index 9ae7740..e4252fa 100644 --- a/marketplace/src/services/apiClient.ts +++ b/marketplace/src/services/apiClient.ts @@ -1,8 +1,9 @@ import axios from 'axios' +import { logger } from '../utils/logger' // Use VITE_API_URL if set, fallback to /api for local development proxy const apiBaseUrl = import.meta.env.VITE_API_URL || '/api' -console.log('πŸ”— [apiClient] Using API base URL:', apiBaseUrl) +logger.info('πŸ”— [apiClient] Using API base URL:', apiBaseUrl) const instance = axios.create({ baseURL: apiBaseUrl, @@ -22,7 +23,7 @@ instance.interceptors.response.use( (response) => response, (error) => { if (error.response?.status === 401) { - console.warn('SessΓ£o expirada, por favor, faΓ§a login novamente.') + logger.warn('SessΓ£o expirada, por favor, faΓ§a login novamente.') } return Promise.reject(error) } diff --git a/marketplace/src/services/auth.ts b/marketplace/src/services/auth.ts index 64ef695..17d6cdb 100644 --- a/marketplace/src/services/auth.ts +++ b/marketplace/src/services/auth.ts @@ -1,4 +1,5 @@ import { apiClient } from './apiClient' +import { logger } from '../utils/logger' interface AuthResponse { token: string @@ -12,13 +13,12 @@ export interface AuthLoginPayload { export const authService = { login: async (payload: AuthLoginPayload) => { - console.log('πŸ” [authService] Making request to /v1/auth/login with:', payload) + logger.info('πŸ” [authService] Making request to /v1/auth/login with:', payload) const data = await apiClient.post('/v1/auth/login', payload) - console.log('πŸ” [authService] Response data:', data) + logger.info('πŸ” [authService] Response data:', data) return { token: data.token, expiresAt: data.expires_at } }, logout: async () => { await apiClient.post('/v1/auth/logout') } } - diff --git a/marketplace/src/utils/logger.ts b/marketplace/src/utils/logger.ts new file mode 100644 index 0000000..d147ce0 --- /dev/null +++ b/marketplace/src/utils/logger.ts @@ -0,0 +1,26 @@ +const shouldLog = import.meta.env.DEV || import.meta.env.VITE_ENABLE_LOGS === 'true' + +type LogArgs = Parameters + +export const logger = { + debug: (...args: LogArgs) => { + if (shouldLog) { + console.debug(...args) + } + }, + info: (...args: LogArgs) => { + if (shouldLog) { + console.info(...args) + } + }, + warn: (...args: LogArgs) => { + if (shouldLog) { + console.warn(...args) + } + }, + error: (...args: LogArgs) => { + if (shouldLog) { + console.error(...args) + } + } +}