import { create } from "zustand"; import { persist } from "zustand/middleware"; /** * [사용자 정보 타입] */ export interface User { id: string; email: string; name?: string; avatar?: string; createdAt?: string; } /** * [인증 상태 인터페이스] */ interface AuthState { // ========== 상태 ========== user: User | null; isAuthenticated: boolean; // ========== 액션 ========== setUser: (user: User | null) => void; updateUser: (updates: Partial) => void; logout: () => void; } /** * [인증 스토어] * * 전역 사용자 인증 상태를 관리합니다. * - localStorage에 자동 저장 (persist 미들웨어) * - 페이지 새로고침 시에도 상태 유지 * * @example * ```tsx * import { useAuthStore } from '@/stores/auth-store'; * * function Profile() { * const { user, isAuthenticated, setUser } = useAuthStore(); * * if (!isAuthenticated) return ; * return
Welcome, {user?.email}
; * } * ``` */ export const useAuthStore = create()( persist( (set) => ({ // ========== 초기 상태 ========== user: null, isAuthenticated: false, // ========== 사용자 설정 ========== setUser: (user) => set({ user, isAuthenticated: !!user, }), // ========== 사용자 정보 업데이트 ========== updateUser: (updates) => set((state) => ({ user: state.user ? { ...state.user, ...updates } : null, })), // ========== 로그아웃 ========== logout: () => set({ user: null, isAuthenticated: false, }), }), { name: "auth-storage", // localStorage 키 이름 }, ), );