From 5451652ea422b86dd624ab53492ef8e98e83b41f Mon Sep 17 00:00:00 2001 From: KimTaeHun Date: Tue, 17 Dec 2024 18:30:40 +0900 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20=ED=9A=8C=EC=9B=90=EA=B0=80?= =?UTF-8?q?=EC=9E=85=20=EB=B0=8F=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=EC=9A=A9=20?= =?UTF-8?q?=EC=9D=B8=EC=A6=9D=20API=EC=99=80=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=20=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/test/auth.tsx | 45 +++++++++++++++++++++++++++++++ services/api/auth.ts | 63 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 108 insertions(+) create mode 100644 pages/test/auth.tsx create mode 100644 services/api/auth.ts diff --git a/pages/test/auth.tsx b/pages/test/auth.tsx new file mode 100644 index 0000000..6430993 --- /dev/null +++ b/pages/test/auth.tsx @@ -0,0 +1,45 @@ +import { AuthAPI } from '@/services/api/auth'; + +function authtest() { + const handleSignUp = async () => { + try { + await AuthAPI.signup({ + email: 'apple3@example.com', + name: 'apple3', + password: 'password', + passwordConfirmation: 'password', + }); + alert('회원가입 성공'); + } catch (error) { + if (error instanceof Error) { + alert(error.message); + } else { + alert('회원가입 중 오류가 발생했습니다.'); + } + } + }; + const handleSignIn = async () => { + try { + await AuthAPI.signin({ + email: 'apple3@example.com', + password: 'password', + }); + alert('로그인 성공'); + } catch (error) { + if (error instanceof Error) { + alert(error.message); + } else { + alert('로그인 중 오류가 발생했습니다.'); + } + } + }; + + return ( +
+ + +
+ ); +} + +export default authtest; diff --git a/services/api/auth.ts b/services/api/auth.ts new file mode 100644 index 0000000..420dc9f --- /dev/null +++ b/services/api/auth.ts @@ -0,0 +1,63 @@ +import instance from '../../lib/axios-client'; + +import { AxiosError } from 'axios'; + +interface ErrorResponse { + message: string; + details?: { + [key: string]: { + message: string; + }; + }; +} + +export const AuthAPI = { + signup: async (data: { + email: string; + name: string; + password: string; + passwordConfirmation: string; + }) => { + try { + const res = await instance.post('/auth/signUp', data); + return res.data; + } catch (error) { + if (error instanceof AxiosError) { + // 400 에러 (이미 존재하는 이메일) + if (error.response?.status === 400) { + throw new Error(error.response.data.message); + } + // 500 에러 (서버 내부 오류) + if (error.response?.status === 500) { + throw new Error( + '서버 오류가 발생했습니다. 잠시 후 다시 시도해주세요.' + ); + } + } + // 기타 예상치 못한 에러 + throw new Error('회원가입 중 오류가 발생했습니다.'); + } + }, + + signin: async (data: { email: string; password: string }) => { + try { + const res = await instance.post('/auth/signIn', data); + return res.data; + } catch (error) { + if (error instanceof AxiosError) { + // 400 에러 (이메일 또는 비밀번호 불일치) + if (error.response?.status === 400) { + throw new Error('이메일 또는 비밀번호가 일치하지 않습니다.'); + } + // 500 에러 (서버 내부 오류) + if (error.response?.status === 500) { + throw new Error( + '서버 오류가 발생했습니다. 잠시 후 다시 시도해주세요.' + ); + } + } + // 기타 예상치 못한 에러 + throw new Error('로그인 중 오류가 발생했습니다.'); + } + }, +};