/wanted-pre-onboarding-challenge-fe-1

๐Ÿ”ฅ์›ํ‹ฐ๋“œ ํ”„๋ฆฌ์˜จ๋ณด๋”ฉ ์ฑŒ๋ฆฐ์ง€ ํ”„๋ก ํŠธ์—”๋“œ ์ฝ”์Šค

Primary LanguageTypeScript

๐Ÿ”ฅTODO

Assignment 1 - Login / SignUp

  • /auth ๊ฒฝ๋กœ์— ๋กœ๊ทธ์ธ / ํšŒ์›๊ฐ€์ž… ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•ฉ๋‹ˆ๋‹ค
    • ๋กœ๊ทธ์ธ, ํšŒ์›๊ฐ€์ž…์„ ๋ณ„๋„์˜ ๊ฒฝ๋กœ๋กœ ๋ถ„๋ฆฌํ•ด๋„ ๋ฌด๋ฐฉํ•ฉ๋‹ˆ๋‹ค
    • ์ตœ์†Œํ•œ ์ด๋ฉ”์ผ, ๋น„๋ฐ€๋ฒˆํ˜ธ input, ์ œ์ถœ button์„ ๊ฐ–๋„๋ก ๊ตฌ์„ฑํ•ด์ฃผ์„ธ์š”
  • ์ด๋ฉ”์ผ๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ์˜ ์œ ํšจ์„ฑ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค
    • ์ด๋ฉ”์ผ ์กฐ๊ฑด : ์ตœ์†Œ @, . ํฌํ•จ
    • ๋น„๋ฐ€๋ฒˆํ˜ธ ์กฐ๊ฑด : 8์ž ์ด์ƒ ์ž…๋ ฅ
    • ์ด๋ฉ”์ผ๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ๋ชจ๋‘ ์ž…๋ ฅ๋˜์–ด ์žˆ๊ณ , ์กฐ๊ฑด์„ ๋งŒ์กฑํ•ด์•ผ ์ œ์ถœ ๋ฒ„ํŠผ์ด ํ™œ์„ฑํ™” ๋˜๋„๋ก ํ•ด์ฃผ์„ธ์š”
  • ๋กœ๊ทธ์ธ API๋ฅผ ํ˜ธ์ถœํ•˜๊ณ , ์˜ฌ๋ฐ”๋ฅธ ์‘๋‹ต์„ ๋ฐ›์•˜์„ ๋•Œ ๋ฃจํŠธ ๊ฒฝ๋กœ๋กœ ์ด๋™์‹œ์ผœ์ฃผ์„ธ์š”
    • ์‘๋‹ต์œผ๋กœ ๋ฐ›์€ ํ† ํฐ์€ ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€์— ์ €์žฅํ•ด์ฃผ์„ธ์š”
    • ๋‹ค์Œ ๋ฒˆ์— ๋กœ๊ทธ์ธ ์‹œ ํ† ํฐ์ด ์กด์žฌํ•œ๋‹ค๋ฉด ๋ฃจํŠธ ๊ฒฝ๋กœ๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ์‹œ์ผœ์ฃผ์„ธ์š”
    • ์–ด๋–ค ๊ฒฝ์šฐ๋“  ํ† ํฐ์ด ์œ ํšจํ•˜์ง€ ์•Š๋‹ค๋ฉด ์‚ฌ์šฉ์ž์—๊ฒŒ ์•Œ๋ฆฌ๊ณ  ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ์‹œ์ผœ์ฃผ์„ธ์š”

Assignment 2 - Todo List

  • Todo List API๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ Todo List CRUD ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด์ฃผ์„ธ์š”

    • ๋ชฉ๋ก / ์ƒ์„ธ ์˜์—ญ์œผ๋กœ ๋‚˜๋ˆ„์–ด ๊ตฌํ˜„ํ•ด์ฃผ์„ธ์š”
    • Todo ๋ชฉ๋ก์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • Todo ์ถ”๊ฐ€ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ํ•  ์ผ์ด ์ถ”๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
    • Todo ์ˆ˜์ • ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ์ˆ˜์ • ๋ชจ๋“œ๋ฅผ ํ™œ์„ฑํ™”ํ•˜๊ณ , ์ˆ˜์ • ๋‚ด์šฉ์„ ์ œ์ถœํ•˜๊ฑฐ๋‚˜ ์ทจ์†Œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • Todo ์‚ญ์ œ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ํ•ด๋‹น Todo๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ•œ ํ™”๋ฉด ๋‚ด์—์„œ Todo List์™€ ๊ฐœ๋ณ„ Todo์˜ ์ƒ์„ธ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ์„ธ์š”.

    • ์ƒˆ๋กœ๊ณ ์นจ์„ ํ–ˆ์„ ๋•Œ ํ˜„์žฌ ์ƒํƒœ๊ฐ€ ์œ ์ง€๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • ๊ฐœ๋ณ„ Todo๋ฅผ ์กฐํšŒ ์ˆœ์„œ์— ๋”ฐ๋ผ ํŽ˜์ด์ง€ ๋’ค๋กœ๊ฐ€๊ธฐ๋ฅผ ํ†ตํ•˜์—ฌ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ์„ธ์š”.
  • ํ•œ ํŽ˜์ด์ง€ ๋‚ด์—์„œ ์ƒˆ๋กœ๊ณ ์นจ ์—†์ด ๋ฐ์ดํ„ฐ๊ฐ€ ์ •ํ•ฉ์„ฑ์„ ๊ฐ–์ถ”๋„๋ก ๊ตฌํ˜„ํ•ด์ฃผ์„ธ์š”

    • ์ˆ˜์ •๋˜๋Š” Todo์˜ ๋‚ด์šฉ์ด ๋ชฉ๋ก์—์„œ๋„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ˜์˜๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค

๊ณผ์ œ ์ฐธ๊ณ  ์‚ฌํ•ญ

  1. ๋กœ์ปฌ ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ–ˆ์„ ๋•Œ ์ƒ์„ฑ๋˜๋Š” db/db.json์ด DB ์—ญํ• ์„ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ํŒŒ์ผ์„ ์‚ญ์ œํ•˜๋ฉด DB๋Š” ์ดˆ๊ธฐํ™” ๋ฉ๋‹ˆ๋‹ค.

  2. ๋กœ๊ทธ์ธ / ํšŒ์› ๊ฐ€์ž… ๊ธฐ๋Šฅ์€ ์œ ์ €๋ฅผ DB์— ์ถ”๊ฐ€ํ•˜๊ณ  JWT ํ† ํฐ์„ ์‘๋‹ต์œผ๋กœ ๋Œ๋ ค์ค„ ๋ฟ, ์‹ค์ œ ์œ ์ €๋ณ„๋กœ Todo ๋ชฉ๋ก์„ ๊ด€๊ณ„ ์ง€์–ด ๊ด€๋ฆฌํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. (๋ชจ๋“  ์œ ์ €๊ฐ€ ํ•˜๋‚˜์˜ Todo๋ฅผ ๊ฐ€์ง)

  3. ๋กœ๊ทธ์•„์›ƒ์€ ํด๋ผ์ด์–ธํŠธ ๋‹จ์—์„œ localStorage์— ์ €์žฅ๋œ token์„ ์‚ญ์ œํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ฐ„๋‹จํžˆ ๊ตฌํ˜„ํ•ด์ฃผ์„ธ์š”.

2-1) API ์‹คํ–‰

> yarn

> yarn start # http://localhost:8080

2-2) API ์ŠคํŽ™

1-3) Todos

getTodos

URL

  • GET /todos
  • Headers
    • Authorization: login token

์‘๋‹ต ์˜ˆ์‹œ

{
  "data": [
    {
      "title": "hi",
      "content": "hello",
      "id": "z3FGrcRL55qDCFnP4KRtn",
      "createdAt": "2022-07-24T14:15:55.537Z",
      "updatedAt": "2022-07-24T14:15:55.537Z"
    },
    {
      "title": "hi",
      "content": "hello",
      "id": "z3FGrcRL55qDCFnP4KRtn",
      "createdAt": "2022-07-24T14:15:55.537Z",
      "updatedAt": "2022-07-24T14:15:55.537Z"
    }
  ]
}

getTodoById

URL

  • GET /todos/:id
  • Headers
    • Authorization: login token

์‘๋‹ต ์˜ˆ์‹œ

{
  "data": {
    "title": "hi",
    "content": "hello",
    "id": "z3FGrcRL55qDCFnP4KRtn",
    "createdAt": "2022-07-24T14:15:55.537Z",
    "updatedAt": "2022-07-24T14:15:55.537Z"
  }
}

createTodo

URL

  • POST /todos
  • Parameter
    • title: string
    • content: string
  • Headers
    • Authorization: login token

์‘๋‹ต ์˜ˆ์‹œ

{
  "data": {
    "title": "hi",
    "content": "hello",
    "id": "z3FGrcRL55qDCFnP4KRtn",
    "createdAt": "2022-07-24T14:15:55.537Z",
    "updatedAt": "2022-07-24T14:15:55.537Z"
  }
}

updateTodo

URL

  • PUT /todos/:id
  • Parameter
    • title: string
    • content: string
  • Headers
    • Authorization: login token

์‘๋‹ต ์˜ˆ์‹œ

{
  "data": {
    "title": "์ œ๋ชฉ ๋ณ€๊ฒฝ",
    "content": "๋‚ด์šฉ ๋ณ€๊ฒฝ",
    "id": "RMfi3XyOKoI5zd0A_bsPL",
    "createdAt": "2022-07-24T14:25:48.627Z",
    "updatedAt": "2022-07-24T14:25:48.627Z"
  }
}

deleteTodo

URL

  • DELETE /todos/:id
  • Headers
    • Authorization: login token

์‘๋‹ต ์˜ˆ์‹œ

{
  "data": null
}

1-4) Auth

login

URL

  • POST /users/login
  • Parameter
    • email: string
    • password: string

์‘๋‹ต ์˜ˆ์‹œ

{
  "message": "์„ฑ๊ณต์ ์œผ๋กœ ๋กœ๊ทธ์ธ ํ–ˆ์Šต๋‹ˆ๋‹ค",
  "token": "eyJhbGciOiJIUzI1NiJ9.YXNkZkBhc2RmYXNkZi5jb20.h-oLZnV0pCeNKa_AM3ilQzerD2Uj7bKUn1xDft5DzOk"
}

signUp

URL

  • POST /users/create
  • Parameter
    • email: string
    • password: string

์‘๋‹ต ์˜ˆ์‹œ

{
  "message": "๊ณ„์ •์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค",
  "token": "eyJhbGciOiJIUzI1NiJ9.YXNkZkBhc2RmYXNkZi5jb20.h-oLZnV0pCeNKa_AM3ilQzerD2Uj7bKUn1xDft5DzOk"
}