@@ -5,6 +5,58 @@ import { createErrorMessage } from '@/feature/shared/error/create-error-message'
55import { useRouteNavigation } from '@/feature/shared/routes/use-route-navigation' ;
66import type { UserRole } from '../domain/user-role' ;
77
8+ export const useSendVerificationEmail = ( {
9+ onSuccess,
10+ setResponseMessage,
11+ } : {
12+ onSuccess : ( ) => void ;
13+ setResponseMessage : ( message : string ) => void ;
14+ } ) => {
15+ const { authUsecase } = useGuardContext ( UsecaseContext ) ;
16+ const { mutate : sendVerificationEmail , isPending } = useMutation ( {
17+ mutationFn : async ( { email } : { email : string } ) => {
18+ return await authUsecase . sendVerificationEmail ( { email } ) ;
19+ } ,
20+ onSuccess : ( response ) => {
21+ if ( response . type === 'success' ) {
22+ onSuccess ( ) ;
23+ return ;
24+ }
25+ setResponseMessage (
26+ createErrorMessage ( response . code , '인증 이메일 발송에 실패했습니다.' )
27+ ) ;
28+ } ,
29+ } ) ;
30+
31+ return { sendVerificationEmail, isPending } ;
32+ } ;
33+
34+ export const useValidateEmailCode = ( {
35+ onSuccess,
36+ setCodeError,
37+ } : {
38+ onSuccess : ( verificationToken : string ) => void ;
39+ setCodeError : ( message : string ) => void ;
40+ } ) => {
41+ const { authUsecase } = useGuardContext ( UsecaseContext ) ;
42+ const { mutate : validateEmailCode , isPending } = useMutation ( {
43+ mutationFn : async ( { email, code } : { email : string ; code : string } ) => {
44+ return await authUsecase . validateEmailCode ( { email, code } ) ;
45+ } ,
46+ onSuccess : ( response ) => {
47+ if ( response . type === 'success' ) {
48+ onSuccess ( response . data . verificationToken ) ;
49+ return ;
50+ }
51+ setCodeError (
52+ createErrorMessage ( response . code , '인증 코드 확인에 실패했습니다.' )
53+ ) ;
54+ } ,
55+ } ) ;
56+
57+ return { validateEmailCode, isPending } ;
58+ } ;
59+
860export const useSignIn = ( {
961 setResponseMessage,
1062} : {
@@ -43,8 +95,10 @@ export const useSignIn = ({
4395
4496export const useSignUp = ( {
4597 setResponseMessage,
98+ onDuplicateEmail,
4699} : {
47100 setResponseMessage : ( message : string ) => void ;
101+ onDuplicateEmail : ( ) => void ;
48102} ) => {
49103 const { authUsecase } = useGuardContext ( UsecaseContext ) ;
50104 const { toMain } = useRouteNavigation ( ) ;
@@ -60,18 +114,21 @@ export const useSignUp = ({
60114 email : string ;
61115 password : string ;
62116 } ) => {
63- return await authUsecase . signUp ( {
64- role,
65- username,
66- email,
67- password,
68- } ) ;
117+ const checkResult = await authUsecase . checkEmailDuplicate ( { email } ) ;
118+ if ( checkResult . type === 'error' ) {
119+ return checkResult ;
120+ }
121+ return await authUsecase . signUp ( { role, username, email, password } ) ;
69122 } ,
70123 onSuccess : ( response ) => {
71124 if ( response . type === 'success' ) {
72125 toMain ( ) ;
73126 return ;
74127 }
128+ if ( response . code === 'USER_001' ) {
129+ onDuplicateEmail ( ) ;
130+ return ;
131+ }
75132 setResponseMessage (
76133 createErrorMessage (
77134 response . code ,
0 commit comments