Merge remote-tracking branch 'origin/develop' into feature/profile-page

This commit is contained in:
AfonsoCMSousa
2025-12-23 17:35:49 +00:00
13 changed files with 841 additions and 681 deletions
+7 -15
View File
@@ -1,4 +1,3 @@
// src/stores/api.js
import { defineStore } from 'pinia'
import axios from 'axios'
import { inject, ref } from 'vue'
@@ -17,15 +16,16 @@ export const useAPIStore = defineStore('api', () => {
},
})
// AUTH
const postLogin = async (credentials) => {
const response = await axios.post(`${API_BASE_URL}/login`, credentials)
token.value = response.data.token
axios.defaults.headers.common['Authorization'] = `Bearer ${token.value}`
const response = await axios.post(`${API_BASE_URL}/login`, credentials)
return response
}
if (!response.data.token) throw response
token.value = response.data.token
axios.defaults.headers.common['Authorization'] = `Bearer ${token.value}`
return response
}
const postLogout = async () => {
await axios.post(`${API_BASE_URL}/logout`)
token.value = undefined
@@ -57,19 +57,11 @@ export const useAPIStore = defineStore('api', () => {
return axios.get(`${API_BASE_URL}/games?${queryParams}`)
}
const initToken = (storedToken) => {
if (storedToken) {
token.value = storedToken
axios.defaults.headers.common['Authorization'] = `Bearer ${storedToken}`
}
}
return {
postLogin,
postLogout,
getAuthUser,
getGames,
gameQueryParameters,
initToken,
}
})
+8 -52
View File
@@ -1,8 +1,6 @@
// src/stores/auth.js
import { defineStore } from 'pinia'
import { ref, computed } from 'vue'
import { useAPIStore } from './api'
import axios from 'axios'
export const useAuthStore = defineStore('auth', () => {
const apiStore = useAPIStore()
@@ -22,10 +20,8 @@ export const useAuthStore = defineStore('auth', () => {
token.value = jwtToken
if (jwtToken) {
localStorage.setItem('token', jwtToken)
axios.defaults.headers.common['Authorization'] = `Bearer ${jwtToken}`
} else {
localStorage.removeItem('token')
delete axios.defaults.headers.common['Authorization']
}
}
@@ -34,57 +30,18 @@ export const useAuthStore = defineStore('auth', () => {
}
const login = async (credentials) => {
try {
// postLogin already sets the token and axios headers, and returns the response
const loginResponse = await apiStore.postLogin(credentials)
// Extract the token from the response
const jwtToken = loginResponse.data.token
// Store token in auth store (for localStorage)
const loginResp = await apiStore.postLogin(credentials)
const userResp = await apiStore.getAuthUser()
const jwtToken = loginResp.data.token
setToken(jwtToken)
// Use the user data from login response (it's already there!)
currentUser.value = loginResponse.data.user
return currentUser.value
} catch (error) {
// Clear everything on login failure
setToken(null)
currentUser.value = undefined
throw error
}
currentUser.value = userResp.data
return userResp.data
}
const logout = async () => {
try {
await apiStore.postLogout()
} catch (error) {
console.error('Logout API call failed:', error)
} finally {
currentUser.value = undefined
setToken(null)
}
}
// Initialize auth from localStorage on app start
const initAuth = async () => {
if (token.value) {
axios.defaults.headers.common['Authorization'] = `Bearer ${token.value}`
apiStore.initToken(token.value)
// Try to fetch current user if we don't have it
if (!currentUser.value) {
try {
const userResponse = await apiStore.getAuthUser()
currentUser.value = userResponse.data
} catch (error) {
console.error('Failed to restore user session:', error)
// Clear invalid token
setToken(null)
}
}
}
await apiStore.postLogout()
currentUser.value = undefined
setToken(null)
}
return {
@@ -96,6 +53,5 @@ export const useAuthStore = defineStore('auth', () => {
getToken,
login,
logout,
initAuth,
}
})
+11 -6
View File
@@ -5,15 +5,20 @@ export const useSocketStore = defineStore('socket', () => {
const socket = inject('socket')
const handleConnection = () => {
socket.on('connect', () => {
console.log(`[Socket] Connected -- ${socket.id}`)
})
socket.on('disconnect', () => {
console.log(`[Socket] Disconnected -- ${socket.id}`)
})
try {
socket.on('connect', () => {
console.log(`[Socket] Connected -- ${socket.id}`)
})
socket.on('disconnect', () => {
console.log(`[Socket] Disconnected -- ${socket.id}`)
})
} catch (error) {
console.error('[Socket] Connection error:', error)
}
}
return {
handleConnection,
}
})