Skip to content

KwangminNam/look-my-dog

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Project name (ํ”„๋กœ์ ํŠธ ๋ช…)

Deployments

  • Vercel

Image ๋ฐ Icon ์ถœ์ฒ˜

Tech skills(์‚ฌ์šฉ ๊ธฐ์ˆ )

  • NextJS 13
  • Nextjs Auth
  • TypeScript
  • Prisma Client
  • mongoDB
  • Storybook

์ƒํƒœ๊ด€๋ฆฌ (State mangement)

  • Zustand

Style

  • Tailwind.css

Library

  • axios
  • react-hook-from
  • react-hot-toatst
  • query-string
  • react-select
  • react-spinners
  • zod
  • swiper slide
  • lottie json

Work Flow

  • React-hook-form ๋ผ์ด๋ธŒ๋Ÿฌ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•˜์—ฌ http ํ†ต์‹ 
  • ์„œ๋ฒ„์‚ฌ์ด๋“œ ๋ Œ๋”๋ง์„ Prisma Client๋ฅผ ์ด์šฉํ•ด ํด๋ผ์ด์–ธํŠธ์—์„œ fetch API ๊ฐ€ ์•„๋‹Œ ์„œ๋ฒ„์™€ ํ•จ๊ป˜ ๋ฐ”๋กœ ํ†ต์‹ 
  • Next Auth ๋กœ SNS Login ๊ตฌํ˜„. (๊ตฌ๊ธ€,๊นƒํ—ˆ๋ธŒ,๋„ค์ด๋ฒ„)
  • Query-string ์„ ์ด์šฉํ•ด url ํŒŒ๋ผ๋ฏธํ„ฐ ์ปจํŠธ๋กค
  • React hot toast๋กœ http ํ†ต์‹  ์‹œ success , fail(reject) ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ํ‘œ์‹œ

๊ธฐ์กด ๋ฆฌ์•กํŠธ์ฒ˜๋Ÿผ ๋นˆhtml ํƒœ๊ทธ์— ๋ฐ์ดํ„ฐ๋ฅผ fetch ํ•ด์™€์„œ ์“ฐ๋Š” ๋ฐฉ์‹์ด ์•„๋‹Œ ,Prisma Client๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ง์ ‘ ํ†ต์‹  ํ•˜๊ธฐ๋•Œ๋ฌธ์— ์„œ๋ฒ„์‚ฌ์ด๋“œ ๋ Œ๋”๋ง์„ ๊ตฌํ˜„ ํ•  ์ˆ˜ ์žˆ๊ณ , ํด๋ผ์ด์–ธํŠธ์‚ฌ์ด๋“œ๋ Œ๋”๋ง์˜ ๋‹จ์ ์ธ SEO๋‚˜ , ์ดˆ๊ธฐ ๋กœ๋”ฉ์†๋„๋ฅผ ๊ฐœ์„  ํ•  ์ˆ˜ ์žˆ์Œ.

๊ณต๊ณต๋ฐ์ดํ„ฐ ์œ ๊ธฐ๊ฒฌ API ํ™œ์šฉ

Page & Features

ex: page.tsx -> ListClient.tsx . ์„œ๋ฒ„์ปดํฌ๋„ŒํŠธ์—์„œ ์„œ๋ฒ„์•„์‚ฌ์ด๋“œ๋ Œ๋”๋ง ํ›„ ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ๋กœ ๋ฐ์ดํ„ฐ props๋กœ ์ „๋‹ฌ

/mypost
/favorite
/listing/[$listingId]
/edit/[$listingId]
/lost
  • CREATE ์ข‹์•„์š” ๊ธฐ๋Šฅ ๊ฒŒ์‹œ๊ธ€ ํฌ์ŠคํŠธ
  • READ ์œ ์ € ๋ณธ์ธ์ด ๋“ฑ๋กํ•œ ๊ฒŒ์‹œ๊ธ€ /mypost ์œ ์ €๊ฐ€ ์ข‹์•„์š” ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅธ ๊ฒŒ์‹œ๊ธ€ /favorite ์œ ๊ธฐ๊ฒฌ ๊ฐ•์•„์ง€ ๋ณด๊ธฐ /lost
  • DELETE ์œ ์ € ๋ณธ์ธ์ด ๋“ฑ๋กํ•œ ๊ฒŒ์‹œ๊ธ€ /mypost -> DELETE ์œ ์ € ๋ณธ์ธ์ด "์ข‹์•„์š”" ๊ฒŒ์‹œ๊ธ€ -> ์ข‹์•„์š” ์ทจ์†Œ -> DELETE
  • UPDATE (edit) ์œ ์ € ๋ณธ์ธ์ด ๋“ฑ๋กํ•œ ๊ฒŒ์‹œ๊ธ€ ์ˆ˜์ • /mypost -> UPDATE
 * action:
   1.์„œ๋ฒ„์‚ฌ์ด๋“œ ๋ Œ๋”๋ง์„ ํ•˜๊ธฐ์œ„ํ•œ ํด๋” Prisma Client๋กœ ์„œ๋ฒ„์™€ ๋‹ค์ด๋ ‰ํŠธ๋กœ ํ†ต์‹ ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ–๊ณ ์˜ด 
   2.๋ฐ์ดํ„ฐ๋ฅผ ๋ Œ๋”๋ง ํ•  pageํŒŒ์ผ์— action์— ์„ ์–ธ ํ•ด๋†“์€ ๋ฐ์ดํ„ฐ ์š”์ฒญ์„ ๊ฐ–๊ณ ์™€์„œ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ(ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ)๋กœ ์ „๋‹ฌ
    ์„œ๋ฒ„์‚ฌ์ด๋“œ๋ Œ๋”๋ง๊ณผ ํด๋ผ์ด์–ธํŠธ์‚ฌ์ด๋“œ (hydrate)๋ Œ๋”๋ง์„ ์‹œํ‚ด.

   * getDoglisting
    - qs ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•˜์—ฌ url ํŒŒ๋ผ๋ฏธํ„ฐ์— ์•„๋ฌด๋Ÿฐ ๊ฐ’์ด ์—†์œผ๋ฉด ์ „์ฒด ๋ฆฌ์ŠคํŠธ ๋ฐ˜ํ™˜ , query์— ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ๋‹ด๊ฒจ์žˆ๋‹ค๋ฉด ๊ฐ’์ด ์ผ์น˜ํ•œ ๋ฆฌ์ŠคํŠธ ๋ Œ๋”๋ง
    Prisma query:findMany({query})
    const getDogList = await prisma.dogListing.findMany({
      where: query,
      orderBy: {
        createdAt: 'desc'
      }
    })


   * getListBtId
    -์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ์˜ parmas๊ฐ’์„ ์ธ์ž๋กœ ๋„ฃ์–ด์„œ ํ•œ๊ฐœ์˜ ๋ฆฌ์ŠคํŠธ ๋ Œ๋”๋ง
    Prisma query: findUnique()
     where:{
      id:listingId
      },
      include:{
        user:true,
      }

   * getFavoite
    -user์˜ ๊ฐ’์„ ๊ฐ–๊ณ ์™€์„œ favoriteIds๊ฐ€ ์กด์žฌํ•œ๋‹คํ•˜๋ฉด favoriteIds์˜ ๋ฆฌ์ŠคํŠธ ๋ Œ๋”๋ง
    Prisma query: findMany()
      where: {
        id: {
          in: [
            ...(currentUser.favoriteIds || [])
          ]
        }
      }


   * getLoggedInUser
    -getSession() ์œผ๋กœ user.email ๊ฐ’ ๋‹ด๊ฒจ์žˆ๋Š”์ง€ ์ฒดํฌ
    Prisma query: findUnique()
     where: {
        email: session.user.email as string
      }


   * getLostDogListing
    -์™ธ๋ถ€ ๊ณต๊ณต๋ฐ์ดํ„ฐ API HTTP GETํ˜ธ์ถœ
    axios.get(process.env.LOST_DOG_API_URL)
   


 * API:
  http api ๋“ค์„ ์„ ์–ธํ•ด๋†“์Œ. ์—ฌ๊ธฐ์„œ ๋˜ํ•œ prisma client๋ฅผ ์ด์šฉํ•ด์„œ Resopnse๋ฅผ ์ œ๊ณตํ•ด์คŒ.
  -* auth:
    Nextjs์˜ login auth ๊ด€๋ฆฌ . provider์—์„œ sns ๋กœ๊ทธ์ธ ๊ด€๋ฆฌ.
 * hooks:
  Zustand๋ฅผ ์ด์šฉํ•ด Modal์˜ ์ƒํƒœ๊ด€๋ฆฌ (on , off , action on/off)๋ฅผ ๊ด€๋ฆฌํ•จ.
 * Components:
   DogListCard
   Modal
   Input
   Button
   Validation
 * Sever component , Client component ๊ตฌ๋ถ„   
 * ๋™์ ๋ผ์šฐํŒ… listing/[listingId]
 * ์„œ๋ฒ„์ปดํฌ๋„ŒํŠธ์˜ default props๋กœ params์˜ ๊ฐ’์„ ๊ฐ–๊ณ  ์˜ฌ ์ˆ˜์žˆ์Œ.

TO DO

  • ๊ฐ•์•„์ง€ ์‚ฌ์ง„ ์—…๋กœ๋“œ 2์žฅ ์ด์ƒ
  • ๋Œ“๊ธ€๊ธฐ๋Šฅ
  • ์ข‹์•„์š” ๊ฐฏ์ˆ˜ ํ‘œ์‹œ

About

๐Ÿถ Post your lovely puppy in LMD. ๐Ÿถ

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages