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": []
  }
]