From d942feff442a883f32dcdef682cb3320c7466b19 Mon Sep 17 00:00:00 2001 From: ImJaeOne Date: Thu, 3 Apr 2025 21:53:24 +0900 Subject: [PATCH 01/12] =?UTF-8?q?chore:#29=20=EA=B5=AC=EA=B8=80,=20?= =?UTF-8?q?=EB=84=A4=EC=9D=B4=EB=B2=84=20=EC=95=84=EC=9D=B4=EC=BD=98=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/assets/google_icon.png | Bin 0 -> 6790 bytes public/assets/naver_icon.png | Bin 0 -> 4911 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 public/assets/google_icon.png create mode 100644 public/assets/naver_icon.png diff --git a/public/assets/google_icon.png b/public/assets/google_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..9a8f6902d14f96e88af3c3f636cc09a74c1e9c12 GIT binary patch literal 6790 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 literal 0 HcmV?d00001 From 269aac1877a025ed0f41837b714207a386519d32 Mon Sep 17 00:00:00 2001 From: ImJaeOne Date: Thu, 3 Apr 2025 21:54:18 +0900 Subject: [PATCH 02/12] =?UTF-8?q?feat:#29=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20?= =?UTF-8?q?=EC=9C=A0=ED=9A=A8=EC=84=B1=20=EA=B2=80=EC=82=AC=20=EB=A9=94?= =?UTF-8?q?=EC=8B=9C=EC=A7=80=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/constants/message-constants.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/constants/message-constants.ts b/src/constants/message-constants.ts index 0bdb800bb..899035c00 100644 --- a/src/constants/message-constants.ts +++ b/src/constants/message-constants.ts @@ -5,6 +5,8 @@ export const AUTH_MESSAGE = { EMAIL_INVALID: '올바른 이메일 형식이어야 합니다.', PASSWORD_LENGTH: '비밀번호는 6자 이상이어야 합니다.', PASSWORD_SPECIAL_CHAR: '비밀번호는 최소 하나의 특수 문자를 포함해야 합니다.', + EMAIL_EMPTY_FIELD: '이메일을 입력해주세요.', + PASSWORD_EMPTY_FIELD: '비밀번호를 입력해주세요.' }, RESULT: { SIGN_UP_SUCCESS: '회원 가입에 성공했습니다.', From 5d283cc81816dd4aa559f7a945aded2ea47acddf Mon Sep 17 00:00:00 2001 From: ImJaeOne Date: Thu, 3 Apr 2025 21:54:37 +0900 Subject: [PATCH 03/12] =?UTF-8?q?feat:#29=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20?= =?UTF-8?q?=EC=8A=A4=ED=82=A4=EB=A7=88=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/features/auth/sing-in/data/schema.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 src/features/auth/sing-in/data/schema.ts diff --git a/src/features/auth/sing-in/data/schema.ts b/src/features/auth/sing-in/data/schema.ts new file mode 100644 index 000000000..f9b04e35d --- /dev/null +++ b/src/features/auth/sing-in/data/schema.ts @@ -0,0 +1,12 @@ +import { AUTH_MESSAGE } from '@/constants/message-constants'; +import { z } from 'zod'; + +const { VALIDATION } = AUTH_MESSAGE; +const { EMAIL_EMPTY_FIELD, PASSWORD_EMPTY_FIELD } = VALIDATION; + +export const schema = z.object({ + email: z.string().trim().email(EMAIL_EMPTY_FIELD), + password: z.string().trim().min(1, PASSWORD_EMPTY_FIELD), +}); + +export type SignInFormData = z.infer; From c203a84f76bbcf3a209791df1e01eed621d2b6dd Mon Sep 17 00:00:00 2001 From: ImJaeOne Date: Thu, 3 Apr 2025 21:55:25 +0900 Subject: [PATCH 04/12] =?UTF-8?q?refactor:#29=20=EB=8B=A4=EB=A5=B8=20?= =?UTF-8?q?=ED=98=95=EC=8B=9D=EC=9D=98=20formdata=20=EB=B0=9B=EC=9D=84=20?= =?UTF-8?q?=EC=88=98=20=EC=9E=88=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/features/auth/auth-input.tsx | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/features/auth/auth-input.tsx b/src/features/auth/auth-input.tsx index e017ebc3a..44ebe8a0e 100644 --- a/src/features/auth/auth-input.tsx +++ b/src/features/auth/auth-input.tsx @@ -1,15 +1,14 @@ -import { UseFormRegister } from 'react-hook-form'; -import { FormData } from './sign-up/data/schema'; +import { Path, UseFormRegister } from 'react-hook-form'; -type Props = { +type Props = { label: string; - id: keyof FormData; - register: UseFormRegister; + id: Path; + register: UseFormRegister; error?: { message?: string }; type: string; }; -const AuthInput = ({ label, id, register, error, type }: Props) => ( +const AuthInput = ({ label, id, register, error, type }: Props) => (
From a418589728c096e4526e06ed18bb66286a1c2b49 Mon Sep 17 00:00:00 2001 From: ImJaeOne Date: Thu, 3 Apr 2025 22:10:49 +0900 Subject: [PATCH 05/12] =?UTF-8?q?feat:#29=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20?= =?UTF-8?q?=EC=9C=A0=ED=9A=A8=EC=84=B1=20=EA=B2=80=EC=82=AC=20=EB=A9=94?= =?UTF-8?q?=EC=8B=9C=EC=A7=80=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/constants/message-constants.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/constants/message-constants.ts b/src/constants/message-constants.ts index 899035c00..5d38e2598 100644 --- a/src/constants/message-constants.ts +++ b/src/constants/message-constants.ts @@ -13,5 +13,7 @@ export const AUTH_MESSAGE = { SIGN_UP_FAILED: '회원 가입에 실패했습니다.', SIGN_UP_EXIST_ERROR: '이미 존재하는 이메일입니다.', SIGN_UP_EMPTY_FIELD: '모든 값을 입력해주세요.', + SIGN_IN_SUCCESS: '로그인에 성공했습니다.', + SIGN_IN_FAILED: '이메일 혹은 비밀번호를 확인해주세요.' }, }; From b34e7ff0cfab4cfd4399ea7f52519bbe3d597c9b Mon Sep 17 00:00:00 2001 From: ImJaeOne Date: Thu, 3 Apr 2025 22:11:07 +0900 Subject: [PATCH 06/12] =?UTF-8?q?feat:#29=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20?= =?UTF-8?q?=EC=9C=A0=ED=9A=A8=EC=84=B1=20=EA=B2=80=EC=82=AC=20=EC=99=84?= =?UTF-8?q?=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auth/sing-in/sign-in-auth-form.tsx | 91 ++++++++++--------- 1 file changed, 46 insertions(+), 45 deletions(-) diff --git a/src/features/auth/sing-in/sign-in-auth-form.tsx b/src/features/auth/sing-in/sign-in-auth-form.tsx index 27b5194b2..92794a177 100644 --- a/src/features/auth/sing-in/sign-in-auth-form.tsx +++ b/src/features/auth/sing-in/sign-in-auth-form.tsx @@ -4,30 +4,40 @@ import { PATH } from '@/constants/path-constant'; import { signIn } from 'next-auth/react'; import Link from 'next/link'; import { useRouter } from 'next/navigation'; +import AuthInput from '../auth-input'; +import { useForm } from 'react-hook-form'; +import { zodResolver } from '@hookform/resolvers/zod'; +import { schema, SignInFormData } from './data/schema'; +import Image from 'next/image'; +import { AUTH_MESSAGE } from '@/constants/message-constants'; const callback_url = `${process.env.NEXT_PUBLIC_BASE_URL}/${PATH.ON_BOARDING}`; +const { RESULT } = AUTH_MESSAGE; +const { SIGN_IN_SUCCESS, SIGN_IN_FAILED } = RESULT; + const SignInAuthForm = () => { + const { + register, + handleSubmit, + formState: { errors }, + } = useForm({ + resolver: zodResolver(schema), + mode: 'onBlur', + defaultValues: { email: '', password: '' } as SignInFormData, + }); const router = useRouter(); - const handleSubmit = async (e: React.FormEvent) => { - e.preventDefault(); - - const formData = new FormData(e.target as HTMLFormElement); - - const sign_in_data = { - email: String(formData.get('email')), - password: String(formData.get('password')), - }; + const onSubmit = async (data: SignInFormData) => { try { const res = await signIn('credentials', { - ...sign_in_data, + ...data, redirect: false, }); if (!res.ok) { - throw new Error('로그인에 실패했습니다.'); + throw new Error(SIGN_IN_FAILED); } else { - alert('로그인에 성공했습니다.'); + alert(SIGN_IN_SUCCESS); router.replace(PATH.ON_BOARDING); } } catch (error) { @@ -37,55 +47,46 @@ const SignInAuthForm = () => { return (
-

로그인

-
-
- - -
-
- - -
+

+ 만나서 반가워요.병아리씨! +

+

우리 같이 취업을 향한 여정을 떠나볼까요?

+

원할한 서비스 이용을 위해 로그인 해주세요.

+ + + -
- 계정이 없으신가요? +
<> +
+
+ OR +
+
+ + 30초만에 회원가입하기 +
); From 947cf8040585ffea9d02553b60177d5817f57ef9 Mon Sep 17 00:00:00 2001 From: ImJaeOne Date: Thu, 3 Apr 2025 22:20:05 +0900 Subject: [PATCH 07/12] =?UTF-8?q?refactor:#29=20=EC=8A=A4=ED=82=A4?= =?UTF-8?q?=EB=A7=88=20=EC=83=81=EC=88=98=20=EA=B5=AC=EC=A1=B0=20=EB=B6=84?= =?UTF-8?q?=ED=95=B4=20=ED=95=A0=EB=8B=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/features/auth/sign-up/data/schema.ts | 17 ++++++++++------- src/features/auth/sing-in/data/schema.ts | 4 +++- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/features/auth/sign-up/data/schema.ts b/src/features/auth/sign-up/data/schema.ts index 69400e321..b6e3f6d8f 100644 --- a/src/features/auth/sign-up/data/schema.ts +++ b/src/features/auth/sign-up/data/schema.ts @@ -6,19 +6,22 @@ const NAME_VALIDATION_MAX = 8; const NAME_VALIDATION_REGEX = /^[a-zA-Z0-9가-힣]+$/; const PASSWORD_VALIDATION_MIN = 6; +const { VALIDATION } = AUTH_MESSAGE; +const { NAME_LENGTH, NAME_SPECIAL_CHAR, EMAIL_INVALID, PASSWORD_LENGTH, PASSWORD_SPECIAL_CHAR } = VALIDATION; + export const schema = z.object({ name: z .string() .trim() - .min(NAME_VALIDATION_MIN, AUTH_MESSAGE.VALIDATION.NAME_LENGTH) - .max(NAME_VALIDATION_MAX, AUTH_MESSAGE.VALIDATION.NAME_LENGTH) - .regex(NAME_VALIDATION_REGEX, AUTH_MESSAGE.VALIDATION.NAME_SPECIAL_CHAR), - email: z.string().trim().email(AUTH_MESSAGE.VALIDATION.EMAIL_INVALID), + .min(NAME_VALIDATION_MIN, NAME_LENGTH) + .max(NAME_VALIDATION_MAX, NAME_LENGTH) + .regex(NAME_VALIDATION_REGEX, NAME_SPECIAL_CHAR), + email: z.string().trim().email(EMAIL_INVALID), password: z .string() .trim() - .min(PASSWORD_VALIDATION_MIN, AUTH_MESSAGE.VALIDATION.PASSWORD_LENGTH) - .regex(/[^a-zA-Z0-9]/, AUTH_MESSAGE.VALIDATION.PASSWORD_SPECIAL_CHAR), + .min(PASSWORD_VALIDATION_MIN, PASSWORD_LENGTH) + .regex(/[^a-zA-Z0-9]/, PASSWORD_SPECIAL_CHAR), }); -export type FormData = z.infer; \ No newline at end of file +export type SignUpFormData = z.infer; diff --git a/src/features/auth/sing-in/data/schema.ts b/src/features/auth/sing-in/data/schema.ts index f9b04e35d..5b596304d 100644 --- a/src/features/auth/sing-in/data/schema.ts +++ b/src/features/auth/sing-in/data/schema.ts @@ -1,12 +1,14 @@ import { AUTH_MESSAGE } from '@/constants/message-constants'; import { z } from 'zod'; +const PASSWORD_VALIDATION_MIN = 1; + const { VALIDATION } = AUTH_MESSAGE; const { EMAIL_EMPTY_FIELD, PASSWORD_EMPTY_FIELD } = VALIDATION; export const schema = z.object({ email: z.string().trim().email(EMAIL_EMPTY_FIELD), - password: z.string().trim().min(1, PASSWORD_EMPTY_FIELD), + password: z.string().trim().min(PASSWORD_VALIDATION_MIN, PASSWORD_EMPTY_FIELD), }); export type SignInFormData = z.infer; From 44a5183cff6bffae8ecf022fa7f26d255f961633 Mon Sep 17 00:00:00 2001 From: ImJaeOne Date: Thu, 3 Apr 2025 22:22:58 +0900 Subject: [PATCH 08/12] =?UTF-8?q?refactor:#29=20=ED=9A=8C=EC=9B=90=20?= =?UTF-8?q?=EA=B0=80=EC=9E=85=20=EB=9D=BC=EC=9A=B0=ED=8A=B8=20=EC=83=81?= =?UTF-8?q?=EC=88=98=20=EA=B5=AC=EC=A1=B0=20=EB=B6=84=ED=95=B4=20=ED=95=A0?= =?UTF-8?q?=EB=8B=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/features/auth/sign-up/api/client-services.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/features/auth/sign-up/api/client-services.ts b/src/features/auth/sign-up/api/client-services.ts index 09d3380aa..1e4e1c82b 100644 --- a/src/features/auth/sign-up/api/client-services.ts +++ b/src/features/auth/sign-up/api/client-services.ts @@ -1,14 +1,17 @@ import { ROUTE_HANDLER_PATH } from '@/constants/path-constant'; -type SignUpProps = { +type Props = { name: string; email: string; password: string; }; -export const postSignUp = async (sign_up_data: SignUpProps) => { +const { AUTH } = ROUTE_HANDLER_PATH; +const { SIGN_UP } = AUTH; + +export const postSignUp = async (sign_up_data: Props) => { try { - const res = await fetch(ROUTE_HANDLER_PATH.AUTH.SIGN_UP, { + const res = await fetch(SIGN_UP, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(sign_up_data), From 68f2c683894129681a60ea054325df0839a52e5b Mon Sep 17 00:00:00 2001 From: ImJaeOne Date: Thu, 3 Apr 2025 22:23:44 +0900 Subject: [PATCH 09/12] =?UTF-8?q?refactor:#29=20=ED=9A=8C=EC=9B=90=20?= =?UTF-8?q?=EA=B0=80=EC=9E=85=20form=20noValidate=20=EC=86=8D=EC=84=B1=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/features/auth/sign-up/sign-up-auth-form.tsx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/features/auth/sign-up/sign-up-auth-form.tsx b/src/features/auth/sign-up/sign-up-auth-form.tsx index 335ca5a8f..8848f2fc6 100644 --- a/src/features/auth/sign-up/sign-up-auth-form.tsx +++ b/src/features/auth/sign-up/sign-up-auth-form.tsx @@ -7,23 +7,23 @@ import { AUTH_MESSAGE } from '@/constants/message-constants'; import { useForm } from 'react-hook-form'; import { zodResolver } from '@hookform/resolvers/zod'; import AuthInput from '@/features/auth/auth-input'; -import { FormData, schema } from './data/schema'; +import { SignUpFormData, schema } from './data/schema'; const SignUpAuthForm = () => { const { register, handleSubmit, formState: { errors }, - } = useForm({ + } = useForm({ resolver: zodResolver(schema), mode: 'onBlur', - defaultValues: { name: '', email: '', password: '' } as FormData, + defaultValues: { name: '', email: '', password: '' } as SignUpFormData, }); const router = useRouter(); - const onSubmit = async (data: FormData) => { + const onSubmit = async (data: SignUpFormData) => { try { - await postSignUp(data as Required); + await postSignUp(data as Required); router.push(PATH.AUTH.SIGN_IN); alert(AUTH_MESSAGE.RESULT.SIGN_UP_SUCCESS); } catch (error) { @@ -38,7 +38,7 @@ const SignUpAuthForm = () => {

우리 같이 취업을 향한 여정을 떠나볼까요?

원할한 서비스 이용을 위해 회원가입 해주세요.

-
+ From c06411c084db377c5f8ab57b4461f0fcf86c8695 Mon Sep 17 00:00:00 2001 From: ImJaeOne Date: Fri, 4 Apr 2025 09:49:10 +0900 Subject: [PATCH 10/12] =?UTF-8?q?design:#29=20input=20focus=EC=8B=9C=20out?= =?UTF-8?q?line=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/features/auth/auth-input.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/features/auth/auth-input.tsx b/src/features/auth/auth-input.tsx index 44ebe8a0e..42e865296 100644 --- a/src/features/auth/auth-input.tsx +++ b/src/features/auth/auth-input.tsx @@ -11,7 +11,7 @@ type Props = { const AuthInput = ({ label, id, register, error, type }: Props) => (
- +
{error &&

{error.message}

}
); From 04b7799f6d9e54487352dfc7fcce5943d102fec2 Mon Sep 17 00:00:00 2001 From: ImJaeOne Date: Fri, 4 Apr 2025 09:53:14 +0900 Subject: [PATCH 11/12] =?UTF-8?q?refactor:#29=20=EA=B2=BD=EB=A1=9C=20alias?= =?UTF-8?q?=EB=A1=9C=20=ED=86=B5=EC=9D=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/features/auth/sign-up/sign-up-auth-form.tsx | 4 ++-- src/features/auth/sing-in/sign-in-auth-form.tsx | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/features/auth/sign-up/sign-up-auth-form.tsx b/src/features/auth/sign-up/sign-up-auth-form.tsx index 8848f2fc6..6f3138e83 100644 --- a/src/features/auth/sign-up/sign-up-auth-form.tsx +++ b/src/features/auth/sign-up/sign-up-auth-form.tsx @@ -2,12 +2,12 @@ import { PATH } from '@/constants/path-constant'; import { useRouter } from 'next/navigation'; -import { postSignUp } from './api/client-services'; +import { postSignUp } from '@/features/auth/sign-up/api/client-services'; import { AUTH_MESSAGE } from '@/constants/message-constants'; import { useForm } from 'react-hook-form'; import { zodResolver } from '@hookform/resolvers/zod'; import AuthInput from '@/features/auth/auth-input'; -import { SignUpFormData, schema } from './data/schema'; +import { SignUpFormData, schema } from '@/features/auth/sign-up/data/schema'; const SignUpAuthForm = () => { const { diff --git a/src/features/auth/sing-in/sign-in-auth-form.tsx b/src/features/auth/sing-in/sign-in-auth-form.tsx index 92794a177..9d1d5282b 100644 --- a/src/features/auth/sing-in/sign-in-auth-form.tsx +++ b/src/features/auth/sing-in/sign-in-auth-form.tsx @@ -4,10 +4,10 @@ import { PATH } from '@/constants/path-constant'; import { signIn } from 'next-auth/react'; import Link from 'next/link'; import { useRouter } from 'next/navigation'; -import AuthInput from '../auth-input'; +import AuthInput from '@/features/auth/auth-input'; import { useForm } from 'react-hook-form'; import { zodResolver } from '@hookform/resolvers/zod'; -import { schema, SignInFormData } from './data/schema'; +import { schema, SignInFormData } from '@/features/auth/sing-in/data/schema'; import Image from 'next/image'; import { AUTH_MESSAGE } from '@/constants/message-constants'; From 3dd4f51ff73841372fe4c4f7dce48656ddbaa0f6 Mon Sep 17 00:00:00 2001 From: ImJaeOne Date: Fri, 4 Apr 2025 10:32:24 +0900 Subject: [PATCH 12/12] =?UTF-8?q?refactor:#29=20=EB=B3=80=EC=88=98?= =?UTF-8?q?=EB=AA=85=20camelCase=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/features/auth/sign-up/api/client-services.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/features/auth/sign-up/api/client-services.ts b/src/features/auth/sign-up/api/client-services.ts index 1e4e1c82b..83363ac6e 100644 --- a/src/features/auth/sign-up/api/client-services.ts +++ b/src/features/auth/sign-up/api/client-services.ts @@ -9,12 +9,12 @@ type Props = { const { AUTH } = ROUTE_HANDLER_PATH; const { SIGN_UP } = AUTH; -export const postSignUp = async (sign_up_data: Props) => { +export const postSignUp = async (signUpData: Props) => { try { const res = await fetch(SIGN_UP, { method: 'POST', headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify(sign_up_data), + body: JSON.stringify(signUpData), }); const data = await res.json();