Skip to content

Commit a1cca1e

Browse files
committed
πŸ’„ Design : λ§ˆμ΄νŽ˜μ΄μ§€/ν”ΌνŒ…νŽ˜μ΄μ§€ UI/UX
- λ§ˆμ΄νŽ˜μ΄μ§€ μ‚¬μ΄μ¦ˆ 정보 Fetch μΆ”κ°€ - μ„œλ²„ sizeFetch api(/userInfo/api/...) μΆ”κ°€
1 parent 1431136 commit a1cca1e

34 files changed

+1343
-29
lines changed

Diff for: β€Žsrc/main.js

+9-3
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ const aiAPI = process.env.AI_API
1818

1919
const allowedOrigins = [
2020
'http://localhost:3000',
21+
'http://localhost:3001',
2122
'http://www.model-fit.kro.kr',
2223
aiAPI,
2324
]
@@ -60,13 +61,18 @@ app.use(express.static(path.join(__dirname, '../style/build')))
6061
app.get('/', (req, res) => {
6162
res.sendFile(path.join(__dirname, '../style/build/index.html'))
6263
})
63-
app.get('*', (req, res) => {
64-
res.sendFile(path.join(__dirname, '../style/build/index.html'))
65-
})
6664

6765
const usersRouter = require('./routes/RegisterUser')
6866
const loginRouter = require('./routes/LoginUser')
6967
const logoutRouter = require('./routes/LogoutUser')
7068
app.use('/users', usersRouter)
7169
app.use('/users', loginRouter)
7270
app.use('/users', logoutRouter)
71+
72+
// userInfo 쑰회
73+
const infoRouter = require('./routes/UserInfo')
74+
app.use('/userInfo', infoRouter)
75+
76+
app.get('*', (req, res) => {
77+
res.sendFile(path.join(__dirname, '../style/build/index.html'))
78+
})

Diff for: β€Žsrc/routes/UserInfo.js

+57
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
// μ‚¬μ΄μ¦ˆ: backend -> frontend
2+
const express = require('express')
3+
const router = express.Router()
4+
5+
const mongoose = require('mongoose')
6+
const { Schema } = mongoose
7+
8+
const User = require('../models/User')
9+
10+
// size apiκ°€ μ—†μ–΄μ„œ, ν…ŒμŠ€νŠΈμš©μœΌλ‘œ μž„μ‹œλ‘œ λ§Œλ“¦
11+
const sizeProfileSchema = new Schema({
12+
userId: { type: String },
13+
length: { type: String },
14+
shoulderWidth: { type: String },
15+
chestWidth: { type: String },
16+
})
17+
18+
const SizeProfile = mongoose.model('sizeProfiles', sizeProfileSchema)
19+
20+
// μ‚¬μ΄μ¦ˆ : backend -> frontend
21+
router.get('/api/size', async (req, res) => {
22+
const { userId } = req.query
23+
console.log(`get /userInfo/api/size ${userId}`)
24+
25+
try {
26+
const sizeProfile = await SizeProfile.findOne({ userId: userId })
27+
console.log(sizeProfile)
28+
29+
res.status(201).json({ success: true, message: sizeProfile })
30+
} catch (error) {
31+
console.error('Error finding size :', error)
32+
res.status(500).json({ success: false, error: 'Failed to fetch size.' })
33+
}
34+
})
35+
36+
router.get('/api/info', async (req, res) => {
37+
const { userId } = req.query
38+
39+
try {
40+
const user = await User.findById(userId)
41+
if (!user) {
42+
return res
43+
.status(404)
44+
.json({ success: false, message: 'The user was not found.' })
45+
}
46+
console.log(user)
47+
res.status(201).json({ success: true, user })
48+
} catch (error) {
49+
console.error('User lookup errors :', error)
50+
res.status(500).json({
51+
success: false,
52+
message: 'An error occurred during user lookup.',
53+
})
54+
}
55+
})
56+
57+
module.exports = router

Diff for: β€Žstyle/babel-plugin-macros.config.js

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
module.exports = {
2+
'fontawesome-svg-core': {
3+
license: 'free',
4+
},
5+
}

Diff for: β€Žstyle/babelrc.config.js

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
module.exports = function (api) {
2+
// api.cache.forever()
3+
api.cache(true)
4+
return {
5+
plugins: ['macros'],
6+
}
7+
}

Diff for: β€Žstyle/package.json

+8-1
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,27 @@
33
"version": "0.1.0",
44
"private": true,
55
"dependencies": {
6+
"@fortawesome/fontawesome-free": "^6.4.0",
7+
"@fortawesome/fontawesome-svg-core": "^6.4.0",
8+
"@fortawesome/free-regular-svg-icons": "^6.4.0",
9+
"@fortawesome/free-solid-svg-icons": "^6.4.0",
10+
"@fortawesome/react-fontawesome": "^0.2.0",
611
"@reduxjs/toolkit": "^1.9.5",
712
"@testing-library/jest-dom": "^5.16.5",
813
"@testing-library/react": "^13.4.0",
914
"@testing-library/user-event": "^13.5.0",
1015
"axios": "^1.4.0",
16+
"babel-plugin-macros": "^3.1.0",
1117
"bootstrap": "^5.3.0",
1218
"eslint-config-prettier": "^8.8.0",
1319
"eslint-plugin-prettier": "^4.2.1",
20+
"prop-types": "^15.8.1",
1421
"react": "^18.2.0",
1522
"react-bootstrap": "^2.7.4",
1623
"react-dom": "^18.2.0",
1724
"react-redux": "^8.1.1",
1825
"react-router-dom": "^6.13.0",
19-
"react-scripts": "5.0.1",
26+
"react-scripts": "^5.0.1",
2027
"react-tooltip": "^5.16.1",
2128
"redux": "^4.2.1",
2229
"styled-components": "^6.0.0-rc.3",

Diff for: β€Žstyle/src/App.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,20 @@
11
import React from 'react'
22
import MainPage from './components/MainPage/MainPage'
3-
import FittingPage from './components/FittingPage.js'
3+
import FittingPage from './components/FittingPage/FittingPage.js'
44
import RecommendPage from './components/RecommendPage.js'
55
import PolicyTerms from './components/Terms/PolicyTerms.js'
66
import PrivacyMain from './components/Terms/PrivacyMain.js'
77
import 'react-bootstrap'
88
import { Routes, Route } from 'react-router-dom'
9+
import MyPage from './components/MyPage/MyPage.js'
910

1011
function App() {
1112
return (
1213
<Routes>
1314
<Route path="/" element={<MainPage />} />
1415
<Route path="/fitting" element={<FittingPage />} />
1516
<Route path="/recommend" element={<RecommendPage />} />
17+
<Route path="/myPage" element={<MyPage />} />
1618
<Route exact path="/policyterms" element={<PolicyTerms />} />
1719
<Route exact path="/privacymain" element={<PrivacyMain />} />
1820
</Routes>

Diff for: β€Žstyle/src/components/FittingPage.js

-22
This file was deleted.

Diff for: β€Žstyle/src/components/FittingPage/ButtonBar.js

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import React from 'react'
2+
3+
import CardButton from './CardButton'
4+
5+
import styles from './FittingPage.module.css'
6+
7+
import saveImage from '../../images/save.png'
8+
import uploadImage from '../../images/upload.png'
9+
import changeBgImage from '../../images/landscape.png'
10+
import resetImage from '../../images/reset.png'
11+
12+
// 아직 λ²„νŠΌμ— 이벀트 μ—†μŒ
13+
// 각 λ²„νŠΌ λˆ„λ₯΄λ©΄ λͺ¨λ‹¬μ°½ λ„μ›Œμ„œ μ—…λ‘œλ“œ/λ°°κ²½ λ³€κ²½ μ°½ λ„μš°λ©΄ 쒋을듯?
14+
// 원본 λ””μžμΈμ—μ„œ 곡유 λ²„νŠΌ ν•„μš” 없을 것 κ°™μ•„ μ œμ™Έ 함
15+
function ButtonBar() {
16+
return (
17+
<div className={styles.buttonContainer}>
18+
<CardButton
19+
src={saveImage}
20+
alt="save"
21+
text="이미지 μ—…λ‘œλ“œ"
22+
onClick={() => {}}
23+
/>
24+
<CardButton
25+
src={uploadImage}
26+
alt="upload"
27+
text="이미지 μ €μž₯"
28+
onClick={() => {}}
29+
/>
30+
<CardButton
31+
src={changeBgImage}
32+
alt="changeBackground"
33+
text="λ°°κ²½ λ³€κ²½"
34+
onClick={() => {}}
35+
/>
36+
<CardButton
37+
src={resetImage}
38+
alt="reset"
39+
text="되돌리기"
40+
onClick={() => {}}
41+
/>
42+
</div>
43+
)
44+
}
45+
46+
export default ButtonBar

Diff for: β€Žstyle/src/components/FittingPage/CardButton.js

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import React from 'react'
2+
3+
import styles from './FittingPage.module.css'
4+
5+
function CardButton({ src, alt, text, onClick }) {
6+
return (
7+
<button className={styles.cardButton} onClick={onClick}>
8+
<img className={styles.btnImage} src={src} alt={alt} />
9+
<span className={styles.btnText}>{text}</span>
10+
</button>
11+
)
12+
}
13+
14+
export default CardButton

Diff for: β€Žstyle/src/components/FittingPage/FittingPage.js

+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import Navigation from '../Navigationbar/Nav'
2+
3+
import LeftFitContainer from './LeftFitContainer'
4+
import RightFitContainer from './RightFitContainer'
5+
6+
import styles from './FittingPage.module.css'
7+
8+
import React from 'react'
9+
import { useSelector } from 'react-redux'
10+
11+
import shoppingImage from '../../images/shopping-mall.png'
12+
13+
{
14+
/* {user && (
15+
<div>
16+
<h2>ν™˜μ˜ν•©λ‹ˆλ‹€, {user.email}λ‹˜!</h2>
17+
</div>
18+
)} */
19+
}
20+
function FittingPage() {
21+
const user = useSelector((state) => state.auth.user)
22+
23+
return (
24+
<>
25+
<Navigation />
26+
<div
27+
className={styles.mainContainer}
28+
style={{ backgroundImage: `url(${shoppingImage})` }}
29+
>
30+
<div className="empty-space" />
31+
<LeftFitContainer />
32+
<div className="empty-space" />
33+
<RightFitContainer />
34+
<div className="empty-space" />
35+
</div>
36+
</>
37+
)
38+
}
39+
export default FittingPage

0 commit comments

Comments
Β (0)