Skip to content

KAU-SMART-PETS/Capstone_FE

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

268 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

์ฝ”๋“œ ํ†ตํ•ฉ ๊ด€๋ จ ์ฃผ์š” ๋ณ€๊ฒฝ์‚ฌํ•ญ (+ ๋ฆฌํŒฉํ† ๋ง)

๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ

src ๋””๋ ‰ํ† ๋ฆฌ ์•„๋ž˜ ์ฃผ์š” ํŒŒ์ผ ๋ฐ ํด๋”:

  • Ap**p: ๋ฉ”์ธ **์—”ํŠธ๋ฆฌ ํŒŒ์ผ

  • navigation: ๋‚ด๋น„๊ฒŒ์ด์…˜ ๊ด€๋ จ ์„ค์ • ํŒŒ์ผ

src ์•„๋ž˜ ์ฃผ์š” ํด๋”:

  1. Api: API ๋ฐ ๋”๋ฏธ ๋ฐ์ดํ„ฐ

  2. Assets: ํฐํŠธ, ์ด๋ฏธ์ง€, SVG ํŒŒ์ผ ์ €์žฅ์†Œ

  3. Components: ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ UI ์ปดํฌ๋„ŒํŠธ

  4. Screens: ํ™”๋ฉด ์ปดํฌ๋„ŒํŠธ

  5. Utils: ์ƒ์ˆ˜, ํƒ€์ž…, ๋ณด์กฐ ํ•จ์ˆ˜


API: JSON ํŒŒ์ผ ๋ฐ ๋”๋ฏธ ๋ฐ์ดํ„ฐ ์‚ฌ์šฉ

1. ๋”๋ฏธ ๋ฐ์ดํ„ฐ ์œ„์น˜ ๋ฐ ์šฉ๋„

  • ๋”๋ฏธ ๋ฐ์ดํ„ฐ ๊ฒฝ๋กœ: api/data/

  • ๊ตฌ์กฐํ™” ๋ฐฉ๋ฒ•: ํ”„๋กœ์ ํŠธ ์‹คํ–‰ ์‹œ merge-json.ts๋กœ ์—ฌ๋Ÿฌ json ํŒŒ์ผ์„ ๋ณ‘ํ•ฉํ•˜์—ฌ db.json ์ƒ์„ฑ.

    {
      "points": {
        "id": 1,
        "value": "some data"
      }
    }
  • ์˜ˆ: points.json ํŒŒ์ผ์˜ ๋ฐ์ดํ„ฐ๋Š” /points ๊ฒฝ๋กœ์—์„œ ํ˜ธ์ถœ ๊ฐ€๋Šฅ.

  • ์„œ๋ฒ„ ๊ฒฝ๋กœ ์„ค์ •: ์‹ค์ œ ์„œ๋ฒ„ URL๊ณผ ๋งž์ถฐ์„œ ํ˜ธ์ถœ ๊ฒฝ๋กœ๋ฅผ ๊ตฌ์„ฑํ•ด์•ผ ํ•จ.

    • ์˜ˆ: localhost:8080/api/v1/points ๋กœ ์„œ๋ฒ„๋ฅผ ํ˜ธ์ถœ ๊ฐ€๋Šฅ.

    • ์ด๋ฅผ ์œ„ํ•ด json-server ๋ฒ„์ „ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œ ๋ฐ --routes ์˜ต์…˜ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ–ˆ์œผ๋‚˜, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ด์Šˆ๋กœ ๋‹ค๋ฅธ ๋ฒ„์ „ ์žฌ์„ค์น˜ ๋ฐ ํ…Œ์ŠคํŠธ ์˜ˆ์ • (api/routes/routes.json ๋‚ด์šฉ ์ฐธ๊ณ )

2. API ํ˜ธ์ถœ ์„ค์ •

  • API ๊ธฐ๋ณธ URL์€ utils/constants/config.ts ํŒŒ์ผ์—์„œ ์„ค์ •.

    axios.get(`${config.API_SERVER_URL}/api/v1/points`);

3. API ํ…Œ์ŠคํŠธ ๋ฐฉ๋ฒ•

  • ์„œ๋ฒ„ ์‹คํ–‰: yarn start:api๋กœ API ์„œ๋ฒ„ ์‹œ์ž‘.

  • ํ…Œ์ŠคํŠธ ๋ช…๋ น์–ด: ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ช…๋ น์–ด๋กœ API ๋ฐ์ดํ„ฐ ํ™•์ธ ๊ฐ€๋Šฅ.

    $ curl http://localhost:8080/api/v1/pets/1

4. ์„œ๋ฒ„ API ๊ด€๋ จ ํŒŒ์ผ๋“ค (.ts)

  • ํŒŒ์ผ ๊ฒฝ๋กœ: src/api/

  • ๊ตฌํ˜„ ์˜ˆ์‹œ:

    import Pet1 from '@data/pets1.json';
    
    // ๋ฐ˜๋ ค๋™๋ฌผ ์ •๋ณด ์กฐํšŒ ํ•จ์ˆ˜
    export const fetchPetInfo = async (petId: number) => {
    return Pet1;
    };

5. ์ฃผ์˜์‚ฌํ•ญ

  • json-server ์„ค์น˜: json-server์˜ ํŠน์ • ๋ฒ„์ „์œผ๋กœ ์žฌ์„ค์น˜ํ•˜์—ฌ CORS ๋ฌธ์ œ์™€ ๊ฒฝ๋กœ ์„ค์ •์„ ํ•ด๊ฒฐํ•ด์•ผ ํ•จ.

  • json ํŒŒ์ผ ์Šคํ‚ค๋งˆ ํ™•์ธ: ๊ฐ json ํŒŒ์ผ์˜ ์Šคํ‚ค๋งˆ๊ฐ€ ์„œ๋ฒ„์™€ ์ผ๊ด€๋˜๊ฒŒ ๋งž์ถฐ์ ธ ์žˆ๋Š”์ง€ ์žฌ๊ฒ€ํ†  ํ•„์š”.

ASSETS

  • ํฐํŠธ: Pretendard ์‚ฌ์šฉ (assets/fonts/).

    • react-native.config.js๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐ.

    • ์Šคํƒ€์ผ ์˜ˆ์‹œ

      fontFamily: 'Pretendard-Bold';
  • ์ด๋ฏธ์ง€ ์‚ฌ์šฉ๋ฒ•: ๊ฐ„ํŽธ ๊ฒฝ๋กœ๋กœ ์ด๋ฏธ์ง€ ํ˜ธ์ถœ ๊ฐ€๋Šฅ.

    • ์˜ˆ : import bootSplashLogo from '@image/bootsplash/bootsplash_logo.png';

    • ์ฃผ์˜์‚ฌํ•ญ: require() ๋Œ€์‹  ์ด๋ฏธ์ง€์˜ source ์†์„ฑ์— ๋ฐ”๋กœ ๋„ฃ์–ด ์‚ฌ์šฉ.

      <Image source={bootSplashLogo} />

COMPONENTS

์ฃผ์š” ์ปดํฌ๋„ŒํŠธ ์„ค๋ช… (@components/commons/)

  • RoundedBox: ๋‹ค์–‘ํ•œ ๋ฒ„ํŠผ ๋ฐ ํ”„๋ ˆ์ž„ ์ œ๊ณต. (ํ•ต์‹ฌ UI ์ปจํ…Œ์ด๋„ˆ)

    • ํ…Œ๋งˆ ์˜ต์…˜: A: ํ•˜์–€ ํ”„๋ ˆ์ž„ B: ํšŒ์ƒ‰ ๋ฌดํ…Œ ํ”„๋ ˆ์ž„ C: ์•„์ด์ฝ˜/์‚ฌ์ง„ or ํ…์ŠคํŠธ ์ •์‚ฌ๊ฐํ˜• ๋ฒ„ํŠผ (์ค‘์•™ ๋ฐฐ์น˜)

      <RoundedBox>
         <Text>Button Text</Text> // ๊ทธ ์ด์™ธ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ ๋„ฃ์„ ์ˆ˜๋„ ์žˆ์Œ
         </RoundedBox>
    • ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ ํŒŒ์ผ์— RoundedFrame, RoundedTextButton, RoundedCircleButton ๋“ฑ ์ปดํฌ๋„ŒํŠธ ์กด์žฌ

      • shadow ์˜ต์…˜์€ ๋Œ€๋ถ€๋ถ„์˜ ์ปดํฌ๋„ŒํŠธ์— ์กด์žฌ

      • RoundedBox๋Š” button/frame ์„ ํƒ ์˜ต์…˜ ๋˜ํ•œ ๊ฐ€์ง

      • RoundedBox์—๋Š” ๋ชจ์„œ๋ฆฌ ๋์— ์˜ฌ๋ผ๊ฐ€๋Š” pill-badge ์ถ”๊ฐ€์˜ต์…˜ ์กด์žฌ

      • ์ปค์Šคํ…€ ์˜ต์…˜์— ๋Œ€ํ•ด์„œ ์ธ์ž ์™ธ์—๋„, src/utils/constants์— ์œ„์น˜ํ•˜๋Š” types.ts ํŒŒ์ผ์˜ ํ•˜๋‹จ๋„ ์ฐธ๊ณ ํ•  ์ˆ˜ ์žˆ์Œ.

  • StylizedText : ํ…์ŠคํŠธ ์Šคํƒ€์ผ๋ง ๋‹ด๋‹น. Tailwind ์Šคํƒ€์ผ ํ˜•์‹์œผ๋กœ ์ƒ‰์ƒ์˜ต์…˜ ์ž…๋ ฅ (์˜ˆ: text-blue-300).

    <StylizedText color="text-blue-300" type="header1">
       ์•ˆ๋…•ํ•˜์„ธ์š”
    </StylizedText>
    • StylizedText ์ฝ”๋“œ ํ•˜๋‹จ์— header1, header2 ... ๋“ฑ ์—ฌ๋Ÿฌ ์†์„ฑ์ด ์ •์˜๋˜์–ด์žˆ์œผ๋ฉฐ ์„ธ๋ถ€ ๋””์ž์ธ ์ˆ˜์ •๊ฐ€๋Šฅ.
  • HeaderText : ํ™”๋ฉด ์ตœ์ƒ๋‹จ์— ์ž์ฃผ ๋“ฑ์žฅํ•˜๋Š” ์ œ๋ชฉํ…์ŠคํŠธ๋ฅผ ์œ„ํ•œ ๊ฒƒ

    • ํ•˜์ด๋ผ์ดํŠธ ๋‹จ์–ด(์• ๊ฒฌ์ด๋ฆ„, ํšŒ์›์ด๋ฆ„ ๋“ฑ)๋ฅผ primary color๋กœ ํ‘œ์‹œ

    • StylizedText์™€ ๊ฐ™์€ ํŒŒ์ผ์— ์กด์žฌ

      <HeaderText
            text={${petName}์˜ ์ผ์ฃผ์ผ์€ ์–ด๋• ์„๊นŒ์š”?}  // petName ์‚ฌ์šฉ
            highlight={petName || ''}                // ๊ฐ•์กฐํ•  ๋ถ€๋ถ„
         />
  • ShadowBox: ์•ˆ๋“œ๋กœ์ด๋“œ์šฉ ๊ทธ๋ฆผ์ž ํšจ๊ณผ๋ฅผ ์ตœ๋Œ€ํ•œ ํ”ผ๊ทธ๋งˆ์™€ ์ผ์น˜ํ•˜๊ฒŒ ๊ตฌํ˜„. (์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ)

    <ShadowBox>
       <Text>๊ทธ๋ฆผ์ž ํšจ๊ณผ</Text>
    </ShadowBox>
    • (์ฐธ๊ณ ) RoundedBox์˜ ์•„์ดํ…œ๋“ค์€ ๊ทธ๋ฆผ์ž ์˜ต์…˜์—์„œ ์ด ์ปดํฌ๋„ŒํŠธ๋ฅผ wrapper ์ปจํ…Œ์ด๋„ˆ๋กœ ํ™œ์šฉ.

๊ธฐํƒ€ ์ปดํฌ๋„ŒํŠธ

  • BarChart: ๊ฐ€๋กœ ๋ฐ ์„ธ๋กœ ๋ง‰๋Œ€ ๊ทธ๋ž˜ํ”„ ์ œ๊ณต. (VBar, HBar..)

  • ColorMap: ํ”„๋กœ์ ํŠธ ์ „๋ฐ˜์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ƒ‰์ƒ ๊ด€๋ฆฌ.

  • ์‚ญ์ œ ์˜ˆ์ • : ๋ฒ”์šฉ์„ฑ์ด ์ ์–ด ์‚ญ์ œ ๋˜๋Š” ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ์— ํ†ตํ•ฉ ์˜ˆ์ •.

    • CircularButton, DiseaseCard, SquareRoundedBox
  • ์ž‘์—… ์˜ˆ์ • : ๋‹ค๋ฅธ ํŒ€์›์˜ ์ฝ”๋“œ์—์„œ ์ถ”๊ฐ€๋จ.

    • CustomImagePicker, CustomTextInput

      • ์ด์Šˆ ํ•ด๊ฒฐ ์ง„ํ–‰ ์ค‘
    • Avatar, Badge, Loading

      • ๋จธ์ง€ ์ดํ›„ ๊ฐ„๋‹จํ•œ ์ปดํฌ๋„ŒํŠธ๋กœ ์ถ”๊ฐ€ ์˜ˆ์ •

SCREENS

ํ™”๋ฉด ๊ตฌ์„ฑ

  • Screens/ ํด๋”๋Š” health, bluetooth, home, profile, walk๋กœ ๋ถ„๋ฅ˜.

  • ํŒŒ์ผ๋ช… ์กฐ์ •: ํ™”๋ฉด ์ปดํฌ๋„ŒํŠธ ์ด๋ฆ„๊ณผ ํŒŒ์ผ๋ช…์ด ์ผ์น˜ํ•˜๋„๋ก ํ†ต์ผํ•จ.

    • ์ด์ „์—๋Š” ํŒŒ์ผ๋ช…๊ณผ ์ปดํฌ๋„ŒํŠธ๋ช…์ด ๊ด€๋ จ์„ฑ์ด ์ ์–ด ํ—ท๊ฐˆ๋ฆฌ๊ธฐ ์‰ฌ์› ์Œ

    • ํŒŒ์ผ๋ช…์˜ ๊ธธ์ด ๋ฌธ์ œ๋กœ Screen ์ ‘๋‘์‚ฌ๋ฅผ ์ œ์™ธํ•จ.

์ž‘์—… ์ง„ํ–‰์ƒํƒœ

  • ํ”„๋กœ์ ํŠธ ํŒŒ์ผ ์žฌ๊ตฌ์„ฑ, ํ˜ธ์ถœ๊ตฌ์กฐ ์žฌ์ •์˜

  • ์„œ๋ฒ„ api ํ”„๋กœํ† ํƒ€์ž… ์ž‘์„ฑ (ํ…Œ์ŠคํŠธ ๋ฏธ์™„๋ฃŒ)

  • json-server apiํ™˜๊ฒฝ ๊ตฌ์„ฑ ๋ฐ ๊ด€๋ จ ํ…Œ์ŠคํŒ… ์Šคํฌ๋ฆฝํŠธ ์ถ”๊ฐ€

  • ๊ธฐ์กด ์ฝ”๋“œ ๋กœ์ง ๋ฆฌํŒฉํ† ๋ง (๋ฐ˜๋ณต๋˜๋Š” ์ฝ”๋“œ ์ตœ์†Œํ™”, ํ•˜๋“œ์ฝ”๋”ฉ ๋Œ€์‹  ๋ณ€์ˆ˜-์ƒ์œ„๊ฐ์ฒด์™€์˜ ์—ฐ๊ฒฐ )

  • ์ปดํฌ๋„ŒํŠธํ™” ๋ฐ api ์—ฐ๋™ ์„ค๊ณ„ (WeeklySummary)

  • ํ˜„์žฌ ์ด์Šˆ:

    • Walk ๊ด€๋ จ: PetCalendar, WalkTimer, TodayWalk ๋“ฑ์˜ ์ž‘์—…์ด ๋ฏธ์™„์„ฑ ์ƒํƒœ.

      • expo ๊ด€๋ จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋Œ€์ฒด๋กœ ์ธํ•œ ์ถ”๊ฐ€ ์ด์Šˆ (cli ํ™˜๊ฒฝ๊ณผ์˜ ํ†ตํ•ฉ์„ ์œ„ํ•ด)

      • ํ•ฉ์ณ์•ผํ•  ์ฝ”๋“œ๊ฐ€, ๋ชจ๋“  UI์š”์†Œ์— ๋Œ€ํ•ด ์ „๋ถ€ ๊ฐœ๋ณ„์ ์ธ ์Šคํƒ€์ผ์ด ์ ์šฉ๋˜์–ด ์žˆ์Œ

        • ๊ฐ ์Šคํฌ๋ฆฐ์—์„œ, ์ปดํฌ๋„ŒํŠธ์˜ ๋ชจ๋“  ๋ถ€๋ถ„์— ๊ณ ์œ ํ•œ ์Šคํƒ€์ผ๋ง์ด ์ ์šฉ๋œ ์ƒํƒœ. (+ ์Šคํฌ๋ฆฐ ๋ณ„๋กœ ์Šคํƒ€์ผ์‹œํŠธ ์กด์žฌ)

        • ํ˜„์žฌ ์Šคํƒ€์ผ์˜ ์ ์šฉ์„ ์œ„ํ•ด, ์Šคํƒ€์ผ ์žฌ์„ค๊ณ„ ๋ฐ ์ฝ”๋“œ ์ƒˆ๋กœ ์ž‘์„ฑ ์ค‘.

        • ์ฝ”๋“œ ์žฌ๊ตฌ์กฐํ™” ์‹œ, ๋ฐ์ดํ„ฐ ๋ฐ api์™€ ์—ฐ๊ฒฐ์„ ๊ณ ๋ คํ•˜์—ฌ api ๊ด€๋ จ ์ฝ”๋“œ ์ถ”๊ฐ€ ์ค‘.

UTILS

  • ์ƒ์ˆ˜ ๋ฐ ์„ค์ • ํŒŒ์ผ ์œ„์น˜: ๋ชจ๋“  ์ƒ์ˆ˜๋Š” utils/constants/์—์„œ ๊ด€๋ฆฌ.

  • ํƒ€์ž… ๊ด€๋ฆฌ: utils/constants/types.ts์—์„œ ํ”„๋กœ์ ํŠธ ์ „๋ฐ˜์—์„œ ์‚ฌ์šฉํ•  ํƒ€์ž…์„ ์ •์˜.

    import { SomeType } from '@types';

์ฃผ์š” ํŒŒ์ผ

  • config.ts: API ๊ธฐ๋ณธ URL ๋“ฑ ์ฃผ์š” ์„ค์ •๊ฐ’ ์ €์žฅ.
  • types.ts: ํƒ€์ž… ์ •์˜ ๋ชจ์Œ.

์ถ”๊ฐ€ ๊ณต์ง€ ๋ฐ ์œ ์˜์‚ฌํ•ญ

  • Tailwind ๊ฒฝ๋กœ: ํŒŒ์ผ ๊ฒฝ๋กœ ๋ณ€๋™์— ์Šคํƒ€์ผ๋ง ์†์„ฑ์ด ํฐ ์˜ํ–ฅ์„ ๋ฐ›๋Š”๋‹ค๋ฉด, tailwind.config.js์˜ src ๊ฒฝ๋กœ๋ฅผ ๊ฒ€ํ† ํ•ด๋ณผ ๊ฒƒ.

  • API ํ…Œ์ŠคํŠธ ํ•„์ˆ˜: ์„œ๋ฒ„ API ์Šคํ‚ค๋งˆ์— ๋งž์ถ˜ ์ฝ”๋“œ๊ฐ€ ์ •ํ™•ํ•˜๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ํ…Œ์ŠคํŠธ๊ฐ€ ํ•„์š”ํ•จ.

    • ํ˜„์žฌ ์ž‘์„ฑ๋œ api ํ•จ์ˆ˜ ์ด์šฉ ์‹œ, dummyJson์˜ ์Šคํ‚ค๋งˆ ํƒ€์ž…๊ณผ ํ•จ์ˆ˜์˜ apiํ˜ธ์ถœ์„ ๊ฒ€ํ† ํ•ด ๋ณผ ๊ฒƒ

    • ํ™”๋ฉด๊ณผ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ถ„๋ฆฌ๋œ ๊ตฌ์กฐ๋ฅผ ์œ„ํ•ด, 1์ฐจ์ ์œผ๋กœ jsonํŒŒ์ผ ์ž์ฒด๋ฅผ ๋ฆฌํ„ดํ•˜๋„๋ก ํ•˜์—ฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅ.

      import Pet1 from '@data/pets1.json';
      
      // ๋ฐ˜๋ ค๋™๋ฌผ ์ •๋ณด ์กฐํšŒ
      export const fetchPetInfo = async (petId: number) => {
         return Pet1;
      };
  • ๊ฒฝ๋กœ alias ์‚ฌ์šฉ: ํ”„๋กœ์ ํŠธ ๊ฒฝ๋กœ ๊ด€๋ฆฌ๋ฅผ ์‰ฝ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด alias๋ฅผ ์ ๊ทน์ ์œผ๋กœ ํ™œ์šฉ ์ค‘.

    • Alias ์„ค์ • ๋ชฉ๋ก

      1. @api: ./src/api
      2. @data: ./src/api/data
      3. @components: ./src/components
      4. @commons : ./src/components/commons
      5. @screens: ./src/screens
      6. @constants: ./src/utils/constants
      7. @types: ./src/utils/constants/types.ts
      8. @image: ./src/assets/image

      ์ถ”๊ฐ€๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์œ„ ํ˜•์‹์— ๋งž๊ฒŒ alias๋ฅผ ๊ณ„์† ํ™•์žฅ ๊ฐ€๋Šฅ.

    • babel.config.js์™€ tsconfig.json์˜ ๋ชฉ๋ก์„ ์—…๋ฐ์ดํŠธํ•˜์—ฌ, ๊ฐ„ํŽธ๊ฒฝ๋กœ ์ •์˜ ๋ฐ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors