Skip to content

SSD117/SSD-Back-End

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

31 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

SSD-Back-End

๋กœ์ปฌ ์‹คํ–‰

.env ํŒŒ์ผ ๋งŒ๋“ค๊ณ  ์‹คํ–‰

PORT=3001
NODE_ENV=dev
COOKIE_SECRET=secret
DB_HOST=localhost
DB_PORT=3307
DB_USER=root
DB_PASSWORD=1234
DB_NAME=mydb
MAP_API_KEY=YOUR_GOOGLE_MAP_API_KEY
AI_SERVER_URL=http://localhost:8000

๋„์ปค ์‹คํ–‰

docker compose up

API ๋ช…์„ธ์„œ


๐Ÿšจ Local Server URL (Server Host) ๐Ÿšจ

http://127.0.0.1:3001

๐ŸŒธ Overview

HTTP METHOD End Point Description ๊ตฌํ˜„ ์—ฌ๋ถ€
GET /user ํšŒ์› ์ •๋ณด ์กฐํšŒ O
PATCH /user ํšŒ์›์ •๋ณด ์ˆ˜์ • O
DELETE /user ํšŒ์›์‚ญ์ œ O
GET /auth/login ๋กœ๊ทธ์ธ O
GET /auth/logout ๋กœ๊ทธ์•„์›ƒ O
POST /auth/register ํšŒ์›๊ฐ€์ž… O
GET /sport ์Šคํฌ์ธ  ๊ฐ•์ขŒ ์ด์šฉ๊ถŒ ์ •๋ณด ์กฐํšŒ O
GET /sport/detail/:sport_id ์Šคํฌ์ธ  ๊ฐ•์ขŒ ์ด์šฉ๊ถŒ ์ •๋ณด ์ƒ์„ธ ์กฐํšŒ O
GET /sport/ai AI ์ถ”์ฒœ ์šด๋™ ๊ฐ€์ ธ์˜ค๊ธฐ O
POST /sport/ai AI ์„ค๋ฌธ ์กฐ์‚ฌ O
GET /class ๋‚ด๊ฐ€ ๋“ฑ๋กํ•œ ์Šคํฌ์ธ  ๊ฐ•์ขŒ ์กฐํšŒ O
POST /class/:class_id ์Šคํฌ์ธ  ๊ฐ•์ขŒ ๋“ฑ๋ก O
DELETE /class/:class_id ์Šคํฌ์ธ  ๊ฐ•์ขŒ ๋“ฑ๋ก ์ทจ์†Œ O
GET /clsss/bookmark ์Šคํฌ์ธ  ๊ฐ•์ขŒ ์ฆ๊ฒจ์ฐพ๊ธฐ ์กฐํšŒ O
POST /class/bookmark/:class_id ์Šคํฌ์ธ  ๊ฐ•์ขŒ ์ฆ๊ฒจ์ฐพ๊ธฐ ๋“ฑ๋ก O
DELETE /class/bookmark/:class_id ์Šคํฌ์ธ  ๊ฐ•์ขŒ ์ฆ๊ฒจ์ฐพ๊ธฐ ์ทจ์†Œ O

ํšŒ์› ์ •๋ณด ๊ฐ€์ ธ์˜ค๊ธฐ (GET /user)

๐Ÿ“Œ Server Response

โœ… Success

{
	"user_id": 1,
  "email": "test@naver.com",
  "rating": "ํ”„๋ฆฌ๋ฏธ์—„",
  "name": "ํ…Œ์ŠคํŠธ",
  "age": 15,
  "gender": "M",
  "height": 160,
  "weight": 50,
  "school": "@@์ค‘ํ•™๊ต",
  "phone": "010-0000-0000",
  "balance": 100000,
	"latitude": "37.5125402000",
	"longitude": "127.1024458000"
}

โŒ Error

{
  "status": 400,
  "error": "์œ ์ €๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค"
}

ํšŒ์›์ •๋ณด ์ˆ˜์ • (PATCH /user)

๐Ÿ“Œ Request Body

{
  "weight": 60
}

๐Ÿ“Œ Server Response

โœ… Success

{
  "status": 200,
  "message": "์„ฑ๊ณต"
}

โŒ Error

{
  "status": 400,
  "error": "์œ ์ € ์ •๋ณด๊ฐ€ ์ž˜๋ชป ์ž…๋ ฅ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค"
}

ํšŒ์› ์‚ญ์ œ (DELETE /user)

๐Ÿ“Œ Server Response

โœ… Success

{
  "status": 200,
  "message": "์„ฑ๊ณต"
}

โŒ Error

{
  "status": 400,
  "error": "์œ ์ € ์ •๋ณด๊ฐ€ ์ž˜๋ชป ์ž…๋ ฅ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค"
}

๋กœ๊ทธ์ธ (GET /auth/login)

๐Ÿ“Œ Request Body

{
  "email": "test@naver.com",
  "password": "1234"
}

๐Ÿ“Œ Server Response

โœ… Success

{
  "status": 200,
  "message": "๋กœ๊ทธ์ธ ์„ฑ๊ณต"
}

โŒ Error

{
  "status": 400,
  "error": "๋กœ๊ทธ์ธ ์‹คํŒจ"
}

๋กœ๊ทธ์•„์›ƒ (GET /auth/logout)

๐Ÿ“Œ Server Response

โœ… Success

{
  "status": 200,
  "message": "์„ฑ๊ณต"
}

โŒ Error

{
  "status": 400,
  "error": "๋กœ๊ทธ์ธ๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค"
}

ํšŒ์›๊ฐ€์ž… (POST /auth/register)

์ปฌ๋Ÿผ ํ•œ๊ธ€๋ช… ์ปฌ๋Ÿผ ์˜๋ฌธ๋ช… ๋ฐ์ดํ„ฐ ํƒ€์ž… ํ•„์ˆ˜์—ฌ๋ถ€ ๋ฐ์ดํ„ฐ ์˜ˆ์‹œ
์ด๋ฉ”์ผ email string Y test@naver.com
๋น„๋ฐ€๋ฒˆํ˜ธ password string Y password
๋“ฑ๊ธ‰ rating string Y ์ผ๋ฐ˜
์ด๋ฆ„ name string Y ํ…Œ์ŠคํŠธ
๋‚˜์ด age number Y 15
์„ฑ๋ณ„ gender string Y M
ํ‚ค height number Y 160
๋ชธ๋ฌด๊ฒŒ weight number Y 50
ํ•™๊ต ์ด๋ฆ„ school string Y ##์ค‘ํ•™๊ต
์ „ํ™”๋ฒˆํ˜ธ phone string Y 010-0000-0000
๊ด€์‹ฌ ์šด๋™ exercies [string] N [โ€์ถ•๊ตฌโ€, โ€œ์ˆ˜์˜โ€]

๐Ÿ“Œ Request Body

{
  "email": "test@naver.com",
  "password": "password",
  "rating": "ํ”„๋ฆฌ๋ฏธ์—„",
  "name": "ํ…Œ์ŠคํŠธ",
  "age": 15,
  "gender": "M",
  "height": 160,
  "weight": 50,
  "school": "๊ด‘์šด์ค‘ํ•™๊ต",
  "phone": "010-0000-0000",
  "experience": "Y",
  "exercies": ["์ถ•๊ตฌ", "์ˆ˜์˜"]
}

๐Ÿ“Œ Server Response

โœ… Success

{
  "status": 200,
  "message": "ํšŒ์›๊ฐ€์ž… ์„ฑ๊ณต"
}

โŒ Error

{
  "status": 400,
  "error": "์œ ์ € ์ •๋ณด๊ฐ€ ์ž˜๋ชป ์ž…๋ ฅ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค" | "Google Map API ์—๋Ÿฌ"
}

์Šคํฌ์ธ  ๊ฐ•์ขŒ ์ด์šฉ๊ถŒ ์ •๋ณด ๊ฐ€์ ธ์˜ค๊ธฐ (GET /sport)

์ปฌ๋Ÿผ ํ•œ๊ธ€๋ช… ์ปฌ๋Ÿผ ์˜๋ฌธ๋ช… ๋ฐ์ดํ„ฐ ํƒ€์ž… ํ•„์ˆ˜์—ฌ๋ถ€ ๋ฐ์ดํ„ฐ ์˜ˆ์‹œ ์„ค๋ช…
ํŽ˜์ด์ง€ page number Y 1 1 ํŽ˜์ด์ง€๋‹น 10๊ฐœ์”ฉ ์กฐํšŒ
์šด๋™ exercises [string] N ์ˆ˜์˜, ๋ฐฐ๋“œ๋ฏผํ„ด ์šด๋™ ๋ฐ์ดํ„ฐ ํ•„ํ„ฐ๋ง
๊ฑฐ๋ฆฌ distance number N 1.2 ๊ธฐ๋ณธ๊ฐ’ 5km
์‹œ๊ฐ„๋Œ€ time string N ์˜ค์ „ ์˜ค์ „, ์˜คํ›„๋กœ ํ•„ํ„ฐ๋ง

๐Ÿ“Œ Request Body

{
  "page": 1,
  "exercises": ["์ˆ˜์˜", "๋ฐฐ๋“œ๋ฏผํ„ด"],
  "distance": 5,
  "time": "์˜ค์ „" 
}

๐Ÿ“Œ Server Response

โœ… Success

{
  "status": 200,
  "sports": [
	  {
		  "sport_id": 1,
		  "exercise": "์ˆ˜์˜",
		  "facility_name": "๊ฐ•๋‚จ์Šคํฌ์ธ ๋ฌธํ™”์„ผํ„ฐ์ˆ˜์˜์žฅ",
		  "address": "์„œ์šธํŠน๋ณ„์‹œ ๊ฐ•๋‚จ๊ตฌ ๋ฐค๊ณ ๊ฐœ๋กœ1๊ธธ 52 (์ˆ˜์„œ๋™)",
		  "distance": 2
		  "time": "09:30~10:20"
	  },
	  {
		  "sport_id": 2,
		  "exercise": "๋ฐฐ๋“œ๋ฏผํ„ด",
		  "facility_name": "๊ฐ•๋ถ์›ฐ๋น™์Šคํฌ์ธ ์„ผํ„ฐ",
		  "address": "์„œ์šธํŠน๋ณ„์‹œ ๊ฐ•๋ถ๊ตฌ ์˜คํ˜„๋กœ31๊ธธ 51 (๋ฒˆ๋™)",
		  "distance": 3
		  "time": "09:30~10:20",
	  },
	  ...
  ]
}

โŒ Error

{
  "status": 400,
  "error": "์Šคํฌ์ธ  ๊ฐ•์ขŒ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค"
}

ํŠน์ • ์Šคํฌ์ธ  ๊ฐ•์ขŒ ์ด์šฉ๊ถŒ ์ •๋ณด ์ƒ์„ธ ์กฐํšŒ (GET /sport/detail/:sport_id)

ํ•„ํ„ฐ๋ง ์˜ˆ์‹œ

์ปฌ๋Ÿผ ํ•œ๊ธ€๋ช… ์ปฌ๋Ÿผ ์˜๋ฌธ๋ช… ๋ฐ์ดํ„ฐ ํƒ€์ž… ํ•„์ˆ˜์—ฌ๋ถ€ ๋ฐ์ดํ„ฐ ์˜ˆ์‹œ ์„ค๋ช…
ํŽ˜์ด์ง€ page number Y 1 1 ํŽ˜์ด์ง€๋‹น 10๊ฐœ์”ฉ ์กฐํšŒ
์ˆ˜๊ฐ•๋ฃŒ price number N 36000
์š”์ผ day [string] N ํ™”, ๋ชฉ

๐Ÿ“Œ Request Body

{
	"page": 1
  "price": 36000
  "day": ["ํ™”", "๋ชฉ"] 
}

๐Ÿ“Œ Server Response

โœ… Success

{
	"status": 200,
	"sports": [
	  {
	  	"class_id": 1,
		  "facility_name": "๊ฐ•๋‚จ์Šคํฌ์ธ ๋ฌธํ™”์„ผํ„ฐ์ˆ˜์˜์žฅ",
		  "facility_type": "์ˆ˜์˜์žฅ",
		  "address": "์„œ์šธํŠน๋ณ„์‹œ ๊ฐ•๋‚จ๊ตฌ ๋ฐค๊ณ ๊ฐœ๋กœ1๊ธธ 52 (์ˆ˜์„œ๋™)",
		  "program_name": "์ฃผ๋ง๊ทธ๋ฃน๋ ˆ์ŠจA",
		  "exercise": "์ˆ˜์˜",
		  "begin": "20241101",
		  "end": "20241130",
		  "day": "ํ† ",
		  "time": "09:30~10:20",
		  "recruit_cnt": 5,
		  "price": 60000
	  },
	  {
		  "class_id": 2,
		  "facility_name": "๊ฐ•๋‚จ์Šคํฌ์ธ ๋ฌธํ™”์„ผํ„ฐ์ˆ˜์˜์žฅ",
		  "facility_type": "์ˆ˜์˜์žฅ",
		  "address": "์„œ์šธํŠน๋ณ„์‹œ ๊ฐ•๋‚จ๊ตฌ ๋ฐค๊ณ ๊ฐœ๋กœ1๊ธธ 52 (์ˆ˜์„œ๋™)",
		  "program_name": "์ฃผ๋ง๊ทธ๋ฃน๋ ˆ์ŠจB",
		  "exercise": "์ˆ˜์˜",
		  "begin": "20241101",
		  "end": "20241130",
		  "day": "ํ† ",
		  "time": "10:30~11:20",
		  "recruit_cnt": 5,
		  "price": 60000
	  },
	  {
		  "class_id": 3,
		  "facility_name": "๊ฐ•๋‚จ์Šคํฌ์ธ ๋ฌธํ™”์„ผํ„ฐ์ˆ˜์˜์žฅ",
		  "facility_type": "์ˆ˜์˜์žฅ",
		  "address": "์„œ์šธํŠน๋ณ„์‹œ ๊ฐ•๋‚จ๊ตฌ ๋ฐค๊ณ ๊ฐœ๋กœ1๊ธธ 52 (์ˆ˜์„œ๋™)",
		  "program_name": "์ฃผ๋ง๊ทธ๋ฃน๋ ˆ์ŠจC",
		  "exercise": "์ˆ˜์˜",
		  "begin": "20241101",
		  "end": "20241130",
		  "day": "ํ† ",
		  "time": "11:30~12:20",
		  "recruit_cnt": 5,
		  "price": 60000
	  },
	  ...
  ]
}

โŒ Error

{
  "status": 400,
  "error": "์Šคํฌ์ธ  ๊ฐ•์ขŒ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค"
}

AI ์ถ”์ฒœ ์šด๋™ ์กฐํšŒ (GET /sport/ai)

๐Ÿ“Œ Server Response

โœ… Success

{
  "status": 200,
  "exercies": ["์ฒ ์ธ๋ฐ˜", "์ˆœํ™˜์šด๋™", "์ฒด์กฐ", "์žฅ์• ์ธ์Šคํฌ์ธ "]
}

โŒ Error

{
  "status": 400,
  "error": "AI ์„ค๋ฌธ์กฐ์‚ฌ ์‹คํŒจ"
}

AI ์„ค๋ฌธ์กฐ์‚ฌ ์ „์†ก (POST /sport/ai)

์ปฌ๋Ÿผ ํ•œ๊ธ€๋ช… ์ปฌ๋Ÿผ ์˜๋ฌธ๋ช… ๋ฐ์ดํ„ฐ ํƒ€์ž… ํ•„์ˆ˜์—ฌ๋ถ€ ๋ฐ์ดํ„ฐ ์˜ˆ์‹œ
์šด๋™ ์„ ํ˜ธ๋„ preference number Y 10
์šด๋™ ๊ฐ•๋„ intense number Y 5
์šด๋™ ์ฃผ๋‹น ๋นˆ๋„(์ •๊ธฐ์„ฑ) frequency number Y 5
์šด๋™ ์นœ๊ตฌ ์œ ๋ฌด friend number Y 10
์šด๋™ ๋ชฉํ‘œ goal number Y 10
์šด๋™ ๋ฐฉ์‹ method number Y 10
ํ™œ๋™์„ฑ activity number Y 5
์‹ค๋‚ด vs ์‹ค์™ธ place number Y 10
์šด๋™ ์‹œ๊ฐ„๋Œ€ time number Y 5
์šด๋™ ์ข…๋ฅ˜ type number Y 10

๐Ÿ“Œ Request Body

{
	"preference": 10,
	"intense": 5,
	"frequency": 5,
	"friend": 10,
	"goal": 10,
	"method": 10,
	"activity": 5,
	"place": 10,
	"time": 5,
	"type": 10
}

๐Ÿ“Œ Server Response

โœ… Success

{
  "status": 201,
  "message": "AI ์„ค๋ฌธ์กฐ์‚ฌ ์ „์†ก ์„ฑ๊ณต"
}

โŒ Error

{
  "status": 400,
  "error": "AI ์„ค๋ฌธ์กฐ์‚ฌ ์ „์†ก ์‹คํŒจ"
}

๋‚ด๊ฐ€ ๋“ฑ๋กํ•œ ์Šคํฌ์ธ  ๊ฐ•์ขŒ ์กฐํšŒ (GET /class)

๐Ÿ“Œ Server Response

โœ… Success

{
  "status": 200,
  "class_id": [1, 6, 23]
}

โŒ Error

{
  "status": 400,
  "error": "์Šคํฌ์ธ  ๊ฐ•์ขŒ ์กฐํšŒ ์‹คํŒจ"
}

์Šคํฌ์ธ  ๊ฐ•์ขŒ ๋“ฑ๋ก (POST /class/:class_id)

๐Ÿ“Œ Server Response

โœ… Success

{
  "status": 201,
  "message": "์Šคํฌ์ธ  ๊ฐ•์ขŒ ๋“ฑ๋ก ์„ฑ๊ณต"
}

โŒ Error

{
  "status": 400,
  "error": "์Šคํฌ์ธ  ๊ฐ•์ขŒ ๋“ฑ๋ก ์‹คํŒจ"
}

์Šคํฌ์ธ  ๊ฐ•์ขŒ ์ทจ์†Œ (DELETE /class/:class_id)

๐Ÿ“Œ Server Response

โœ… Success

{
  "status": 200,
  "message": "์Šคํฌ์ธ  ๊ฐ•์ขŒ ์ทจ์†Œ์„ฑ๊ณต"
}

โŒ Error

{
  "status": 400,
  "error": "์Šคํฌ์ธ  ๊ฐ•์ขŒ ์ทจ์†Œ ์‹คํŒจ"
}

์Šคํฌ์ธ  ๊ฐ•์ขŒ ์ฆ๊ฒจ์ฐพ๊ธฐ ์กฐํšŒ (POST /class/bookmark)

๐Ÿ“Œ Server Response

โœ… Success

{
  "status": 201,
  "class_id": [1, 4, 6]
}

โŒ Error

{
  "status": 400,
  "error": "์ฆ๊ฒจ์ฐพ๊ธฐ ์กฐํšŒ ์‹คํŒจ"
}

์Šคํฌ์ธ  ๊ฐ•์ขŒ ์ฆ๊ฒจ์ฐพ๊ธฐ ๋“ฑ๋ก (POST /class/bookmark/:class_id)

๐Ÿ“Œ Server Response

โœ… Success

{
  "status": 201,
  "message": "์ฆ๊ฒจ์ฐพ๊ธฐ ๋“ฑ๋ก ์„ฑ๊ณต"
}

โŒ Error

{
  "status": 400,
  "error": "์ฆ๊ฒจ์ฐพ๊ธฐ ๋“ฑ๋ก ์‹คํŒจ"
}

์Šคํฌ์ธ  ๊ฐ•์ขŒ ์ฆ๊ฒจ์ฐพ๊ธฐ ์ทจ์†Œ (DELETE /class/bookmark/:class_id)

๐Ÿ“Œ Server Response

โœ… Success

{
  "status": 200,
  "message": "์ฆ๊ฒจ์ฐพ๊ธฐ ์ทจ์†Œ ์„ฑ๊ณต"
}

โŒ Error

{
  "status": 400,
  "error": "์ฆ๊ฒจ์ฐพ๊ธฐ ์ทจ์†Œ ์‹คํŒจ"
}

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •