88 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import { useTabsStore } from "./tab";
 | 
						|
 | 
						|
export const useUserStore = defineStore(
 | 
						|
  "user",
 | 
						|
  () => {
 | 
						|
    // 상태
 | 
						|
    const isLoggedIn = ref(false);
 | 
						|
    const user = ref<{
 | 
						|
      userId?: string;
 | 
						|
      name?: string;
 | 
						|
    } | null>(null);
 | 
						|
    const token = ref<string | null>(null);
 | 
						|
 | 
						|
    // 권한 스토어 참조
 | 
						|
    const permissionsStore = usePermissionsStore();
 | 
						|
    // 탭 스토어 참조
 | 
						|
    const tabsStore = useTabsStore();
 | 
						|
 | 
						|
    interface LoginData {
 | 
						|
      userId: string;
 | 
						|
      name: string;
 | 
						|
    }
 | 
						|
 | 
						|
    const login = async (userId: string, password: string) => {
 | 
						|
      const { success, data, description } = await useApi<
 | 
						|
        ApiResponse<LoginData>
 | 
						|
      >("/login", {
 | 
						|
        method: "post",
 | 
						|
        body: { userId, password },
 | 
						|
      });
 | 
						|
 | 
						|
      if (success) {
 | 
						|
        user.value = data;
 | 
						|
        isLoggedIn.value = true;
 | 
						|
 | 
						|
        // 로그인 성공 시
 | 
						|
        // 탭 초기화
 | 
						|
        tabsStore.resetTabs();
 | 
						|
        // 권한 데이터 가져오기
 | 
						|
        await permissionsStore.fetchPermissions();
 | 
						|
 | 
						|
        return { success, data };
 | 
						|
      } else {
 | 
						|
        return {
 | 
						|
          success: false,
 | 
						|
          error: description,
 | 
						|
        };
 | 
						|
      }
 | 
						|
    };
 | 
						|
 | 
						|
    const logout = () => {
 | 
						|
      user.value = null;
 | 
						|
      isLoggedIn.value = false;
 | 
						|
 | 
						|
      // 권한 데이터 초기화
 | 
						|
      permissionsStore.clearPermissions();
 | 
						|
      // 탭 초기화
 | 
						|
      tabsStore.resetTabs();
 | 
						|
 | 
						|
      useApi("/members/logout", { method: "post" });
 | 
						|
    };
 | 
						|
 | 
						|
    const setToken = (accessToken: string) => {
 | 
						|
      token.value = accessToken;
 | 
						|
    };
 | 
						|
 | 
						|
    const getToken = () => {
 | 
						|
      return token;
 | 
						|
    };
 | 
						|
 | 
						|
    return {
 | 
						|
      // 상태
 | 
						|
      isLoggedIn,
 | 
						|
      user,
 | 
						|
      token,
 | 
						|
 | 
						|
      // 액션
 | 
						|
      login,
 | 
						|
      logout,
 | 
						|
      setToken,
 | 
						|
      getToken,
 | 
						|
    };
 | 
						|
  },
 | 
						|
  {
 | 
						|
    persist: true,
 | 
						|
  }
 | 
						|
);
 |