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('로그인 중 오류가 발생했습니다.'); + } + }, +};