Skip to content

Commit 49edf86

Browse files
Merge pull request #228 from sinyroom/React-문지영-sprint7
[문지영] sprint7
2 parents d4b9ea5 + eef1ce5 commit 49edf86

32 files changed

+1957
-242
lines changed

package-lock.json

Lines changed: 1 addition & 23 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/App.jsx

Lines changed: 43 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,61 @@
11
import { BrowserRouter, Routes, Route } from 'react-router-dom';
22
import GlobalStyle from './styles/GlobalStyle';
33
import { ThemeProvider } from 'styled-components';
4+
import { AuthProvider } from './context/AuthContext';
45
import theme from './styles/theme';
56
import Header from './components/Layout/Header';
67
import HomePage from './components/pages/HomePage';
78
import LoginPage from './components/pages/LoginPage';
9+
import SignupPage from './components/pages/SignupPage';
810
import MarketPage from './components/pages/MarketPage/MarketPage';
911
import AddItemPage from './components/pages/AddItemPage/AddItemPage';
1012
import CommunityFeedPage from './components/pages/CommunityFeedPage';
13+
import ItemDetailPage from './components/pages/ItemDetailPage/ItemDetailPage';
1114

1215
function App() {
1316
return (
1417
<>
15-
<ThemeProvider theme={theme}>
16-
<GlobalStyle />
17-
<BrowserRouter>
18-
<Header />
18+
<AuthProvider>
19+
<ThemeProvider theme={theme}>
20+
<GlobalStyle />
21+
<BrowserRouter>
22+
<Header />
1923

20-
<div>
21-
<Routes>
22-
<Route
23-
index
24-
element={<HomePage />}
25-
/>
26-
<Route
27-
path="/login"
28-
element={<LoginPage />}
29-
/>
30-
<Route
31-
path="/items"
32-
element={<MarketPage />}
33-
/>
34-
<Route
35-
path="/additem"
36-
element={<AddItemPage />}
37-
/>
38-
<Route
39-
path="/community"
40-
element={<CommunityFeedPage />}
41-
/>
42-
</Routes>
43-
</div>
44-
</BrowserRouter>
45-
</ThemeProvider>
24+
<div>
25+
<Routes>
26+
<Route
27+
index
28+
element={<HomePage />}
29+
/>
30+
<Route
31+
path="/login"
32+
element={<LoginPage />}
33+
/>
34+
<Route
35+
path="/signup"
36+
element={<SignupPage />}
37+
/>
38+
<Route
39+
path="/items"
40+
element={<MarketPage />}
41+
/>
42+
<Route
43+
path="/additem"
44+
element={<AddItemPage />}
45+
/>
46+
<Route
47+
path="/community"
48+
element={<CommunityFeedPage />}
49+
/>
50+
<Route
51+
path="/items/:productId"
52+
element={<ItemDetailPage />}
53+
/>
54+
</Routes>
55+
</div>
56+
</BrowserRouter>
57+
</ThemeProvider>
58+
</AuthProvider>
4659
</>
4760
);
4861
}

src/api/api.js

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,112 @@ export const getProducts = async ({ page = 1, pageSize = 10, orderBy = 'recent',
1313
throw error;
1414
}
1515
};
16+
17+
export const getProductDetail = async (productId) => {
18+
try {
19+
const res = await axios.get(`${baseURL}/products/${productId}`);
20+
return res.data;
21+
} catch (error) {
22+
console.log('상품 상세 정보 api 호출 실패 :', error.message);
23+
throw error;
24+
}
25+
};
26+
27+
export const postProduct = async (product) => {
28+
try {
29+
const token = localStorage.getItem('token');
30+
const res = await axios.post(`${baseURL}/products`, product, {
31+
headers: {
32+
Authorization: `Bearer ${token}`,
33+
'Content-Type': 'application/json',
34+
},
35+
});
36+
return res.data;
37+
} catch (error) {
38+
console.log('상품 등록 api 호출 실패 :', error.message);
39+
throw error;
40+
}
41+
};
42+
43+
export const postComment = async (productId, content) => {
44+
try {
45+
const token = localStorage.getItem('token');
46+
const res = await axios.post(
47+
`${baseURL}/products/${productId}/comments`,
48+
{ content: content },
49+
{
50+
headers: {
51+
Authorization: `Bearer ${token}`,
52+
'Content-Type': 'application/json',
53+
},
54+
}
55+
);
56+
return res.data;
57+
} catch (error) {
58+
console.log('상품 댓글 등록 api 호출 실패 :', error.message);
59+
throw error;
60+
}
61+
};
62+
63+
export const getComments = async (productId, limit = 10, cursor = null) => {
64+
try {
65+
const res = await axios.get(`${baseURL}/products/${productId}/comments`, {
66+
params: {
67+
limit,
68+
cursor,
69+
},
70+
});
71+
return res.data;
72+
} catch (error) {
73+
console.log('상품 댓글 목록 api 호출 실패 :', error.message);
74+
throw error;
75+
}
76+
};
77+
78+
export const patchComment = async (commentId, content) => {
79+
try {
80+
const res = await axios.patch(`${baseURL}/comments/${commentId}`, { content: content });
81+
return res.data;
82+
} catch (error) {
83+
console.log('상품 댓글 수정 api 호출 실패 :', error.message);
84+
throw error;
85+
}
86+
};
87+
88+
export const deleteComment = async (commentId) => {
89+
try {
90+
const res = await axios.delete(`${baseURL}/comments/${commentId}`);
91+
return res.data;
92+
} catch (error) {
93+
console.log('상품 댓글 삭제 api 호출 실패 :', error.message);
94+
throw error;
95+
}
96+
};
97+
98+
export const postSignup = async (email, password, nickname, passwordConfirmation) => {
99+
try {
100+
const res = await axios.post(`${baseURL}/auth/signup`, {
101+
email,
102+
password,
103+
nickname,
104+
passwordConfirmation,
105+
});
106+
return res.data;
107+
} catch (error) {
108+
console.log('회원가입 api 호출 실패 :', error.message);
109+
throw error;
110+
}
111+
};
112+
113+
export const postLogin = async (email, password) => {
114+
try {
115+
const res = await axios.post(`${baseURL}/auth/signin`, {
116+
email,
117+
password,
118+
});
119+
return res.data;
120+
} catch (error) {
121+
console.log('로그인 api 호출 실패 :', error.message);
122+
throw error;
123+
}
124+
};
335 Bytes
Loading
3.27 KB
Loading
2.64 KB
Loading
Lines changed: 5 additions & 0 deletions
Loading
6.12 KB
Loading
828 Bytes
Loading
690 Bytes
Loading

0 commit comments

Comments
 (0)