API 명세서 - fitculator-ai/Team4_BE GitHub Wiki
4팀 백엔드 API 명세서
1. 홈화면
- 포인트 조회
- 근력운동 횟수 조회
- 운동 기록 조회
- 운동 추가
- 운동 기록 수정
- 운동 기록 삭제
- 유산소 리스트
- 근력 리스트
- 유저 리스트(로그인 대용)
1-1. 포인트 조회
URI: GET /api/points/weekly?user_id={user_id}
설명: 유저의 일주일간의 총 운동 포인트를 조회합니다.
응답 본문
{
"message" : "포인트 조회 성공",
"user_id" : 123,
"point" : 123
}
1-2. 근력운동 횟수
URI: GET /api/exercise-logs/strength/count?user_id={user_id}
설명: 유저의 일주일간 근력 운동 횟수를 조회합니다.
응답 본문
{
"message" : "횟수 조회 성공",
"user_id" : "123",
"counts" : "123"
}
1-3. 운동 기록
URI: GET api/exercise-logs?user_id={user_id}
설명: 유저가 이번주에 한 운동의 기록을 가져옵니다. 운동 획득 포인트, 운동의 이름, 끝난 시간, 진행한 시간, 운동 강도 등이 포함됩니다.
응답 본문
{
"message" : "유저 운동기록 조회 성공"
"gained_point" : "36",
"avg_bpm" : "130",
"exercise_name" : "달리기"
"end_at" : "YYYY-MM-DD HH:MM:SS",
"duration" : "MM",
"exercise_intensity" : "높음"
}
1-4. + 버튼(운동 기록 추가)
URI: POST api/exercise-logs/
설명: 유저가 운동기록을 직접 추가합니다.
요청 본문
{
"user_id" : "123",
"exercise_name" : "등산",
"exercise_type" : "[유산소, 근력]",
"avg_bpm" : "123",
"max_bpm" : "123",
"end_at" : "YYYY-MM-DD HH:MM:SS",
"duration" : "30",
"earned_point" : "30",
"exercise_intensity" : "높음",
"exercise_detail" : "힘들다"
}
응답 본문
{
"message" : "기록 저장이 완료되었습니다",[{
"user_id" : "123",
"exercise_name" : "등산",
"exercise_type" : "[유산소, 근력]",
"avg_bpm" : "123",
"max_bpm" : "123",
"end_at" : "YYYY-MM-DD HH:MM:SS",
"duration" : "30",
"earned_point" : "30",
"exercise_intensity" : "높음",
"exercise_detail" : "힘들다"
}]
}
1-5. 운동 기록 수정
URI: PATCH api/exercise-logs/
설명: 운동 기록을 항목별로 수정합니다.
요청 본문 ex) 운동 이름만 바꾸고싶다(등산 -> 하이킹)
{"exercise_name" : "하이킹"}
응답 본문
{"message" : "변경이 완료되었습니다", [{"exercise_name" : "하이킹"}]}
1-6. 운동 기록 삭제
URI: DELETE api/exercise-logs?user_id={user_id}&id={id}
설명: 유저의 운동기록을 삭제합니다.
응답 본문
{
"message" : "삭제 완료"
}
1-7. 유산소, 근력 리스트
URI: GET api/exercise?exercise_type={type}
설명: 운동 로그 추가 시, 유산소운동 리스트를 반환합니다. 유산소/근력 버튼 클릭하면 클릭한 값이 type에 저장됩니다.
응답 본문
["하이킹", "등산", "달리기", "걷기", "HIIT"]
["벤치프레스", "스쿼트", "데드리프트"]
2. 유저(유저 생성, 상세정보 생성, 로그인, 로그아웃)
2-1. 유저 생성
URI: POST /api/user/create-user
설명: 사용자를 생성합니다.
요청 본문
** 필수
{
** ”email”: “[email protected]”,
** ”name”: "string33",
"token": "string"
}
응답 본문
{
"email": "[email protected]",
"name": "string33",
"id": 18,
"token": null
}
2-2 유저 상세정보 생성
URI: POST /api/user/create-user-details
설명: 사용자의 세부정보를 생성합니다.
요청 본문
{
** "user_id": 18,
"user_nickname": "string",
"exercise_issue": "string",
"exercise_goal": "string",
"resting_bpm": 0,
"height": 0,
** “birth”: “2025-02-24T01:12:30.793Z”,
"device": "string",
"profile_image": "string"
}
응답 본문
{
"user_id": 18,
"user_nickname": "string33",
"exercise_goal": "string11",
"height": 60,
"device": "string11",
"exercise_issue": "string33",
"id": 13,
"resting_bpm": 70,
"birth": "2025-02-24T01:20:20.040000",
"profile_image": "string"
}
2-3 로그인
URI: POST /api/user/login
설명: 사용자가 로그인하고 임시 jwt토큰을 저장
요청 본문
{
** “email”: "string22",
}
응답 본문
{
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJzdHJpbmcyMiIsImV4cCI6MTc0MDM2MjUyMH0.DOZdMarQCJvLB2gOjfNCTIKO6eM1zK9o8VMAIWJnvP8",
"token_type": "bearer"
}
2-4 로그아웃
URI: POST /api/user/logout
설명: 사용자가 로그아웃합니다.
요청 본문
{
** “email”: "string22",
}
응답 본문
{
"message": "로그아웃 되었습니다."
}
3. 마이페이지 (유저 조회, 상세정보 조회, 프로필 수정, 안정심박수 조회, 안정심박수 설정, 운동량 조회)
3-1. 마이페이지 유저 조회
URI: POST /api/mypage/get-user
설명: 사용자 정보를 조회합니다.
요청 본문
{
** “email”: "string22",
}
응답 본문
{
"email": "string22",
"name": "string3333",
"id": 17,
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJzdHJpbmcyMiIsImV4cCI6MTc0MDM2MjcxOX0.JKl8MIV3StsVDm9Lt1NkOzoShdBKMj1DDW0a9dgbyXw"
}
3-2. 유저 상세정보 조회
URI: POST /api/mypage/get-user
설명: 사용자의 상세정보를 조회합니다.
요청 본문
{
** “user_id”: "18",
}
응답 본문
{
"user_id": 17,
"user_nickname": "test00",
"exercise_issue": "test777",
"exercise_goal": "test0000",
"resting_bpm": 80,
"height": 170,
"birth": "2025-02-20T01:20:20.040000",
"device": "test333",
"profile_image": "test11"
}
3-3. 유저 프로필 수정
설명: 사용자의 상세정보를 수정합니다.
요청 본문
{
** “user_id”: "18",
}
{
"user_nickname": "test333",
"exercise_issue": "test10",
"exercise_goal": "test777",
"resting_bpm": 100,
"height": 180,
"birth": "2025-02-14T01:40:45.672Z",
"device": "test111",
"profile_image": "test333"
}
응답 본문
{
"user_nickname": "test333",
"exercise_issue": "test10",
"exercise_goal": "test777",
"resting_bpm": 100,
"height": 180,
"birth": "2025-02-14T01:40:45.672000",
"device": "test111",
"profile_image": "test3333"
}
3-4. 유저 안정심박수 조회
URI: GET /api/mypage/resting-heart-rate
설명: 사용자의 안정심박수를 조회합니다.
요청 본문
{
** “user_id”: "17",
}
응답 본문
{
"resting_bpm": 100
}
3-5. 유저 안정심박수 설정
URI: PUT /api/mypage/put-resting-heart-rate
설명: 사용자의 안정심박수를 수정합니다.
요청 본문
{
** “user_id”: "17",
** “resting_bpm”: "110",
}
응답 본문
{
"msg": "resting_bpm이 성공적으로 업데이트되었습니다.",
"resting_bpm": 110
}
### 3-6. 마이페이지 운동량 조회(지난 4주)
**URI**: GET /api/mypage/get-exercise-logs
**설명**: 사용자의 지난 4주간 운동기록을 조회합니다.
### 요청 본문
```json
{
** “user_id”: "17",
}
응답 본문
[
{
"week_start": "2025-02-24",
"week_end": "2025-03-02",
"logs": []
},
{
"week_start": "2025-02-17",
"week_end": "2025-02-23",
"logs": [
{
"user_id": 3,
"exercise_name": "벤치프레스",
"avg_bpm": 30,
"max_bpm": 120,
"duration": 30,
"end_at": "2025-02-20T14:25:00",
"exercise_intensity": "매우 낮음",
"earned_point": 20,
"exercise_note": "test"
}
]
},
{
"week_start": "2025-02-10",
"week_end": "2025-02-16",
"logs": [
{
"user_id": 3,
"exercise_name": "랫풀다운",
"avg_bpm": 50,
"max_bpm": 160,
"duration": 30,
"end_at": "2025-02-10T00:44:00",
"exercise_intensity": "매우 낮음",
"earned_point": 30,
"exercise_note": null
},
{
"user_id": 3,
"exercise_name": "랫풀다운",
"avg_bpm": 50,
"max_bpm": 160,
"duration": 30,
"end_at": "2025-02-10T00:44:00",
"exercise_intensity": "매우 낮음",
"earned_point": 30,
"exercise_note": null
}
]
},
{
"week_start": "2025-02-03",
"week_end": "2025-02-09",
"logs": []
}
]