v2_programspec_collection - 100-hours-a-week/KTB4-8th-BE GitHub Wiki

ํ”„๋กœ๊ทธ๋žจ ์ •์˜์„œ - ๋ณด๊ด€ํ•จ ์ƒ์„ธ ํŽ˜์ด์ง€

์žฅ์†Œ ํƒญ

ํ•„์š”ํ•œ API

  • ๋ณด๊ด€ํ•œ ์žฅ์†Œ ๋ชฉ๋ก ์กฐํšŒ API(GET /api/v2/member/saved-journey?type=place&filterBy=location)

    • type: ์žฅ์†Œ, ์ด๋ฒคํŠธ, ์ฝ”์Šค (String)

    • filterBy: ํ•„ํ„ฐ๋ง ๊ธฐ์ค€ (String)

      • ์ง€์—ญ ๊ธฐ๋ฐ˜ ํ•„ํ„ฐ๋ง๋งŒ ์ œ๊ณตํ•˜๋ฏ€๋กœ "location"๋งŒ ์œ ํšจ

์‘๋‹ต ๋ณธ๋ฌธ์œผ๋กœ ํ•„์š”ํ•œ ๊ฐ’:

๊ฐ ์žฅ์†Œ์˜

  • ๋ณด๊ด€ํ•จ ID (๋งํฌ ์ œ๊ณต์šฉ)
  • ์ด๋ฆ„
  • ์นดํ…Œ๊ณ ๋ฆฌ (์นดํŽ˜ ๋“ฑ)
  • ์ง€์—ญ (์‹œ+๊ตฌ)
  • ์„ค๋ช…
{
  "places": {
    {
      "place_id": Integer,
      "name": String,
      "category": String,
      "description": String,
      "address_sg": String (์‹œ + ๊ตฌ)
    },
    ...
  }
}

์˜๋ฌธ์ 

  • '์ „์ฒด ์œ ํ˜•'์˜ ์ •๋ ฌ ๊ธฐ์ค€์€ ํ™”๋ฉด ์ •์˜์„œ์— ์˜ํ•˜๋ฉด ๋”๋ฏธ ๊ฐ’์ž„. ๋”๋ฏธ ๊ฐ’์ด ๋งž๋Š”์ง€?
  • ์žฅ์†Œ ์ •๋ ฌ์˜ ๊ธฐ์ค€์ด ๋  ์žฅ์†Œ๋Š” ํ™”๋ฉด ์ •์˜์„œ์— ๋‚˜์˜จ ์˜ˆ์‹œ์ฒ˜๋Ÿผ ์„œ์šธ, ๊ฒฝ๊ธฐ, ... ์ธ์ง€, ์•„๋‹ˆ๋ฉด ํ™”๋ฉด ์ •์˜์„œ์— ๊ธฐ์ˆ ๋œ ๋Œ€๋กœ ๋ชจ๋“  ์‹œ, ๋„๋ฅผ ํฌํ•จํ•˜๋Š” ์ง€? (ํ•ด๊ฒฐ)
    • ๋ชจ๋“  ๋„์™€ ํŠน๋ณ„์‹œ/๊ด‘์—ญ์‹œ๋กœ ์ œํ•œํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๊ฒฐ์ •๋จ (10-07)

์ด๋ฒคํŠธ ํƒญ

์ง€๋‚œ ์ด๋ฒคํŠธ ํƒญ์€ ์ด๋ฒคํŠธ ํƒญ์— ํ•ฉ๋ณ‘๋  ์˜ˆ์ •

ํ•„์š”ํ•œ API

  • ๋ณด๊ด€ํ•œ ์ด๋ฒคํŠธ ์กฐํšŒ API(GET /api/v2/member/saved-journey?type=event&enableEnded=true)

    • type: ์žฅ์†Œ, ์ด๋ฒคํŠธ, ์ฝ”์Šค (String)
    • enableEnded: ์ง€๋‚œ ์ด๋ฒคํŠธ๋ฅผ ํ‘œ์‹œํ•  ์ง€ ์—ฌ๋ถ€ (Boolean)

์‘๋‹ต ๋ณธ๋ฌธ์œผ๋กœ ํ•„์š”ํ•œ ๊ฐ’:

๊ฐ ์ด๋ฒคํŠธ์˜

  • ๋ณด๊ด€ํ•จ ID (๋งํฌ ์ œ๊ณต์šฉ)
  • ์ด๋ฆ„
  • ์นดํ…Œ๊ณ ๋ฆฌ
  • ์„ค๋ช…
  • ์‹œ์ž‘์ผ (๋ฏธ์ • ๊ฐ€๋Šฅ)
  • ๋งˆ๊ฐ์ผ (๋ฏธ์ • ๊ฐ€๋Šฅ)
  • ์ง„ํ–‰๋  ์žฅ์†Œ์˜ ์ฃผ์†Œ (์‹œ+๊ตฌ)
{
  "events": {
    {
      "event_id": Integer,
      "name": String,
      "category": String,
      "description": String,
      "start_date": Date("yyyy-mm-dd", Nullable),
      "end_date": Date("yyyy-mm-dd", Nullable),
      "place" : {
        "name": String,
        "address_sg": String(์‹œ + ๊ตฌ)
      }
    },
    ...
  }
}

์ •๋ณด

์ด๋ฒคํŠธ๋Š” ์‹œ์ž‘์ผ, ์ข…๋ฃŒ์ผ์„ ๊ฐ€์ ธ์•ผ ํ•˜๋ฉฐ, Null์ด ๊ฐ€๋Šฅํ•จ

์˜๋ฌธ์ 

  • ์ง„ํ–‰๋  ์žฅ์†Œ๋ผ๋Š” ๊ฒŒ ๋งค์šฐ ์• ๋งคํ•จ (ํ•ด๊ฒฐ)
  • ์ข€ ๋” ๋ช…ํ™•ํ•œ ๊ธฐ์ค€์„ ์ •ํ•˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Œ (ํ•ด๊ฒฐ)
  • ์˜์ƒ ๋ถ„์„ API์—์„œ AI ์„œ๋ฒ„๊ฐ€ ์žฅ์†Œ๋ช… ์ •๋„๋Š” ์ถ”๊ฐ€๋กœ ์ค˜์•ผ ํ•  ๋“ฏ. (ํ•ด๊ฒฐ)
    • ํ•„๋“œ์—์„œ ๊ฑด๋ฌผ๋ช… ์ œ๊ฑฐ(10-07)

์ฝ”์Šค ํƒญ

ํ•„์š”ํ•œ API

  • ๋ณด๊ด€ํ•œ ์ฝ”์Šค ์กฐํšŒ API(GET /api/v2/member/saved-journey?type=course&filterBy=location)

    • type: ์žฅ์†Œ, ์ด๋ฒคํŠธ, ์ฝ”์Šค (String)

    • filterBy: ํ•„ํ„ฐ๋ง ๊ธฐ์ค€ (String)

      • ์ง€์—ญ ๊ธฐ๋ฐ˜ ํ•„ํ„ฐ๋ง๋งŒ ์ œ๊ณตํ•˜๋ฏ€๋กœ "location"๋งŒ ์œ ํšจ

์‘๋‹ต ๋ณธ๋ฌธ์œผ๋กœ ํ•„์š”ํ•œ ๊ฐ’:

๊ฐ ์ฝ”์Šค์˜

  • ๋ณด๊ด€ํ•จ ID (๋งํฌ ์ œ๊ณต์šฉ)
  • ์ด๋ฆ„
  • ์ง€์—ญ(์‹œ + ๊ตฌ)
  • ๊ตฌ์„ฑ ์žฅ์†Œ/์ด๋ฒคํŠธ ์ˆ˜
  • ์ด ์†Œ์š” ์‹œ๊ฐ„ (์‹œ๊ฐ„ ๋‹จ์œ„)
  • ์ €์žฅ์ผ
  • ๊ตฌ์„ฑ ์žฅ์†Œ/์ด๋ฒคํŠธ
    • ์ˆœ๋ฒˆ
    • ์ด๋ฆ„
    • ์นดํ…Œ๊ณ ๋ฆฌ (์นดํŽ˜, ์ด๋ฒคํŠธ, ๋“ฑ...)
    • ์ข…๋ฃŒ ์—ฌ๋ถ€ (์ด๋ฒคํŠธ์˜ ๊ฒฝ์šฐ)
{
  "courses": {
    {
      "course_id": Integer,
      "name": String,
      "address_sg": String (์‹œ + ๊ตฌ),
      "duration_hours": Integer,
      "save_date": Date("YYYY-MM-DD"),
      "stops": {
        "count": Integer,
        "items": {
          {
            "sequence": Integer,
            "stop_id": Integer,
            "name": String,
            "type": String,
            "category": String,
            "start_date": Date("YYYY-MM-DD", Nullable(type="event"๊ฐ€ ์•„๋‹ ์‹œ)),
            "end_date": Date("YYYY-MM-DD", Nullable(type="event"๊ฐ€ ์•„๋‹ ์‹œ))
          },
          ...
        }
      } 
    },
    ...
  }
}

์ •๋ณด

์ฝ”์Šค ํ›„๋ณด์— ์šด์˜ ๊ธฐ๊ฐ„์ด null์ธ ์ด๋ฒคํŠธ๋“ค์€ ํฌํ•จ๋  ์ˆ˜ ์—†๋‹ค

์˜๋ฌธ์ 

์žฅ์†Œ ํƒญ๊ณผ ๋™์ผ

์˜ˆ์™ธ ์ฒ˜๋ฆฌ

  • ๊ฐ ์กฐํšŒ ์š”์ฒญ API๋Š” ์„ ํƒํ•œ ์กฐ๊ฑด์— ํ•ด๋‹นํ•  ํ•ญ๋ชฉ์ด ์—†์„ ์‹œ ๋นˆ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•จ
  • ๊ฐ ์กฐํšŒ ์š”์ฒญ API๋Š” ํƒ€์ž„์•„์›ƒ ์˜ˆ์™ธ ์‹œ ์‘๋‹ต ๊ฒฐ๊ณผ๋ฅผ ๊ตฌํ˜„๋˜์–ด์•ผ ํ•จ