Files
DADProject/frontend/src/stores/api.js
T
2025-12-23 20:03:59 +00:00

89 lines
2.2 KiB
JavaScript

import { defineStore } from 'pinia'
import axios from 'axios'
import { inject, ref } from 'vue'
import { useAuthStore } from './auth'
export const useAPIStore = defineStore('api', () => {
const API_BASE_URL = inject('apiBaseURL')
const authStore = useAuthStore()
const token = ref()
const gameQueryParameters = ref({
page: 1,
filters: {
type: '',
status: '',
sort_by: 'began_at',
sort_direction: 'desc',
},
})
const resetExpiryOnSuccess = (response) => {
if (authStore.isLoggedIn && !authStore.isTokenAlmostExpired()) {
authStore.resetTokenExpiry()
}
return response
}
axios.interceptors.response.use(resetExpiryOnSuccess)
const initializeAxiosHeaders = () => {
const storedToken = localStorage.getItem('token')
if (storedToken) {
axios.defaults.headers.common['Authorization'] = `Bearer ${storedToken}`
}
}
initializeAxiosHeaders()
const postLogin = async (credentials) => {
const response = await axios.post(`${API_BASE_URL}/login`, credentials)
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
delete axios.defaults.headers.common['Authorization']
}
// Users
const getAuthUser = () => {
return axios.get(`${API_BASE_URL}/users/me`)
}
//Games
const getGames = (resetPagination = false) => {
if (resetPagination) {
gameQueryParameters.value.page = 1
}
const queryParams = new URLSearchParams({
page: gameQueryParameters.value.page,
...(gameQueryParameters.value.filters.type && {
type: gameQueryParameters.value.filters.type,
}),
...(gameQueryParameters.value.filters.status && {
status: gameQueryParameters.value.filters.status,
}),
sort_by: gameQueryParameters.value.filters.sort_by,
sort_direction: gameQueryParameters.value.filters.sort_direction,
}).toString()
return axios.get(`${API_BASE_URL}/games?${queryParams}`)
}
return {
postLogin,
postLogout,
getAuthUser,
getGames,
gameQueryParameters,
}
})