Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
60e696c
del: tsx파일 -> js파일로 변경
yaag19 Jun 13, 2021
41c829f
chore: 모듈 삭제 및 변경 등등
yaag19 Jun 13, 2021
69f47c3
feat: Route 설정
yaag19 Jun 13, 2021
42390c0
chore: 언젠가 사용하게 될지 모를 redux, redux-saga,,의 흔적들
yaag19 Jun 13, 2021
15276b6
chore: 기존 tsx파일 -> js로 변경
yaag19 Jun 13, 2021
3d55a61
chore: modules 폴더 무시
yaag19 Jun 13, 2021
365f376
feat: UI 변경에 따른 scss 수정
yaag19 Jun 13, 2021
dfb24e6
feat: 회원가입 유효성 검사기능 추가
yaag19 Jun 13, 2021
626e5b4
chore: 절대경로 지정을 위한 모듈 설치 및 package.json 수정
yaag19 Jun 20, 2021
c4c32ed
del: 파일명 변경에 의한 파일 삭제
yaag19 Jun 20, 2021
9b207e4
chore: 불필요한 코드 지우기
yaag19 Jun 20, 2021
710b07c
feat: import시 절대경로로 변경
yaag19 Jun 20, 2021
ec7e986
feat: validation함수 key별로 분리 후, 정규식 결과를 return하는 함수와 화면에 렌더할 state 변경하…
yaag19 Jun 20, 2021
9f68799
feat: 유효성 검증하는 정규식과 유효성 안내 문구 constant로 관리
yaag19 Jun 20, 2021
9216690
feat: 휴대폰 선택할 체크박스 추가
yaag19 Jun 20, 2021
8f5d71a
feat: 회원 가입 input을 InputBox라는 컴포넌트로 만듬
yaag19 Jun 20, 2021
6f654ff
feat: 회원가입 react-hook-form 적용
yaag19 Jul 18, 2021
6b0a5b9
feat: 회원가입 - 아이디(alias)입력하는 compoent 분리 및 react-hook-form 적용
yaag19 Jul 18, 2021
942d2aa
feat: 회원가입 - 이메일 입력하는 compoent 분리 및 react-hook-form 적용
yaag19 Jul 18, 2021
f265d36
feat: 회원가입 - 이름 입력하는 compoent 분리 및 react-hook-form 적용
yaag19 Jul 18, 2021
3be032c
feat: 회원가입 - 비밀번호 입력하는 compoent 분리 및 react-hook-form 적용
yaag19 Jul 18, 2021
935c26b
feat: 회원관련 server api 추가
yaag19 Jul 19, 2021
07f0308
chore: react-hook-from 모듈 설치
yaag19 Jul 19, 2021
a21564e
feat: login
yaag19 Jul 19, 2021
22ce34a
feat: UserInfoContextProvider 적용
yaag19 Jul 19, 2021
9317c42
feat: UserInfoContextProvider 적용
yaag19 Jul 19, 2021
7fa8c09
feat: Modal 컴포넌트 생성
yaag19 Jul 19, 2021
b3b291d
feat: 회원가입 phoneInput 컴포넌트 분리
yaag19 Jul 19, 2021
b228963
feat: UserInfoContextProvider 생성
yaag19 Jul 19, 2021
519357a
feat: scss 파일 수정
yaag19 Jul 19, 2021
6573412
feat: 회원가입 안내 문구 추가
yaag19 Jul 19, 2021
672e78c
feat: UserInfoContext 적용
yaag19 Jul 19, 2021
019fc8a
임시 커밋
yaag19 Jul 27, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,7 @@ npm-debug.log*
yarn-debug.log*
yarn-error.log*

Test.tsx
Test.tsx

modules/

6 changes: 6 additions & 0 deletions babel.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
module.exports = {
presets: [
['@babel/preset-env', { targets: { node: 'current' } }],
'@babel/preset-typescript',
],
};
2,178 changes: 1,309 additions & 869 deletions package-lock.json

Large diffs are not rendered by default.

25 changes: 22 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,24 +3,36 @@
"version": "0.1.0",
"private": true,
"dependencies": {
"@craco/craco": "^6.1.2",
"@hookform/error-message": "^2.0.0",
"@reduxjs/toolkit": "^1.5.1",
"@testing-library/jest-dom": "^5.11.4",
"@testing-library/react": "^11.1.0",
"@testing-library/user-event": "^12.1.10",
"@types/jest": "^26.0.15",
"@types/node": "^12.0.0",
"@types/react-dom": "^17.0.0",
"axios": "^0.21.1",
"immer": "^9.0.2",
"react": "^17.0.2",
"react-dom": "^17.0.2",
"react-hook-form": "^7.10.1",
"react-redux": "^7.2.4",
"react-router-dom": "^5.2.0",
"react-scripts": "4.0.3",
"redux": "^4.1.0",
"redux-actions": "^2.6.5",
"redux-devtools-extension": "^2.13.9",
"redux-saga": "^1.1.3",
"sass": "^1.34.0",
"typesafe-actions": "^5.1.0",
"typescript": "^4.1.2",
"web-vitals": "^1.0.1"
},
"scripts": {
"start": "react-scripts start",
"start": "cross-env NODE_PATH=src react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"test": " react-scripts jest",
"eject": "react-scripts eject"
},
"eslintConfig": {
Expand All @@ -42,7 +54,14 @@
]
},
"devDependencies": {
"@babel/core": "^7.14.3",
"@babel/preset-env": "^7.14.2",
"@babel/preset-typescript": "^7.13.0",
"@types/react": "^17.0.5",
"@types/react-router-dom": "^5.1.7"
"@types/react-redux": "^7.1.16",
"@types/react-router-dom": "^5.1.7",
"@types/redux-actions": "^2.6.1",
"craco-alias": "^3.0.1",
"cross-env": "^7.0.3"
}
}
46 changes: 46 additions & 0 deletions src/Routes.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import { BrowserRouter as Router, Switch, Route } from 'react-router-dom';
import Intro from 'pages/Intro';
import Home from 'pages/Home';
import MyPage from 'pages/MyPage';
import SignUp from 'components/SignUp';
import UserInfoContextProvider from 'contexts/UserInfoContextProvider';
import BoardCreator from 'pages/BoardCreator';
import AuthRoute from 'components/AuthRoute';

const Routes = () => {
return (
<Router>
<Switch>
<Route exact path='/'>
<UserInfoContextProvider>
<Intro />
</UserInfoContextProvider>
</Route>
{/* <AuthRoute exact path='/' component={Intro} /> */}
<Route path='/home'>
<UserInfoContextProvider>
<Home />
</UserInfoContextProvider>
</Route>
{/* <AuthRoute exact path='/home' component={Home} /> */}

<Route path='/write' component={BoardCreator} />
{/* <Route path='/mypage' component={MyPage} /> */}
{/* <Route path='/signup' component={SignUp} /> */}

<Route path='/mypage'>
<UserInfoContextProvider>
<MyPage />
</UserInfoContextProvider>
</Route>
<Route path='/signup'>
<UserInfoContextProvider>
<SignUp />
</UserInfoContextProvider>
</Route>
</Switch>
</Router>
);
};

export default Routes;
20 changes: 0 additions & 20 deletions src/Routes.tsx

This file was deleted.

29 changes: 29 additions & 0 deletions src/apis/auth.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import axios from 'axios';

export const postNewToken = ({ refreshToken }) => {
return axios
.post('http://localhost:8080/api/v1/auth/refreshtoken', {
refreshToken: refreshToken,
})
.then((res) => {
if (res.code) {
return res.code;
} else {
// localStorage.setItem('aToken', res.data.accessToken);
localStorage.setItem('rToken', res.data.refreshToken);
return 'success';
}
})
.catch((error) => {
if (error.response) {
console.log(error.response.data);
console.log(error.response.status);
return error.response.data;
} else if (error.request) {
console.log(error.request);
return 'Server Error';
} else {
console.log('Error', error.message);
}
});
};
58 changes: 58 additions & 0 deletions src/apis/board.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
import client from 'apis/client';

export const postSaveBoard = ({ title, content, createdDateTime }) => {
return client
.post('/api/v1/boards', {
title,
content,
createdDateTime,
})
.then((res) => {
console.log(res);
if (res.code) {
return res.code;
}
return res;
})
.catch((error) => {
if (error.response) {
console.log(error.response.data);
console.log(error.response.status);
return error.response.data;
} else if (error.request) {
console.log(error.request);
return 'Server Error';
} else {
console.log('Error', error.message);
}
});
};

export const getBoards = ({ lastBoardId, size }) => {
return client
.get(`/api/v1/boards`, {
params: {
lastBoardId,
size,
},
})
.then((res) => {
console.log(res);
if (res.code) {
return res.code;
}
return res;
})
.catch((error) => {
if (error.response) {
console.log(error.response.data);
console.log(error.response.status);
return error.response.data;
} else if (error.request) {
console.log(error.request);
return 'Server Error';
} else {
console.log('Error', error.message);
}
});
};
23 changes: 23 additions & 0 deletions src/apis/client.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import axios from 'axios';

const client = axios.create({
// baseURL: 'http://3.37.63.30',
baseURL: 'http://localhost:8080',
});

client.interceptors.request.use(
(config) => {
let aToken = localStorage.getItem('aToken');
if (aToken) {
config.headers.Authorization = `Bearer ${aToken}`;
} else {
console.log('Token이 존재하지 않음 -> 로그인 필요');
}
console.log(config.headers);
return config;
},
(error) => {
return Promise.reject(error);
}
);
export default client;
128 changes: 128 additions & 0 deletions src/apis/member.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
import client from 'apis/client';
import axios from 'axios';
export const postMemberLogin = ({ alias, password }) => {
console.log(alias, password);
return client
.post('/api/v1/auth/login', {
alias,
password,
})
.then((res) => {
console.log(res);

return res.data;
})
.catch((error) => {
if (error.response) {
// 요청이 이루어졌으며 서버가 2xx의 범위를 벗어나는 상태 코드로 응답했습니다.
console.log(error.response.data); // {code: "M001"}
console.log(error.response.status); // 400
return error.response.data;
} else if (error.request) {
// 요청이 이루어 졌으나 응답을 받지 못했습니다.
// `error.request`는 브라우저의 XMLHttpRequest 인스턴스 또는
// Node.js의 http.ClientRequest 인스턴스입니다.
console.log(error.request);
return 'Server Error';
} else {
// 오류를 발생시킨 요청을 설정하는 중에 문제가 발생했습니다.
console.log('Error', error.message);
}
});
};

export const postMemberSignUp = ({ alias, password, name, email, phone, createdDateTime }) => {
console.log(createdDateTime);
return axios
.post('http://localhost:8080/api/v1/members/join', {
alias,
password,
name,
email,
phone,
createdDateTime,
})
.then((res) => {
console.log(res);
return res;
})
.catch((error) => {
if (error.response) {
console.log(error.response.data);
console.log(error.response.status);
return error.response.data;
} else if (error.request) {
console.log(error.request);
return 'Server Error';
} else {
console.log('Error', error.message);
}
});
};

// 조회는 서버측에서 Path Variable 을 바꾼거 같음?
export const getMemberSelect = ({ memberId }) => {
return client
.get(`/api/v1/members`)
.then((res) => {
console.log(res);
return res;
})
.catch((error) => {
if (error.response) {
console.log(error.response.data);
console.log(error.response.status);
return error.response.data;
} else if (error.request) {
console.log(error.request);
return 'Server Error';
} else {
console.log('Error', error.message);
}
});
};

export const putMemberPasswordUpdate = ({ password }) => {
return client
.put(`/api/v1/members/password`, {
password,
})
.then((res) => {
console.log(res);
return res;
})
.catch((error) => {
if (error.response) {
console.log(error.response.data);
console.log(error.response.status);
return error.response.data;
} else if (error.request) {
console.log(error.request);
return 'Server Error';
} else {
console.log('Error', error.message);
}
});
};

// 회원 탈퇴? 요청에 아무것도 필요 없나??
export const deleteMember = () => {
return client
.delete('api/v1/members')
.then((res) => {
console.log(res);
return res;
})
.catch((error) => {
if (error.response) {
console.log(error.response.data);
console.log(error.response.status);
return error.response.data;
} else if (error.request) {
console.log(error.request);
return 'Server Error';
} else {
console.log('Error', error.message);
}
});
};
Loading