10da34380f
- Si KAPPA no devuelve first_name/last_name, usa 'Ricardo Gonzalez' - user se persiste en localStorage (kappa_user) y sobrevive refrescos
53 lines
1.5 KiB
TypeScript
53 lines
1.5 KiB
TypeScript
import { defineStore } from 'pinia'
|
|
import { ref, computed } from 'vue'
|
|
import { kappa } from '@/services/kappa-api'
|
|
import type { KappaLoginPayload } from '@/types/kappa'
|
|
|
|
function loadUser(): { name: string; email: string } | null {
|
|
const raw = localStorage.getItem('kappa_user')
|
|
return raw ? JSON.parse(raw) : null
|
|
}
|
|
|
|
function saveUser(user: { name: string; email: string }) {
|
|
localStorage.setItem('kappa_user', JSON.stringify(user))
|
|
}
|
|
|
|
export const useAuthStore = defineStore('auth', () => {
|
|
const token = ref<string | null>(localStorage.getItem('kappa_token'))
|
|
const user = ref<{ name: string; email: string } | null>(loadUser())
|
|
const loading = ref(false)
|
|
const error = ref<string | null>(null)
|
|
|
|
const isAuthenticated = computed(() => !!token.value)
|
|
|
|
async function login(payload: KappaLoginPayload) {
|
|
loading.value = true
|
|
error.value = null
|
|
try {
|
|
const data = await kappa.login(payload)
|
|
token.value = kappa['token']
|
|
const name = `${data.user?.first_name || ''} ${data.user?.last_name || ''}`.trim()
|
|
user.value = {
|
|
name: name || 'Ricardo Gonzalez',
|
|
email: payload.email,
|
|
}
|
|
saveUser(user.value)
|
|
return true
|
|
} catch (e: any) {
|
|
error.value = e.message
|
|
return false
|
|
} finally {
|
|
loading.value = false
|
|
}
|
|
}
|
|
|
|
function logout() {
|
|
kappa.logout()
|
|
token.value = null
|
|
user.value = null
|
|
localStorage.removeItem('kappa_user')
|
|
}
|
|
|
|
return { token, user, loading, error, isAuthenticated, login, logout }
|
|
})
|