diff --git a/README.md b/README.md index 0528ef0a..2e2f1557 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,274 @@ -# tattour-client -TBD +# ๐Ÿฆ‹ TATTOUR + +![แ„‘แ…ญแ„Œแ…ต](https://github.com/TEAM-TATTOUR/tattour-client/assets/77691829/e77e1a88-a897-48b1-8bc1-4f358d9dfdcb) + +
+ + +## ๐Ÿ“ฑ ์„œ๋น„์Šค ์†Œ๊ฐœ + +### ํ›„ํšŒ์—†๋Š” ์„ ํƒ์˜ ์—ฌ์ •์„ ํ•จ๊ป˜, ์ปค์Šคํ…€ ํƒ€ํˆฌ ์ฒดํ—˜ ์„œ๋น„์Šค TATTOUR + +
+ +### ๐Ÿ”Ž ํƒ€ํˆฌ๋ฅผ ๋ฐ›๊ณ  ์‹ถ์€ ์‚ฌ๋žŒ๋“ค์€ ์™œ ๊ณ ๋ฏผํ•˜๊ณ  ๋ง์„ค์ด๋Š”๋ฐ ์‹œ๊ฐ„์„ ํ—ˆ๋น„ํ•˜๊ฒŒ ๋ ๊นŒ? + + ๋ฌธ์ œ ์ •์˜: ๋งˆ์Œ์— ๋“œ๋Š” ๋„์•ˆ์„ ์ฐพ๋”๋ผ๋„ ๊ณผ์—ฐ ๋‚˜์—๊ฒŒ ์–ด์šธ๋ฆด์ง€, ํ›„ํšŒํ•˜์ง€ ์•Š์„์ง€, ์ฃผ์œ„์˜ ์‹œ์„  ๋“ฑ์˜ ์ด์œ ๋กœ ๊ธธ๊ฒŒ๋Š” 3๋…„ ์ด์ƒ ๊ณ ๋ฏผ๊ณผ ๋ง์„ค์ž„์„ ๋ฐ˜๋ณตํ•œ๋‹ค. + +
+ +
+ ๐Ÿ‘€ target + +- ํƒ€ํˆฌ๋ฅผ ํ•˜๊ณ  ์‹ถ์ง€๋งŒ, ๊ณผ์—ฐ ํ›„ํšŒํ•˜์ง€ ์•Š์„์ง€. ๊ณ ๋ฏผ๊ณผ ๋ง์„ค์ž„์„ ๋ฐ˜๋ณตํ•˜๋ฉฐ ๋ฆฌ์†Œ์Šค๋ฅผ ํ—ˆ๋น„ํ•˜๋Š” ๊ณ ๊ฐ + +- ๊ณ ๋ฏผํ•˜๋Š” ๋„์•ˆ ๋˜๋Š” ๊ฐœ์ฒด๋ฅผ [ํƒ€ํˆฌ์Šคํ‹ฐ์ปค]๋ผ๋Š” ์ˆ˜๋‹จ์„ ํ†ตํ•ด ๋ฏธ๋ฆฌ ๋ถ€์œ„์— ๋ถ€์ฐฉํ•˜๊ณ  ์ƒํ™œํ•˜๋ฉฐ, ๋‹ค์–‘ํ•œ ๊ณ ๋ฏผ์˜ ์ด์œ ๋ฅผ ํ˜„์‹ค์ ์œผ๋กœ ํ•ด๊ฒฐํ•˜๊ณ  ํ•ด์†Œํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž„. + +
+ +
+ +
+๐Ÿ“ service flow + +1. ์œ ์ € ๋กœ๊ทธ์ธ + - ์†Œ์…œ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ + - ๋กœ๊ทธ์ธ ์„ฑ๊ณต ์‹œ, ํšŒ์› ์ „์šฉ ํ™ˆ ํ™”๋ฉด์œผ๋กœ ์ด๋™ + +2. `ํฌ์ธํŠธ`๋ฅผ ํ™œ์šฉํ•œ ๊ฒฐ์ œ ์„œ๋น„์Šค + - ํฌ์ธํŠธ๊ฐ€ ๊ตฌ๋งค ๊ธˆ์•ก๋ณด๋‹ค ์ ์œผ๋ฉด, ๊ณ„์ขŒ๋กœ ๊ตฌ๋งค ๊ธˆ์•ก์„ ์†ก๊ธˆํ•˜์—ฌ ํฌ์ธํŠธ ์ถฉ์ „ ํ›„ ๊ฒฐ์ œ ๊ฐ€๋Šฅ + +3. `์ปค์Šคํ…€ ๋„์•ˆ`์˜ ์œ ๋ฌด์— ๋”ฐ๋ผ ์ฃผ๋ฌธ ํŽ˜์ด์ง€ ๋ฐ ๊ธˆ์•ก์ด ๋‹ฌ๋ผ์ง. + +4. `๋‚ด ํƒ€ํˆฌ` ํŽ˜์ด์ง€์—์„œ ์ฐœ ๋ชฉ๋ก๊ณผ ์ฃผ๋ฌธ ๋ชฉ๋ก ํ™”์ธ ๊ฐ€๋Šฅ. +
+ +
+ +
+โœ… solution +๊ฐ€์ƒ์œผ๋กœ ์ฒดํ—˜ํ•ด๋ณธ๋‹ค๋ฉด, ๋” ๋‚˜์•„๊ฐ€ ์ƒํ™œํ•ด๋ณธ๋‹ค๋ฉด ๊ณ ๋ฏผ์˜ ์žฅ๋ฒฝ์„ ๋Œ€ํญ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ํŒ๋‹จํ•จ. + +- `ํšจ์œจ์ ์ธ` ๊ณ ๋ฏผ๊ณผ ํƒ์ƒ‰ ๐Ÿ”Ž + + - ํƒ€ํˆฌ์Šคํ‹ฐ์ปค๋ฅผ ํ†ตํ•ด ํƒ€ํˆฌ ๊ณ ๋ฏผ์˜ ๊ณผ์ • ๋‹จ์ถ• ๊ฐ€๋Šฅ. + +- `ํ˜„์‹ค์ ์ธ` ๊ฒฐ์ • ๐Ÿ’ก + + - ์ฒดํ—˜๊ณผ ์ƒํ™œ์„ ํ†ตํ•ด ๊ณ ๊ฐ์˜ ์ƒํ™ฉ์— ๋งž๋Š” ํ˜„์‹ค์ ์ธ ๊ฒฐ์ • ๊ฐ€๋Šฅ. + +- `๊ฐœ์ธํ™” ๋งž์ถคํ™”` ๊ฒฝํ—˜ ๐Ÿช„ + - ๊ฐœ์ธ์ด ๊ณ ๋ฏผํ•˜๋Š” ์ด์œ /์ƒํ™ฉ์— ๋งž๋Š” ์ง์ ‘์ ์ธ ์„ ํƒ ๋ฐ ๊ฒฐ์ • ๊ฒฝํ—˜ ๊ฐ€๋Šฅ. + +
+ +์ฆ‰! ์†Œ๋น„์ž๊ฐ€ ๊ณ ๋ฏผ๋˜๋Š” ๋ชจ๋“  ๊ฒƒ๋“ค์„ ์ง์ ‘ ํƒ€ํˆฌ์Šคํ‹ฐ์ปค๋กœ ์ฒดํ—˜ํ•˜๋ฉฐ, ๊ณ ๋ฏผ์˜ ํšจ์œจ์„ฑ์„ ๋†’์ด๋Š” ์ปค์Šคํ„ฐ๋งˆ์ด์ง•๋œ ํƒ€ํˆฌ๋ฅผ ์„ ํƒ ๋ฐ ์ฒดํ—˜ ๊ฐ€๋Šฅ. + +
+ +
+
+ +## ๐Ÿš€ ํ•ต์‹ฌ ๊ธฐ๋Šฅ ์†Œ๊ฐœ +### **1๏ธโƒฃ TATTOUR MAIN** : HOT CUSTOM, THEME, STYLE ์†Œ๊ฐœ, ๋„ค๋น„๊ฒŒ์ด์…˜ ์‚ฌ์ด๋“œ๋ฐ” +KakaoTalk_Photo_2023-07-21-22-58-41 001 + +### **2๏ธโƒฃ TATTOUR SHOP** : ๊ณ ๊ฐ๋“ค์ด ํ•จ๊ป˜ ๋งŒ๋“  ํƒ€ํˆฌ ์Šคํ‹ฐ์ปค ๋‘˜๋Ÿฌ๋ณด๊ธฐ ๋ฐ ์ฃผ๋ฌธํ•˜๊ธฐ / ์ฃผ๋ฌธํ•˜๊ธฐ ๊ณผ์ •์—์„œ ์ฐœํ•œ ํƒ€ํˆฌ๋“ค์€ '๋‚ด ํƒ€ํˆฌ' ํŽ˜์ด์ง€์—์„œ ํ™•์ธ ๊ฐ€๋Šฅ +KakaoTalk_Photo_2023-07-21-22-58-41 002 + +### **3๏ธโƒฃ TATTOUR CUSTOM** : ์›ํ•˜๋Š” ์ œ์ž‘ ๋ฐฉ์‹์— ๋”ฐ๋ผ ์„ฌ์„ธํ•œ ์‹ ์ฒญ์„œ ์ž‘์„ฑ์œผ๋กœ ๋‚˜๋งŒ์˜ ํƒ€ํˆฌ ์Šคํ‹ฐ์ปค ๋งŒ๋“ค๊ธฐ +* ๋‚ด ๋„์•ˆ ๊ทธ๋Œ€๋กœ ๋งŒ๋“ค๊ธฐ : ํƒ€ํˆฌ์Šคํ‹ฐ์ปค ํฌ๊ธฐ, ๋„์•ˆ ์ด๋ฏธ์ง€ ์ฒจ๋ถ€, ํƒ€ํˆฌ์Šคํ‹ฐ์ปค ์ด๋ฆ„, ์š”์ฒญ ์‚ฌํ•ญ, ์ˆ˜๋Ÿ‰ ์„ ํƒ ๊ฐ€๋Šฅ +* ํƒ€ํˆฌ์–ด์—๊ฒŒ ๋„์•ˆ ์˜๋ขฐํ•˜๊ธฐ : ํƒ€ํˆฌ์Šคํ‹ฐ์ปค ํฌ๊ธฐ, ์ฐธ๊ณ  ์ด๋ฏธ์ง€ ์ฒจ๋ถ€, ๋ ˆํผ๋Ÿฐ์Šค ๋Œ€์ถฉ ๊ทธ๋ฆฌ๊ธฐ, ์ƒ‰์ƒ, ์žฅ๋ฅด , ์Šคํƒ€์ผ, ํƒ€ํˆฌ์Šคํ‹ฐ์ปค ์ด๋ฆ„, ์ฃผ์ œ ๋ฐ ์ถ”๊ฐ€ ์„ค๋ช…, ์š”์ฒญ ์‚ฌํ•ญ, ์ˆ˜๋Ÿ‰ ์„ ํƒ ๊ฐ€๋Šฅ + +KakaoTalk_Photo_2023-07-21-22-58-42 003 +KakaoTalk_Photo_2023-07-21-22-58-42 004 + +
+
+ + +## ๐Ÿ™‹๐Ÿปโ€โ™€๏ธ ํŒ€์› ์†Œ๊ฐœ +
+
+ + + + + + + + + + + + + + + + + + + + + + + +
ํŒ€์›๊ตฌ๊ฑด๋ชจ ์„œ์•„๋ฆ„ ์œ ์ง€๋ฏผ ์กฐ์Šนํฌ ์กฐ์—ฐ์„œ
ํŒ€์› ์†Œ๊ฐœ image + imageimage imageimage
์—ญํ•  + WEB FRONTEND, ๋ฆฌ๋“œ ๊ฐœ๋ฐœ์ž + + WEB FRONTEND + + WEB FRONTEND + + WEB FRONTEND + + WEB FRONTEND +
+
+ + +
+
+ +## โš™๏ธ ๊ธฐ์ˆ  ์Šคํƒ + +
+ +| ์—ญํ•  | ์ข…๋ฅ˜ | +| -------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Library | ![React](https://img.shields.io/badge/React-61DAFB?style=for-the-badge&logo=React&logoColor=black) | +| Programming Language | ![TypeScript](https://img.shields.io/badge/TypeScript-3178C6.svg?style=for-the-badge&logo=TypeScript&logoColor=white) | +| Styling | ![Styled Components](https://img.shields.io/badge/styled--components-DB7093?style=for-the-badge&logo=styled-components&logoColor=white) | +| State Management | ![State Management](https://img.shields.io/badge/recoil-f26b00?style=for-the-badge&logo=Recoil) | +| Formatting | ![ESLint](https://img.shields.io/badge/ESLint-4B3263?style=for-the-badge&logo=eslint&logoColor=white) ![Prettier](https://img.shields.io/badge/Prettier-F7B93E?style=for-the-badge&logo=prettier&logoColor=white) | +| Version Control | ![Git](https://img.shields.io/badge/git-%23F05033.svg?style=for-the-badge&logo=git&logoColor=white) ![GitHub](https://img.shields.io/badge/github-%23121011.svg?style=for-the-badge&logo=github&logoColor=white) | + +
+ + +
+
+ +## โœ๐Ÿป ์ปจ๋ฒค์…˜ + +### โœจ Git ์ปจ๋ฒค์…˜ + +
+ 1๏ธโƒฃ Commit ์ปจ๋ฒค์…˜ + +- ๊ธฐ๋ณธ์ ์ธ๊ฒƒ (feat, fix, chore, ..) ์ค‘์ ์ ์œผ๋กœ ์ง€ํ‚ค๊ธฐ! + +| ์ œ๋ชฉ | ๋‚ด์šฉ | +| -------- | ------------------------------------------- | +| init | ๋ธŒ๋žœ์น˜ ์ฒซ ์ปค๋ฐ‹ | +| feat | ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ปค๋ฐ‹ | +| fix | ๋ฒ„๊ทธ ์ˆ˜์ •์— ๋Œ€ํ•œ ์ปค๋ฐ‹ | +| build | ๋นŒ๋“œ ๊ด€๋ จ ํŒŒ์ผ ์ˆ˜์ •์— ๋Œ€ํ•œ ์ปค๋ฐ‹ | +| chore | ๊ทธ ์™ธ ์ž์ž˜ํ•œ ์ˆ˜์ •์— ๋Œ€ํ•œ ์ปค๋ฐ‹ | +| docs | ๋ฌธ์„œ ์ˆ˜์ •์— ๋Œ€ํ•œ ์ปค๋ฐ‹ | +| style | style: ์ฝ”๋“œ ์Šคํƒ€์ผ ํ˜น์€ ํฌ๋งท ๋“ฑ์— ๊ด€ํ•œ ์ปค๋ฐ‹ | +| refactor | ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง์— ๋Œ€ํ•œ ์ปค๋ฐ‹ | + +
+ +
+ 2๏ธโƒฃ Branch ์ „๋žต + +``` +1. feature ๋ธŒ๋žœ์น˜๋ฅผ ํŒŒ๊ณ  ํŽ˜์ด์ง€ ๋‹จ์œ„๋กœ ์ด๋ฆ„ ์ƒ์„ฑ ex)feature/LoginPage + +2. feature ๋ธŒ๋žœ์น˜ ํ•˜์œ„์— ์ด์Šˆ ๋ฒˆํ˜ธ๋ฅผ ํฌํ•จํ•œ ๊ธฐ๋Šฅ ๋‹จ์œ„ ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ ex)LoginPage/#6-login + +3. develop ๋ธŒ๋žœ์น˜ ๋งŒ๋“ค์–ด์„œ ํŽ˜์ด์ง€ ๋‹จ์œ„ ๋ธŒ๋žœ์น˜๋Š” dev๋ธŒ๋žœ์น˜๋กœ merge + +4. ๊ฐœ๋ฐœ์ด ์ตœ์ข…์ ์œผ๋กœ ๋๋‚˜๋ฉด main์— dev ๋ธŒ๋žœ์น˜ merge + +5. ๊ฐœ๋ฐœ๋‹จ๊ณ„์—์„œ merge๊ฐ€ ์ด๋ฃจ์–ด์ง€๋ฉด develop pull ๋ฐ›์•„์˜ค๊ธฐ ! + +```` + +
+ +
+ +### โœจ Project ์ปจ๋ฒค์…˜ + +
+1๏ธโƒฃ ํด๋” ๊ตฌ์กฐ + +* ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ถ„๋ฆฌ +* ํŽ˜์ด์ง€ ๋‹จ์œ„๋กœ ๋Ÿฌํ”„ํ•˜๊ฒŒ ๋ถ„๋ฆฌ + +```tsx +โ”œโ”€โ”€ public ๐Ÿ—‚ ์ธ๋„ค์ผ ์ด๋ฏธ์ง€, ๋กœ๊ณ  ์ด๋ฏธ์ง€ ์ €์žฅ +โ”œโ”€โ”€ .eslintrc.cjs โœจ ๋ฆฐํŠธ ์„ค์ • +โ”œโ”€โ”€ .prettierrc.cjs โœจ ํ”„๋ฆฌํ‹ฐ์–ด ์„ค์ • +โ”œโ”€โ”€ package.json ๐Ÿ“ฆ ์„ค์น˜๋œ ํŒจํ‚ค์ง€๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ํŒŒ์ผ +โ””โ”€โ”€ src + โ”œโ”€โ”€ App.tsx โœก๏ธ ์•ฑ์˜ ๋ผ์šฐํŒ…๊ณผ ๊ธ€๋กœ๋ฒŒ ์Šคํƒ€์ผ ์ง€์ • + โ”‚ + โ”œโ”€โ”€ main.tsx + โ”‚ + โ”œโ”€โ”€ Router.tsx โœก๏ธ ๋ผ์šฐํ„ฐ ์„ค์ • + โ”‚ + โ”œโ”€โ”€ assets + โ”‚ โ”œโ”€โ”€ icon ๐Ÿ–ผ ์ด๋ฏธ์ง€ ํŒŒ์ผ๋“ค ์ €์žฅ + โ”‚ โ”œโ”€โ”€ โ””โ”€โ”€ svgs ๐ŸŒ svg ํŒŒ์ผ๋“ค ์ €์žฅ + โ”‚ + โ”œโ”€โ”€ components ๐Ÿ—‚ ์ปดํฌ๋„ŒํŠธ๋“ค ์ €์žฅ + โ”‚ โ”œโ”€โ”€ modal ๐Ÿ—‚ ๋ชจ๋‹ฌ ์ปดํฌ๋„ŒํŠธ๋“ค + โ”‚ โ””โ”€โ”€ Login.tsx + โ”‚ + โ”œโ”€โ”€ pages ๐Ÿ—‚ ๋ผ์šฐํŒ… ์‹œ ๋ณด์—ฌ์งˆ ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ ์ €์žฅ + โ”‚ โ””โ”€โ”€ LoginPage.tsx + โ”‚ + โ”œโ”€โ”€ recoil ๐Ÿ—‚ ๋ฆฌ์ฝ”์ผ ๊ด€๋ จ ํŒŒ์ผ๋“ค ์ €์žฅ + โ”‚ โ”œโ”€โ”€ atoms ๐Ÿ—‚ atom๋“ค ์ €์žฅ + โ”‚ โ””โ”€โ”€ seletors ๐Ÿ—‚ selector๋“ค ์ €์žฅ + โ”‚ + โ”œโ”€โ”€ styles ๐Ÿ—‚ ์ „์—ญ ์Šคํƒ€์ผ ๊ด€๋ จ ํŒŒ์ผ๋“ค ์ €์žฅ + โ”‚ โ”œโ”€โ”€ GlobalStyle.js + โ”‚ โ”œโ”€โ”€ modal.css + โ”‚ โ””โ”€โ”€ color.js + โ”‚ + โ”œโ”€โ”€ utils ๐Ÿ—‚ util ํ•จ์ˆ˜ ๊ด€๋ จ ํŒŒ์ผ๋“ค ์ €์žฅ + โ”‚ โ””โ”€โ”€ apis ๐Ÿ—‚ api ํ•จ์ˆ˜ ๊ด€๋ จ ํŒŒ์ผ๋“ค ์ €์žฅ + + +```` + +
+ +
+2๏ธโƒฃ ๊ธฐํƒ€ ์ปจ๋ฒค์…˜ + +#### (1) ๐ŸŽจ Style ์†์„ฑ + +``` +1. ๋ ˆ์ด์•„์›ƒ ์†์„ฑ (display, position, float ๋“ฑ) + +2. ๋ฐ•์Šค ๋ชจ๋ธ ์†์„ฑ (width, height, margin, padding, border ๋“ฑ) + +3. ์‹œ๊ฐ ๊ด€๋ จ ์†์„ฑ (background-color, background-image, box-shadow ๋“ฑ) + +4. ๊ธ€๊ผด ๊ด€๋ จ ์†์„ฑ (font-size, font-family, color, text-align, text-transform ๋“ฑ) + +5. ๊ธฐํƒ€ ์†์„ฑ (opacity, cursor, overflow, z-index, transition, animation ๋“ฑ) +``` + +- CSS : Styled component ์‚ฌ์šฉ +- theme์™€ globalStyle ์‚ฌ์šฉ (`theme` : colors, font ~ ) +- rem์„ ์œ„์ฃผ๋กœ ์ ์šฉ. + +
+ +#### ๐Ÿซก ๊ธฐํƒ€ ์ปจ๋ฒค์…˜ + +- ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ํ˜•ํƒœ (`const ~~~ () => { } )` ) ๋กœ ์‚ฌ์šฉ. + - `rsc` ์ปดํฌ๋„ŒํŠธ ๋‹จ์ถ•ํ‚ค ์‚ฌ์šฉ +- event ํ•จ์ˆ˜๋Š” `handle(Action)(Component)` +- ๋ณ€์ˆ˜๋ช… : `์นด๋ฉœ์ผ€์ด์Šค` / ์ƒ์ˆ˜๋ฐ์ดํ„ฐ : `๋Œ€๋ฌธ์ž` / Component๋ช… :`ํŒŒ์Šค์นผ` +- ์ ˆ๋Œ€๊ฒฝ๋กœ ์‚ฌ์šฉ (`src` ๊ธฐ์ค€) +
+ diff --git a/src/common/Modal/CheckModal/CheckModalForm.tsx b/src/common/Modal/CheckModal/CheckModalForm.tsx index ab97d93f..1a9937d9 100644 --- a/src/common/Modal/CheckModal/CheckModalForm.tsx +++ b/src/common/Modal/CheckModal/CheckModalForm.tsx @@ -1,7 +1,7 @@ import styled from 'styled-components'; import { IcCancelDark } from '../../../assets/icon'; import { useNavigate } from 'react-router-dom'; -import api from '../../../libs/api'; +import { api } from '../../../libs/api'; interface CheckModalFormProps { onClose: () => void; diff --git a/src/common/Modal/DeleteCartModal/DeleteCartModal.tsx b/src/common/Modal/DeleteCartModal/DeleteCartModal.tsx index 7b75dff1..d6682b33 100644 --- a/src/common/Modal/DeleteCartModal/DeleteCartModal.tsx +++ b/src/common/Modal/DeleteCartModal/DeleteCartModal.tsx @@ -1,6 +1,6 @@ import ModalPortal from '../ModalPortal'; import EscapeModalForm from '../EscapeModal/EscapeModalForm'; -import api from '../../../libs/api'; +import { api } from '../../../libs/api'; import { useNavigate } from 'react-router-dom'; interface DeleteCartModalProps { diff --git a/src/common/Modal/EscapeModal/CustomSizeEscapeModal.tsx b/src/common/Modal/EscapeModal/CustomSizeEscapeModal.tsx index 566a34d9..1e01ca0f 100644 --- a/src/common/Modal/EscapeModal/CustomSizeEscapeModal.tsx +++ b/src/common/Modal/EscapeModal/CustomSizeEscapeModal.tsx @@ -3,7 +3,7 @@ import ModalPortal from '../ModalPortal'; import { IcCancelDark } from '../../../assets/icon'; import { useNavigate } from 'react-router-dom'; import { customInfoType } from '../../../types/customInfoType'; -import api from '../../../libs/api'; +import { api } from '../../../libs/api'; interface CustomSizeEscapeModalProps { setModalOn: React.Dispatch>; diff --git a/src/components/Cart/CartItem.tsx b/src/components/Cart/CartItem.tsx index 4dcdf6fe..52dd1c9d 100644 --- a/src/components/Cart/CartItem.tsx +++ b/src/components/Cart/CartItem.tsx @@ -3,7 +3,7 @@ import { IcCancelDark, IcMinus, IcMinusOneunder, IcPlus } from '../../assets/ico import { useState, useEffect, useCallback } from 'react'; import DeleteCartModal from '../../common/Modal/DeleteCartModal/DeleteCartModal'; import { debounce } from 'lodash'; -import api from '../../libs/api'; +import { api } from '../../libs/api'; import { useNavigate } from 'react-router-dom'; const CartItem = ({ diff --git a/src/components/Custom/Common/OnBoardingFooter.tsx b/src/components/Custom/Common/OnBoardingFooter.tsx index c39ef14b..3f7b8a47 100644 --- a/src/components/Custom/Common/OnBoardingFooter.tsx +++ b/src/components/Custom/Common/OnBoardingFooter.tsx @@ -2,7 +2,7 @@ import { useEffect, useState } from 'react'; import { styled } from 'styled-components'; import TempSaveModal from '../../../common/Modal/TempSaveModal/TempSaveModal'; import { useNavigate } from 'react-router-dom'; -import api from '../../../libs/api'; +import { api } from '../../../libs/api'; import { AxiosError } from 'axios'; export interface CustomSaveItemProps { diff --git a/src/components/Custom/PriceFooter.tsx b/src/components/Custom/PriceFooter.tsx index 8ec7f04e..a62698ba 100644 --- a/src/components/Custom/PriceFooter.tsx +++ b/src/components/Custom/PriceFooter.tsx @@ -1,7 +1,7 @@ import { styled } from 'styled-components'; import { customInfoType, resCustomInfoType } from '../../types/customInfoType'; -import api from '../../libs/api'; import React from 'react'; +import { api } from '../../libs/api'; interface PriceFooterProps { haveDesign?: boolean; diff --git a/src/components/Detail/DetailFooter.tsx b/src/components/Detail/DetailFooter.tsx index 9d59ee18..a4b5b15c 100644 --- a/src/components/Detail/DetailFooter.tsx +++ b/src/components/Detail/DetailFooter.tsx @@ -1,7 +1,7 @@ import styled from 'styled-components'; import { IcHeartDark, IcHeartLight } from '../../assets/icon'; import { useNavigate } from 'react-router-dom'; -import api from '../../libs/api'; +import { api } from '../../libs/api'; import { useState } from 'react'; import Toast from '../../common/ToastMessage/Toast'; diff --git a/src/components/MyTattoo/MySaveItem.tsx b/src/components/MyTattoo/MySaveItem.tsx index 02412b96..8779f42a 100644 --- a/src/components/MyTattoo/MySaveItem.tsx +++ b/src/components/MyTattoo/MySaveItem.tsx @@ -1,6 +1,6 @@ import { styled } from 'styled-components'; import { useNavigate } from 'react-router-dom'; -import api from '../../libs/api'; +import { api } from '../../libs/api'; export interface CustomDetailItemProps { id: number; diff --git a/src/components/Order/OrderFooter.tsx b/src/components/Order/OrderFooter.tsx index 7c03a15f..62e64af6 100644 --- a/src/components/Order/OrderFooter.tsx +++ b/src/components/Order/OrderFooter.tsx @@ -1,6 +1,6 @@ import styled from 'styled-components'; import { useNavigate } from 'react-router-dom'; -import api from '../../libs/api'; +import { api } from '../../libs/api'; import { OrderSheetProps } from '../../libs/hooks/order/useGetOrdersheet'; interface OrderRequest { diff --git a/src/components/Register/RegisterPhoneNumForm.tsx b/src/components/Register/RegisterPhoneNumForm.tsx index bb2a3a41..19c9b3d6 100644 --- a/src/components/Register/RegisterPhoneNumForm.tsx +++ b/src/components/Register/RegisterPhoneNumForm.tsx @@ -1,13 +1,12 @@ import { styled } from 'styled-components'; import React, { SetStateAction, useReducer, useState } from 'react'; import { useLocation, useNavigate } from 'react-router-dom'; -import axios from 'axios'; -import api from '../../libs/api'; import { reducer } from '../../libs/reducers/registerReducer'; import sliceMaxLength from '../../utils/sliceMaxLength'; import Toast from '../../common/ToastMessage/Toast'; import Timer from './Timer'; import ErrorMessage from './ErrorMessage'; +import { api, baseAxios } from '../../libs/api'; interface RegisterPhoneNumFormProps { setStep: React.Dispatch>; @@ -80,23 +79,12 @@ const RegisterPhoneNumForm = ({ setStep }: RegisterPhoneNumFormProps) => { // ํด๋ฆญ ์‹œ, ์ธ์ฆ๋ฒˆํ˜ธ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๋ฒ„ํŠผ const handleClickSendMessageBtn = () => { - const ACCESS_TOKEN_KEY = 'accesstoken'; - const accessToken = localStorage.getItem(ACCESS_TOKEN_KEY); - // ์ „ํ™”๋ฒˆํ˜ธ๊ฐ€ ์ œ๋Œ€๋กœ ์ž…๋ ฅ๋œ ๊ฒฝ์šฐ์—๋งŒ ์ธ์ฆ๋ฒˆํ˜ธ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ์Œ if (phoneNum.length === 11) { - axios - .post( - `https://dev.tattour.shop/sms/send/verification-code`, - { - phoneNumber: `${phoneNum}`, - }, - { - headers: { - Authorization: `Bearer ${accessToken}`, - }, - }, - ) + baseAxios + .post(`/sms/send/verification-code`, { + phoneNumber: `${phoneNum}`, + }) .then(() => { dispatch({ type: 'SHOW_CERTIFICATION_FORM' }); setToast(true); @@ -123,8 +111,8 @@ const RegisterPhoneNumForm = ({ setStep }: RegisterPhoneNumFormProps) => { const checkCertificationNum = (e: React.ChangeEvent) => { // ์ธ์ฆ๋ฒˆํ˜ธ 6์ž๋ฆฌ๋ฅผ ๋ชจ๋‘ ์ž…๋ ฅํ–ˆ์„ ๊ฒฝ์šฐ์—๋งŒ ์„œ๋ฒ„์™€ ์†Œํ†ต if (e.target.value.length === 6) { - api - .get(`/user/phonenumber/verification`, { + baseAxios + .get(`/api/v1/user/phonenumber/verification`, { params: { verificationCode: `${e.target.value}`, }, diff --git a/src/libs/api.ts b/src/libs/api.ts index 72810abe..4786282c 100644 --- a/src/libs/api.ts +++ b/src/libs/api.ts @@ -1,10 +1,15 @@ import axios, { AxiosInstance } from 'axios'; -const api: AxiosInstance = axios.create({ +// /api/vi endpoint๊ฐ€ ๋ถ™์ง€ ์•Š์€ instance +export const baseAxios: AxiosInstance = axios.create({ baseURL: import.meta.env.VITE_APP_BASE_URL, // timeout: 5000, // ์›ํ•˜๋Š” ๊ฒฝ์šฐ ํƒ€์ž„์•„์›ƒ ์„ค์ • }); +export const api: AxiosInstance = axios.create({ + baseURL: `${import.meta.env.VITE_APP_BASE_URL}/api/v1`, + // timeout: 5000, // ์›ํ•˜๋Š” ๊ฒฝ์šฐ ํƒ€์ž„์•„์›ƒ ์„ค์ • +}); // const ACCESS_TOKEN_KEY = 'accessToken'; const ACCESS_TOKEN_KEY = 'accesstoken'; @@ -20,7 +25,7 @@ export const removeAccessToken = () => { localStorage.removeItem(ACCESS_TOKEN_KEY); }; -api.interceptors.request.use((config) => { +baseAxios.interceptors.request.use((config) => { const accessToken = getAccessToken(); if (accessToken) { config.headers['Authorization'] = `Bearer ${accessToken}`; @@ -28,4 +33,10 @@ api.interceptors.request.use((config) => { return config; }); -export default api; +api.interceptors.request.use((config) => { + const accessToken = getAccessToken(); + if (accessToken) { + config.headers['Authorization'] = `Bearer ${accessToken}`; + } + return config; +}); diff --git a/src/libs/hooks/detail/useGetRelated.tsx b/src/libs/hooks/detail/useGetRelated.tsx index c4d65eb9..fc168b00 100644 --- a/src/libs/hooks/detail/useGetRelated.tsx +++ b/src/libs/hooks/detail/useGetRelated.tsx @@ -1,5 +1,5 @@ import { useEffect, useState } from 'react'; -import api from '../../api'; +import { api } from '../../api'; import { AxiosError } from 'axios'; import { useNavigate } from 'react-router-dom'; diff --git a/src/libs/hooks/detail/useGetSticker.tsx b/src/libs/hooks/detail/useGetSticker.tsx index 02510078..71761095 100644 --- a/src/libs/hooks/detail/useGetSticker.tsx +++ b/src/libs/hooks/detail/useGetSticker.tsx @@ -1,5 +1,5 @@ import { useEffect, useState } from 'react'; -import api from '../../api'; +import { api } from '../../api'; import { AxiosError } from 'axios'; import { useNavigate } from 'react-router-dom'; diff --git a/src/libs/hooks/list/useGetAllList.tsx b/src/libs/hooks/list/useGetAllList.tsx index 82ca449b..665e3c15 100644 --- a/src/libs/hooks/list/useGetAllList.tsx +++ b/src/libs/hooks/list/useGetAllList.tsx @@ -1,5 +1,5 @@ import { useEffect, useState } from 'react'; -import api from '../../api'; +import { api } from '../../api'; import { AxiosError } from 'axios'; import { useNavigate } from 'react-router-dom'; import { buttonType } from '../../../page/ListPage'; diff --git a/src/libs/hooks/list/useGetGenre.tsx b/src/libs/hooks/list/useGetGenre.tsx index 7ffeeb54..7d303a4e 100644 --- a/src/libs/hooks/list/useGetGenre.tsx +++ b/src/libs/hooks/list/useGetGenre.tsx @@ -1,5 +1,5 @@ import { useEffect, useState } from 'react'; -import api from '../../api'; +import { api } from '../../api'; import { AxiosError } from 'axios'; import { useNavigate } from 'react-router-dom'; diff --git a/src/libs/hooks/list/useGetStyle.tsx b/src/libs/hooks/list/useGetStyle.tsx index 5cb2c67b..e2db463d 100644 --- a/src/libs/hooks/list/useGetStyle.tsx +++ b/src/libs/hooks/list/useGetStyle.tsx @@ -1,5 +1,5 @@ import { useEffect, useState } from 'react'; -import api from '../../api'; +import { api } from '../../api'; import { AxiosError } from 'axios'; import { useNavigate } from 'react-router-dom'; diff --git a/src/libs/hooks/order/useGetOrdersheet.tsx b/src/libs/hooks/order/useGetOrdersheet.tsx index 4ab02ae8..f9b396b6 100644 --- a/src/libs/hooks/order/useGetOrdersheet.tsx +++ b/src/libs/hooks/order/useGetOrdersheet.tsx @@ -1,5 +1,5 @@ import { useEffect, useState } from 'react'; -import api from '../../api'; +import { api } from '../../api'; import { AxiosError } from 'axios'; import { useNavigate } from 'react-router-dom'; diff --git a/src/libs/hooks/order/usePostOrder.tsx b/src/libs/hooks/order/usePostOrder.tsx index ece087ef..b6d13d01 100644 --- a/src/libs/hooks/order/usePostOrder.tsx +++ b/src/libs/hooks/order/usePostOrder.tsx @@ -1,5 +1,5 @@ import { useState } from 'react'; -import api from '../../api'; +import { api } from '../../api'; import { useNavigate } from 'react-router-dom'; export interface OrderRequest { diff --git a/src/libs/hooks/useGetCartList.ts b/src/libs/hooks/useGetCartList.ts index d5719a6e..3340434e 100644 --- a/src/libs/hooks/useGetCartList.ts +++ b/src/libs/hooks/useGetCartList.ts @@ -1,58 +1,59 @@ import { useEffect, useState } from 'react'; -import { AxiosError } from "axios"; -import api from "../api"; +import { AxiosError } from 'axios'; +import { api } from '../api'; interface CartListProps { - cartItemsRes: CartItemProps[]; - orderAmountDetailRes: OrderAmountDetailProps; + cartItemsRes: CartItemProps[]; + orderAmountDetailRes: OrderAmountDetailProps; } export interface CartItemProps { - stickerId: number; - id: number; - mainImageUrl: string; - name: string; - price: number; - discountPrice: number; - count: number; + stickerId: number; + id: number; + mainImageUrl: string; + name: string; + price: number; + discountPrice: number; + count: number; } export interface OrderAmountDetailProps { - totalAmount: number; - productAmount: number; - shippingFee: number; + totalAmount: number; + productAmount: number; + shippingFee: number; } interface CartListResponse { - data: CartListProps - code: number; - message: string; + data: CartListProps; + code: number; + message: string; } const useGetCartList = () => { - const [response, setResponse] = useState({} as CartListProps); - const [error, setError] = useState(); - const [loading, setLoading] = useState(true); - - const fetchData = async () => { - await api.get('/cart') - .then(res => { - const data: CartListResponse = res.data; - setResponse(data.data); - }) - .catch(err => { - setError(err); - }) - .finally(() => { - setLoading(false); - }) - } - - useEffect(() => { - fetchData(); - }, []) - - return { response, error, loading } -} + const [response, setResponse] = useState({} as CartListProps); + const [error, setError] = useState(); + const [loading, setLoading] = useState(true); + + const fetchData = async () => { + await api + .get('/cart') + .then((res) => { + const data: CartListResponse = res.data; + setResponse(data.data); + }) + .catch((err) => { + setError(err); + }) + .finally(() => { + setLoading(false); + }); + }; + + useEffect(() => { + fetchData(); + }, []); + + return { response, error, loading }; +}; export default useGetCartList; diff --git a/src/libs/hooks/useGetCustomDetail.ts b/src/libs/hooks/useGetCustomDetail.ts index c5888b0c..97106a18 100644 --- a/src/libs/hooks/useGetCustomDetail.ts +++ b/src/libs/hooks/useGetCustomDetail.ts @@ -1,6 +1,6 @@ import { AxiosError } from 'axios'; import { useEffect, useState } from 'react'; -import api from '../api'; +import { api } from '../api'; import { useNavigate } from 'react-router-dom'; export interface CustomDetailItemProps { diff --git a/src/libs/hooks/useGetCustomSaveList.ts b/src/libs/hooks/useGetCustomSaveList.ts index 1c9a3c28..a1a51a42 100644 --- a/src/libs/hooks/useGetCustomSaveList.ts +++ b/src/libs/hooks/useGetCustomSaveList.ts @@ -1,5 +1,5 @@ import { useState, useEffect } from 'react'; -import api from '../api'; +import { api } from '../api'; import { AxiosError } from 'axios'; import { useNavigate } from 'react-router-dom'; diff --git a/src/libs/hooks/useGetHotCustom.ts b/src/libs/hooks/useGetHotCustom.ts index 29480fb8..63b78464 100644 --- a/src/libs/hooks/useGetHotCustom.ts +++ b/src/libs/hooks/useGetHotCustom.ts @@ -1,5 +1,5 @@ import { useEffect, useState } from 'react'; -import api from '../api'; +import { api } from '../api'; import { AxiosError } from 'axios'; import { useNavigate } from 'react-router-dom'; diff --git a/src/libs/hooks/useGetLikeSticker.ts b/src/libs/hooks/useGetLikeSticker.ts index c8ac9c12..8817c4a2 100644 --- a/src/libs/hooks/useGetLikeSticker.ts +++ b/src/libs/hooks/useGetLikeSticker.ts @@ -1,5 +1,5 @@ import { AxiosError } from 'axios'; -import api from '../api'; +import { api } from '../api'; import { useState, useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; diff --git a/src/libs/hooks/useGetMyCustom.ts b/src/libs/hooks/useGetMyCustom.ts index e29a9a6d..96236cf2 100644 --- a/src/libs/hooks/useGetMyCustom.ts +++ b/src/libs/hooks/useGetMyCustom.ts @@ -1,6 +1,6 @@ import { AxiosError } from 'axios'; import { useEffect, useState } from 'react'; -import api from '../api'; +import { api } from '../api'; import { useNavigate } from 'react-router-dom'; export interface MyCustomItemProps { diff --git a/src/libs/hooks/useGetSearchSticker.ts b/src/libs/hooks/useGetSearchSticker.ts index d02b6483..752dc3e3 100644 --- a/src/libs/hooks/useGetSearchSticker.ts +++ b/src/libs/hooks/useGetSearchSticker.ts @@ -1,6 +1,6 @@ import { useEffect, useState } from 'react'; import { AxiosError } from 'axios'; -import api from '../api'; +import { api } from '../api'; import { useNavigate } from 'react-router-dom'; export interface SearchStickerItemProps { diff --git a/src/libs/hooks/useGetStyleCard.ts b/src/libs/hooks/useGetStyleCard.ts index cbcc0aec..a3e0f042 100644 --- a/src/libs/hooks/useGetStyleCard.ts +++ b/src/libs/hooks/useGetStyleCard.ts @@ -1,6 +1,6 @@ import { AxiosError } from 'axios'; import { useEffect, useState } from 'react'; -import api from '../api'; +import { api } from '../api'; import { useNavigate } from 'react-router-dom'; export interface MainStyleItemProps { diff --git a/src/libs/hooks/useGetThemeCard.ts b/src/libs/hooks/useGetThemeCard.ts index 9cfcf8bf..8ee5e2f2 100644 --- a/src/libs/hooks/useGetThemeCard.ts +++ b/src/libs/hooks/useGetThemeCard.ts @@ -1,6 +1,6 @@ import { AxiosError } from 'axios'; import { useEffect, useState } from 'react'; -import api from '../api'; +import { api } from '../api'; import { useNavigate } from 'react-router-dom'; export interface MainThemeItemProps { diff --git a/src/libs/hooks/useGetUserProfile.ts b/src/libs/hooks/useGetUserProfile.ts index 3050c560..0e3b7717 100644 --- a/src/libs/hooks/useGetUserProfile.ts +++ b/src/libs/hooks/useGetUserProfile.ts @@ -1,4 +1,4 @@ -import api from '../api'; +import { api } from '../api'; import { useState, useEffect } from 'react'; import { AxiosError } from 'axios'; import { useNavigate } from 'react-router-dom'; diff --git a/src/libs/hooks/useKakaoLogin.tsx b/src/libs/hooks/useKakaoLogin.tsx index d3eb2df9..ed566198 100644 --- a/src/libs/hooks/useKakaoLogin.tsx +++ b/src/libs/hooks/useKakaoLogin.tsx @@ -1,6 +1,6 @@ import { useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; -import api, { setAccessToken } from '../api'; +import { api, setAccessToken } from '../api'; interface resProps { data: { diff --git a/src/libs/hooks/usePostCustomApply.ts b/src/libs/hooks/usePostCustomApply.ts index eb476c39..2cce0aab 100644 --- a/src/libs/hooks/usePostCustomApply.ts +++ b/src/libs/hooks/usePostCustomApply.ts @@ -1,7 +1,7 @@ import { AxiosError, isAxiosError } from 'axios'; import { useEffect, useState } from 'react'; -import api from '../api'; import { useNavigate } from 'react-router-dom'; +import { api } from '../api'; interface CustomApplyResponseData { customId: number;