@@ -149,6 +149,17 @@ Presenter ์ฌ์ฉ ํจํด:
1491495 . ๋ชจ๋ ์๋ํฌ์ธํธ ํจ์๋ getLocalServerApis ๋ฐํ ๊ฐ์ฒด์ ์ถ๊ฐํ๋ฉฐ,
150150 satisfies Record<string, Api> ์ ์ฝ์ ํต๊ณผํด์ผ ํ๋ค.
151151
152+ #### ํ์ฌ ๋ฑ๋ก๋ ์๋ํฌ์ธํธ (๋ณ๊ฒฝ ์ ์ด ๋ฌธ์๋ ์
๋ฐ์ดํธ)
153+ POST /api/auth/email โ ์ด๋ฉ์ผ ์ธ์ฆ ์ฝ๋ ๋ฐ์ก (body: EmailRequest)
154+ POST /api/auth/email/verify โ ์ด๋ฉ์ผ ์ธ์ฆ ์ฝ๋ ์ฌ๋ฐ์ก (body: EmailRequest)
155+ POST /api/auth/email/validate โ ์ด๋ฉ์ผ ์ธ์ฆ ์ฝ๋ ๊ฒ์ฆ (body: EmailValidateRequest) โ VerificationTokenResponse
156+ POST /api/auth/user โ ํ์๊ฐ์
(body: SignUpRequest) โ UserWithAccessTokenResponse
157+ POST /api/auth/user/session โ ๋ก๊ทธ์ธ (body: SignInRequest) โ UserWithAccessTokenResponse
158+ GET /api/auth/token โ ์ก์ธ์ค ํ ํฐ ์ฌ๋ฐ๊ธ โ TokenResponse
159+ DELETE /api/auth/user/session โ ๋ก๊ทธ์์ (token ํ์)
160+ GET /api/store โ ์คํ ์ด ๋ชฉ๋ก (query?: { category?, name?, page?, size? }) โ StoreListWithEventsResponse
161+ GET /api/store/: storeId /events โ ์คํ ์ด ์ด๋ฒคํธ ๋ชฉ๋ก (query: { storeId }) โ StoreEventListResponse
162+
152163#### encodeQueryParams ๋์
153164ํ์ผ: src/infrastructure/api/apis/local-server/encode-query-params.ts
154165 - undefined / null ๊ฐ์ ์๋์ผ๋ก ์ ์ธ๋๋ค.
@@ -170,29 +181,34 @@ Presenter ์ฌ์ฉ ํจํด:
170181ํ์ผ ๊ฒฝ๋ก: src/feature/shared/context/
171182
172183๊ตฌ์กฐ:
173- - query-context.ts : { authQuery, ... } โ application ํ
๋ฌถ์
174- - usecase-context.ts : { authUsecase, ... } โ usecase ์ธ์คํด์ค
184+ - query-context.ts : { authQuery, storeQuery } โ application ํ
๋ฌถ์
185+ - usecase-context.ts : { authUsecase } โ usecase ์ธ์คํด์ค
175186 - token-context.ts : { token } โ ํ์ฌ ์ธ์ฆ ํ ํฐ
187+ - review-context.ts : { storeId, eventId, setStore, setEvent } โ ๋ฆฌ๋ทฐ ์์ฑ ํ๋ฆ์ ์ ํ ์ํ
176188 - use-gaurd-context.ts : useGuardContext<T > โ null-safe ์ปจํ
์คํธ ์ ๊ทผ ํ
177189
178- DI ์กฐ๋ฆฝ ์์น: src/App.tsx ( AppContent ์ปดํฌ๋ํธ)
190+ ํ์ฌ DI ์กฐ๋ฆฝ ( src/App.tsx AppContent):
179191 const api = implApi({ externalCall });
180192 const tokenRepository = implTokenRepository({ setToken });
181193 const authUsecase = implAuthUsecase({ api, tokenRepository });
182194 const authQuery = useAuthQuery({ authUsecase });
195+ const storeUsecase = implStoreUsecase({ api });
196+ const storeQuery = useStoreQuery({ storeUsecase });
183197
184198 return (
185- <QueryContext.Provider value={{ authQuery }}>
199+ <QueryContext.Provider value={{ authQuery, storeQuery }}>
186200 <TokenContext.Provider value={{ token }}>
187201 <UsecaseContext.Provider value={{ authUsecase }}>
188- ...
202+ <ReviewContext.Provider value={{ storeId, eventId, setStore, setEvent }}>
203+ <RouterProvider />
204+ </ReviewContext.Provider>
189205 </UsecaseContext.Provider>
190206 </TokenContext.Provider>
191207 </QueryContext.Provider>
192208 );
193209
194210๊ท์น:
195- - ์ ๋๋ฉ์ธ์ usecase/query๋ฅผ ์ถ๊ฐํ๋ฉด App.tsx์ Provider์ ๊ฐ์ ์ถ๊ฐํ๋ค .
211+ - ์ ๋๋ฉ์ธ์ usecase/query๋ฅผ ์ถ๊ฐํ๋ฉด App.tsx์ Provider์ ๊ฐ์ ์ถ๊ฐํ๊ณ ์ด ๋ฌธ์๋ ์
๋ฐ์ดํธํ๋ค .
196212 - widget์์ Context์ ์ง์ ์ ๊ทผํ ๋๋ ํญ์ useGuardContext๋ฅผ ์ฌ์ฉํ๋ค.
197213
198214---
@@ -201,13 +217,12 @@ DI ์กฐ๋ฆฝ ์์น: src/App.tsx (AppContent ์ปดํฌ๋ํธ)
201217ํ์ผ ๊ฒฝ๋ก: src/feature/shared/routes/path.ts
202218์ญํ : ์ฑ ๋ด ๋ชจ๋ URL ๊ฒฝ๋ก๋ฅผ ์์๋ก ์ ์ํ๋ค. ๋ฌธ์์ด ๋ฆฌํฐ๋ด์ ์ฝ๋ ๊ณณ๊ณณ์ ์ง์ ์ฐ์ง ์๋๋ค.
203219
204- ํจํด:
205- export const PATH = {
206- LANDING: '/',
207- SIGN_IN: '/sign-in',
208- MY_PAGE: '/my-page',
209- // ์ ํ์ด์ง ์ถ๊ฐ ์ ์ฌ๊ธฐ์ ํญ๋ชฉ ์ถ๊ฐ
210- };
220+ ํ์ฌ ๋ฑ๋ก๋ PATH (๋ณ๊ฒฝ ์ ์ด ๋ฌธ์๋ ์
๋ฐ์ดํธ):
221+ LANDING : '/'
222+ SIGN_IN : '/sign-in'
223+ SIGN_UP : '/sign-up'
224+ SIGN_UP_COMPLETE : '/sign-up-complete'
225+ SUBMIT : '/submit'
211226
212227๊ท์น:
213228 - ์ ํ์ด์ง๋ฅผ ๋ง๋ค๋ฉด PATH์ ํญ๋ชฉ์ ๋จผ์ ์ถ๊ฐํ๋ค.
@@ -221,18 +236,14 @@ DI ์กฐ๋ฆฝ ์์น: src/App.tsx (AppContent ์ปดํฌ๋ํธ)
221236 - react-router์ useNavigate๋ฅผ ๋ํํ์ฌ ์ด๋ฆ ์๋ ๋ด๋น๊ฒ์ด์
ํจ์๋ฅผ ์ ๊ณตํ๋ค.
222237 - ์ปดํฌ๋ํธ์ application ๋ ์ด์ด ๋ชจ๋์์ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
223238
224- ํจํด:
225- export const useRouteNavigation = () => {
226- const navigate = useNavigate();
227-
228- return {
229- toMain: () => { void navigate(PATH.LANDING); },
230- toSignIn: () => { void navigate(PATH.SIGN_IN); },
231- toMyPage: () => { void navigate(PATH.MY_PAGE); },
232- toBack: () => { void navigate(-1); },
233- refreshPage: () => { void navigate(0); },
234- };
235- };
239+ ํ์ฌ ๋ฑ๋ก๋ ํจ์ (๋ณ๊ฒฝ ์ ์ด ๋ฌธ์๋ ์
๋ฐ์ดํธ):
240+ toMain โ PATH.LANDING
241+ toSignIn โ PATH.SIGN_IN
242+ toSignUp โ PATH.SIGN_UP
243+ toSignUpComplete โ PATH.SIGN_UP_COMPLETE
244+ toSubmit โ PATH.SUBMIT
245+ toBack โ navigate(-1)
246+ refreshPage โ navigate(0)
236247
237248์ฌ์ฉ ์์น:
238249 - widget: ๋ฒํผ ํด๋ฆญ ๋ฑ UI ์ด๋ฒคํธ์์ ์ง์ ํธ์ถ
@@ -258,24 +269,19 @@ DI ์กฐ๋ฆฝ ์์น: src/App.tsx (AppContent ์ปดํฌ๋ํธ)
258269 - ๋ชจ๋ ํ์ด์ง ์ปดํฌ๋ํธ๋ฅผ PATH ์์์ ์ฐ๊ฒฐํ์ฌ ๋ผ์ฐํธ๋ฅผ ๋ฑ๋กํ๋ค.
259270 - ๊ณตํต ๋ ์ด์์(GNB ๋ฑ)๊ณผ ์ธ์ฆ ๊ฐ๋๋ฅผ ์ค์ฒฉ ๋ผ์ฐํธ๋ก ์กฐํฉํ๋ค.
260271
261- ํ์ฌ ๊ตฌ์กฐ :
272+ ํ์ฌ ๋ฑ๋ก๋ ๋ผ์ฐํธ (๋ณ๊ฒฝ ์ ์ด ๋ฌธ์๋ ์
๋ฐ์ดํธ) :
262273 <Routes >
263274 {/* ์ธ์ฆ ๋ถํ์ */}
264275 <Route path={PATH.SIGN_IN} element={<SignInPage />} />
265276 <Route path={PATH.SIGN_UP} element={<SignUpPage />} />
266277
267- {/* ํ ํฐ ์ฌ๋ฐ๊ธ ์๋ ํ ์ง์
(ReissueToken: ๋ง์ดํธ ์ ํ ํฐ ์์ผ๋ฉด reissue ์๋) */}
278+ {/* ํ ํฐ ์ฌ๋ฐ๊ธ ์๋ ํ ์ง์
*/}
268279 <Route element={<ReissueToken />}>
269280 <Route path={PATH.LANDING} element={<LandingPage />} />
270281
271282 {/* ๋ก๊ทธ์ธ ํ์ */}
272283 <Route element={<ProtectedRoute role="SIGN_IN" />}>
273- <Route path={PATH.MY_PAGE} element={<MyPage />} />
274- </Route>
275-
276- {/* ํน์ ์ญํ ํ์ (์: OWNER๋ง ์ ๊ทผ) */}
277- <Route element={<ProtectedRoute role="OWNER" />}>
278- <Route path={PATH.OWNER_ONLY} element={<OwnerPage />} />
284+ <Route path="/test" element={<MyPage />} />
279285 </Route>
280286 </Route>
281287 </Routes >
0 commit comments