diff --git a/apps/web/.env.development b/apps/web/.env.development index 9921337..ac3fcf0 100644 --- a/apps/web/.env.development +++ b/apps/web/.env.development @@ -1,2 +1,3 @@ NEXT_PUBLIC_DOMAIN=http://localhost:3000 -NEXT_PUBLIC_API_URL=https://dev-api.vook.app \ No newline at end of file +NEXT_PUBLIC_API_URL=https://dev-api.vook.app +NEXT_PUBLIC_GOOGLE_LOGIN_URL=https://dev-api.vook.app/oauth2/authorization/google \ No newline at end of file diff --git a/apps/web/src/app/(beforeLogin)/auth/token/page.tsx b/apps/web/src/app/(beforeLogin)/auth/token/page.tsx index d693004..d6b86ba 100644 --- a/apps/web/src/app/(beforeLogin)/auth/token/page.tsx +++ b/apps/web/src/app/(beforeLogin)/auth/token/page.tsx @@ -40,10 +40,14 @@ const AuthCallbackPage = ({ const checkUserRegistered = async () => { const userInfo = await userService.userInfo(queryClient) const isRegistered = userInfo.result.status === UserStatus.Registered + const isOnboardingCompleted = userInfo.result.onboardingCompleted - if (isRegistered) { - router.push('/workspace') + if (!isOnboardingCompleted) { + router.push('/onboarding/funnel') + return + } + if (isRegistered && isOnboardingCompleted) { const sendToken = () => { window.postMessage( { @@ -59,9 +63,12 @@ const AuthCallbackPage = ({ sendToken() } - return + router.push('/workspace') + } + + if (userInfo.result.onboardingCompleted) { + router.push('/signup') } - router.push('/signup') } checkUserRegistered() diff --git a/apps/web/src/app/(onboarding)/onboarding/job/page.tsx b/apps/web/src/app/(onboarding)/onboarding/job/page.tsx index 466bd4b..2819315 100644 --- a/apps/web/src/app/(onboarding)/onboarding/job/page.tsx +++ b/apps/web/src/app/(onboarding)/onboarding/job/page.tsx @@ -10,11 +10,13 @@ import React from 'react' import { OnboardingJob, useOnboardingMutation } from '@vook-client/api' import { useRouter } from 'next/navigation' +import { Link } from '@/components/Link' + import { SelectBoxGroup } from '../_components/SelectBoxGroup' import { useOnBoarding } from '../_context/useOnboarding' import { OnboardingHeader } from '../_components/OnboardingHeader' -import { buttonGroup, header, jobGroup, skipButton } from './page.css' +import { buttonGroup, header, jobGroup } from './page.css' const JOBS: Array<{ icon: ButtonProps['prefixIcon'] @@ -114,13 +116,8 @@ const OnboardingJobPage = () => { ))} -
- +
+ 건너뛰기 diff --git a/apps/web/src/components/SignUpForm/SignUpForm.tsx b/apps/web/src/components/SignUpForm/SignUpForm.tsx index 7c98d94..41f960c 100644 --- a/apps/web/src/components/SignUpForm/SignUpForm.tsx +++ b/apps/web/src/components/SignUpForm/SignUpForm.tsx @@ -1,12 +1,17 @@ 'use client' import { Button, Checkbox, Input, Text } from '@vook-client/design-system' -import { useSignUpMutation, useUserInfoQuery } from '@vook-client/api' +import { + UserStatus, + useSignUpMutation, + useUserInfoQuery, +} from '@vook-client/api' import { useForm } from 'react-hook-form' import { zodResolver } from '@hookform/resolvers/zod' import { ChangeEventHandler, useMemo } from 'react' import { useRouter } from 'next/navigation' import z from 'zod' +import { useReRegisterMutation } from 'node_modules/@vook-client/api/src/services/auth/queries' import { checkboxGroup, @@ -52,6 +57,19 @@ export const SignUpForm = () => { }, ) + const reSignUpMutation = useReRegisterMutation( + { + nickname: watch('nickname'), + requiredTermsAgree: watch('requiredTermsAgree'), + marketingEmailOptIn: watch('marketingEmailOptIn'), + }, + { + onSuccess: () => { + router.push('/onboarding') + }, + }, + ) + const isAllChecked = watch('requiredTermsAgree') && watch('policyAgree') && @@ -77,7 +95,15 @@ export const SignUpForm = () => { const email = userInfoQuery.data.result.email const onSubmit = handleSubmit(() => { - signUpMutation.mutate() + if (!userInfoQuery.data) { + return + } + + if (userInfoQuery.data.result.status === UserStatus.Withdrawn) { + reSignUpMutation.mutate() + } else { + signUpMutation.mutate() + } }) const onCheckAll: ChangeEventHandler = (e) => { diff --git a/apps/web/src/middleware.ts b/apps/web/src/middleware.ts index 3302371..f7d8488 100644 --- a/apps/web/src/middleware.ts +++ b/apps/web/src/middleware.ts @@ -126,6 +126,7 @@ const onlyRegisteredMiddleware = checkUserStatusMiddleware([ const onlyUnregisteredSocialUser = checkUserStatusMiddleware([ UserStatus.SocialLoginCompleted, + UserStatus.Withdrawn, ]) export async function middleware(req: NextRequest) { diff --git a/packages/api/src/services/auth/queries.ts b/packages/api/src/services/auth/queries.ts index bb35cb9..63bfd75 100644 --- a/packages/api/src/services/auth/queries.ts +++ b/packages/api/src/services/auth/queries.ts @@ -12,11 +12,26 @@ export const authOptions = { register: (client: QueryClient, dto: SignUpDTO) => ({ mutationFn: () => authService.register(client, dto), }), + reRegister: (client: QueryClient, dto: SignUpDTO) => ({ + mutationFn: () => authService.reRegister(client, dto), + }), withdraw: (client: QueryClient) => ({ mutationFn: () => authService.withdraw(client), }), } +export const useReRegisterMutation = ( + dto: SignUpDTO, + options: MutationOptions = {}, +) => { + const queryClient = useQueryClient() + + return useMutation({ + ...authOptions.reRegister(queryClient, dto), + ...options, + }) +} + export const useSignUpMutation = ( dto: SignUpDTO, options: MutationOptions = {}, diff --git a/packages/api/src/services/auth/service.ts b/packages/api/src/services/auth/service.ts index 32e9cdf..f11c80d 100644 --- a/packages/api/src/services/auth/service.ts +++ b/packages/api/src/services/auth/service.ts @@ -14,6 +14,15 @@ export const authService = { }) }, + async reRegister(client: QueryClient, dto: SignUpDTO) { + return APIBuilder.post('/user/re-register') + .withCredentials(client) + .build() + .call({ + body: JSON.stringify(dto), + }) + }, + async withdraw(client: QueryClient) { return APIBuilder.post('/user/withdraw') .withCredentials(client)