refactor: provider 레이어 변경 & 누락된 public api 수정

This commit is contained in:
2025-03-17 18:28:17 +09:00
parent 0b9b5bd22c
commit 4ed2a45486
32 changed files with 49 additions and 136 deletions
+1
View File
@@ -0,0 +1 @@
export { client } from "./client";
+2
View File
@@ -0,0 +1,2 @@
export * from "./api";
export * from "./env";
@@ -1,7 +1,7 @@
"use client";
import { createContext, useContext } from "react";
import { getCookie, setCookie, removeCookie } from "../lib/cookie";
import { createContext } from "react";
import { getCookie, setCookie, removeCookie } from "./cookie";
export interface CookieContextType {
getCookie: (name: string) => string | undefined;
@@ -28,11 +28,3 @@ export function CookieProvider({ children }: { children: React.ReactNode }) {
</CookieContext.Provider>
);
}
export function useCookie(): CookieContextType {
const context = useContext(CookieContext);
if (!context) {
throw new Error("useCookie must be used within a CookieProvider");
}
return context;
}
+2
View File
@@ -0,0 +1,2 @@
export { CookieProvider } from "./cookie-provider";
export { getCookie, setCookie, removeCookie } from "./cookie";
@@ -1,20 +0,0 @@
"use client";
import { ConfirmProvider } from "@frontend-opensource/use-react-hooks";
import { AuthProvider } from "./auth-provider";
import { CookieProvider } from "./cookie-provider";
import { QueryProvider } from "./query-provider";
const AppProvider = ({ children }: Readonly<{ children: React.ReactNode }>) => {
return (
<QueryProvider>
<CookieProvider>
<AuthProvider>
<ConfirmProvider>{children}</ConfirmProvider>
</AuthProvider>
</CookieProvider>
</QueryProvider>
);
};
export { AppProvider };
@@ -1,101 +0,0 @@
"use client";
import { useRouter } from "next/navigation";
import { useQuery } from "@tanstack/react-query";
import { createContext, useContext, useState } from "react";
import { client } from "../api/client";
import { ENDPOINT } from "../config/api";
import { AUTH_USER_ID } from "../config/env";
import { getCookie } from "../lib/cookie";
import { LoginApi } from "@/entities/auth/login";
interface IUserInfo {
regDt: string;
mdfcnDt: string;
rgtr: string;
mdfr: string;
userUnqId: string;
userId: string;
userName: string;
email: string;
encryptedPassword: string;
refreshToken: string;
userStateCode: string;
lastLoginDate: string;
loginFailCount: number;
pswdHnt: string;
pswdAns: string;
mphn: string;
telno: string;
zip: string;
addr: string;
daddr: string;
laeSeCd: string;
ogdpSeCd: string;
aprvYn: string;
autzrId: string;
expryYmd: string;
lastPswdChgDt: string;
googleId: string;
kakaoId: string;
naverId: string;
isSocialUser: boolean;
hasPassword: boolean;
}
export interface AuthContextType {
userInfo: IUserInfo | null;
}
export const AuthContext = createContext<AuthContextType | null>(null);
export const AuthProvider = ({ children }: { children: React.ReactNode }) => {
const router = useRouter();
const [userInfo, setUserInfo] = useState<IUserInfo | null>(null);
useQuery({
queryKey: [ENDPOINT.USER_SERVICE.USERS],
queryFn: async () => {
try {
const userId = getCookie(AUTH_USER_ID);
if (!userId) {
throw new Error("Missing required authentication tokens");
}
const response = await client.get<IUserInfo>(
`${ENDPOINT.USER_SERVICE.USERS}/${userId}`,
);
setUserInfo(response.data);
return response;
} catch (error) {
console.error(error);
try {
await LoginApi.silentRefresh();
} catch (refreshError) {
console.error("Token refresh failed:", refreshError);
setUserInfo(null);
router.push("/auth/login");
}
}
},
});
const authContextValue: AuthContextType = {
userInfo,
};
return (
<AuthContext.Provider value={authContextValue}>
{children}
</AuthContext.Provider>
);
};
export const useAuth = (): AuthContextType => {
const context = useContext(AuthContext);
if (!context) {
throw new Error("useAuth must be used within an AuthProvider");
}
return context;
};
-3
View File
@@ -1,3 +0,0 @@
export { AppProvider } from "./app-provider";
export { useAuth } from "./auth-provider";
export { useCookie } from "./cookie-provider";
@@ -1,9 +0,0 @@
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
const queryClient = new QueryClient();
export const QueryProvider = ({ children }: { children: React.ReactNode }) => {
return (
<QueryClientProvider client={queryClient}>{children}</QueryClientProvider>
);
};