export const useUserStore = defineStore("user", () => { // 상태 const isLoggedIn = ref(false); const user = ref<{ id?: string; userId?: string; email?: string; name?: string; role?: string; } | null>(null); const token = ref(null); interface LoginData { userId: string role: string lastLoginAt: string } // 게터 const isAdmin = computed(() => user.value?.role === "admin"); const userName = computed(() => user.value?.name || "사용자"); // 액션 const login = async (userId: string, password: string) => { try { // 실제 API 호출로 대체할 수 있습니다 const {data, error: _error } = await useApi>('/login', { method: 'post', body: { userId, password } }) let mockUser; if(data && data.value && data.value.success){ mockUser = data.value.data; }else{ throw new Error("아이디 또는 비밀번호가 올바르지 않습니다."); } user.value = mockUser; token.value = "mock-token-" + Date.now(); isLoggedIn.value = true; // 로컬 스토리지에 저장 localStorage.setItem("user", JSON.stringify(mockUser)); localStorage.setItem("token", token.value); return { success: true, user: mockUser }; } catch (error) { console.error("로그인 실패:", error); return { success: false, error: error instanceof Error ? error.message : "로그인에 실패했습니다.", }; } }; const logout = () => { user.value = null; token.value = null; isLoggedIn.value = false; // 로컬 스토리지에서 제거 localStorage.removeItem("user"); localStorage.removeItem("token"); }; const checkAuth = () => { // 페이지 로드 시 로컬 스토리지에서 사용자 정보 복원 const savedUser = localStorage.getItem("user"); const savedToken = localStorage.getItem("token"); if (savedUser && savedToken) { user.value = JSON.parse(savedUser); token.value = savedToken; isLoggedIn.value = true; } }; // 초기 인증 상태 확인 if (import.meta.client) { checkAuth(); } return { // 상태 isLoggedIn, user, token, // 게터 isAdmin, userName, // 액션 login, logout, checkAuth, }; });