From 269109a73d4e52bd0ff2b22068caa91bf439dac4 Mon Sep 17 00:00:00 2001 From: Parkjihun Date: Mon, 15 Dec 2025 00:30:30 +0900 Subject: [PATCH 1/3] =?UTF-8?q?chore:=20SonarCloud=20=EC=A0=95=EC=A0=81=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EB=B6=84=EC=84=9D=20=EB=8F=84=EC=9E=85=20?= =?UTF-8?q?(#4)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: sonarcloud 추가설정 및 yml추가 #2 * chore: sonarcloud.yml 워크플로우 브랜치 이름 변경 #2 * chore: sonarcloud 버전이 gradle 8버전과 맞지않아 변경 #2 * chore: Gradle 8.10으로 다운그레이드 #2 --- .github/workflows/sonarcloud.yml | 43 ++++++++++++++++++++++++ build.gradle | 9 +++++ gradle/wrapper/gradle-wrapper.properties | 2 +- 3 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/sonarcloud.yml diff --git a/.github/workflows/sonarcloud.yml b/.github/workflows/sonarcloud.yml new file mode 100644 index 0000000..10c34fe --- /dev/null +++ b/.github/workflows/sonarcloud.yml @@ -0,0 +1,43 @@ +name: SonarCloud Analysis + +on: + pull_request: + types: [opened, synchronize, reopened] + push: + branches: + - master + - dev + +jobs: + sonarcloud: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Set up JDK 17 + uses: actions/setup-java@v4 + with: + java-version: '17' + distribution: 'temurin' + + - name: Cache SonarCloud packages + uses: actions/cache@v3 + with: + path: ~/.sonar/cache + key: ${{ runner.os }}-sonar + restore-keys: ${{ runner.os }}-sonar + + - name: Cache Gradle packages + uses: actions/cache@v3 + with: + path: ~/.gradle/caches + key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }} + restore-keys: ${{ runner.os }}-gradle + + - name: Build and analyze + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} + run: ./gradlew sonar --info \ No newline at end of file diff --git a/build.gradle b/build.gradle index 2c73181..215358d 100644 --- a/build.gradle +++ b/build.gradle @@ -3,6 +3,7 @@ plugins { id 'org.springframework.boot' version '3.5.7' id 'io.spring.dependency-management' version '1.1.7' id 'com.diffplug.spotless' version '6.22.0' + id 'org.sonarqube' version '5.1.0.4882' } group = 'org.hanseiro' @@ -15,6 +16,14 @@ java { } } +sonar { + properties { + property 'sonar.projectKey', 'Hansei-ro_hanseiro-server' + property 'sonar.organization', 'hansei-ro' + property 'sonar.host.url', 'https://sonarcloud.io' + } +} + repositories { mavenCentral() } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 23449a2..9355b41 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME From c1bb5e3e8b3b1f122c9718f9e73c9bb7905bde9d Mon Sep 17 00:00:00 2001 From: Parkjihun Date: Sat, 20 Dec 2025 19:01:06 +0900 Subject: [PATCH 2/3] =?UTF-8?q?docs:=20Documentation=5FGuide=20docs?= =?UTF-8?q?=ED=8C=A8=ED=82=A4=EC=A7=80=EC=97=90=20=EC=B6=94=EA=B0=80=20#5?= =?UTF-8?q?=20(#7)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Documentation_Guide.md | 269 ++++++++++++++++++++++++++++++++++++ 1 file changed, 269 insertions(+) create mode 100644 docs/Documentation_Guide.md diff --git a/docs/Documentation_Guide.md b/docs/Documentation_Guide.md new file mode 100644 index 0000000..c598eb2 --- /dev/null +++ b/docs/Documentation_Guide.md @@ -0,0 +1,269 @@ +# API Documentation Convention Guide + +> 이 문서는 한세로 프로젝트의 API 문서 작성 컨벤션입니다. +> 모든 API 문서는 이 형식을 따라 작성해주세요. + +--- + +## 문서 구조 +``` +docs/ +├── API_DOCS_EXAMPLE.md # 이 파일 (컨벤션 가이드) +├── USER_API.md # 사용자 관련 API +├── MATCHING_API.md # 매칭 관련 API +├── MATCHING_ROOM_API.md # 매칭룸 관련 API +├── BUS_ROUTE_API.md # 버스 노선 관련 API +└── CHAT_API.md # 채팅 관련 API (P2) +``` + +--- + +## API 문서 작성 템플릿 + +### 기본 정보 +```markdown +# [도메인명] API + +> Base URL: `/api/v1/[도메인]` +> 담당자: [이름] +> 최종 수정일: YYYY.MM.DD +``` + +--- + +### 엔드포인트 작성 형식 + +각 엔드포인트는 아래 형식을 따릅니다. + +--- + +## `[METHOD]` /api/v1/[resource] + +### 개요 +| 항목 | 내용 | +|------|------| +| **설명** | 이 API가 하는 일을 한 줄로 설명 | +| **인증** | Required / Optional / None | +| **권한** | USER / ADMIN / ALL | + +### Method 선택 이유 +> 왜 이 HTTP Method를 선택했는지 간단히 설명 +> 예: POST - 새로운 리소스(매칭 요청)를 생성하기 때문 + +--- + +### Request + +#### Headers +| Key | Value | Required | Description | +|-----|-------|----------|-------------| +| Authorization | Bearer {token} | O | JWT 액세스 토큰 | +| Content-Type | application/json | O | - | + +#### Path Parameters +| Parameter | Type | Required | Description | +|-----------|------|----------|-------------| +| id | Long | O | 리소스 고유 ID | + +#### Query Parameters +| Parameter | Type | Required | Default | Description | +|-----------|------|----------|---------|-------------| +| page | Integer | X | 0 | 페이지 번호 | +| size | Integer | X | 10 | 페이지 크기 | + +#### Request Body +```json +{ + "field1": "string", + "field2": 0, + "field3": true +} +``` + +| Field | Type | Required | Description | +|-------|------|----------|-------------| +| field1 | String | O | 필드 설명 | +| field2 | Integer | O | 필드 설명 | +| field3 | Boolean | X | 필드 설명 (기본값: false) | + +--- + +### Response + +#### 성공 (200 OK) +```json +{ + "code": "SUCCESS", + "message": "요청이 성공했습니다.", + "data": { + "id": 1, + "field1": "value", + "createdAt": "2025-01-01T12:00:00" + } +} +``` + +#### 실패 케이스 + +| Status | Code | Message | Description | +|--------|------|---------|-------------| +| 400 | INVALID_INPUT | 입력값이 올바르지 않습니다 | 필수 필드 누락 또는 형식 오류 | +| 401 | UNAUTHORIZED | 인증이 필요합니다 | 토큰 없음 또는 만료 | +| 404 | NOT_FOUND | 리소스를 찾을 수 없습니다 | 존재하지 않는 ID | +| 409 | CONFLICT | 이미 존재하는 리소스입니다 | 중복 요청 | +```json +{ + "code": "INVALID_INPUT", + "message": "입력값이 올바르지 않습니다", + "errors": [ + { + "field": "email", + "message": "이메일 형식이 올바르지 않습니다" + } + ] +} +``` + +--- + +## 실제 예시: 매칭 요청 API + +## `POST` /api/v1/matching + +### 개요 +| 항목 | 내용 | +|------|------| +| **설명** | 택시 카풀 매칭 대기열에 등록 | +| **인증** | Required | +| **권한** | USER | + +### Method 선택 이유 +> POST - 매칭 대기열에 새로운 요청(리소스)을 생성하는 행위이므로 POST 사용. +> 동일한 요청을 여러 번 보내면 중복 등록될 수 있으므로 멱등성이 없음. + +--- + +### Request + +#### Headers +| Key | Value | Required | Description | +|-----|-------|----------|-------------| +| Authorization | Bearer {token} | O | JWT 액세스 토큰 | +| Content-Type | application/json | O | - | + +#### Request Body +```json +{ + "departureStation": "SANBON", + "expectedDepartureTime": "2025-01-15T09:00:00" +} +``` + +| Field | Type | Required | Description | +|-------|------|----------|-------------| +| departureStation | String | O | 출발역 (SANBON / GEUMJEONG) | +| expectedDepartureTime | DateTime | X | 예상 출발 시간 (미입력 시 즉시 매칭) | + +--- + +### Response + +#### 성공 (201 Created) +```json +{ + "code": "SUCCESS", + "message": "매칭 대기열에 등록되었습니다.", + "data": { + "matchingRequestId": 123, + "departureStation": "SANBON", + "status": "WAITING", + "queuePosition": 3, + "estimatedWaitTime": 5, + "createdAt": "2025-01-15T08:55:00" + } +} +``` + +| Field | Type | Description | +|-------|------|-------------| +| matchingRequestId | Long | 매칭 요청 ID | +| departureStation | String | 출발역 | +| status | String | 상태 (WAITING / MATCHED / CANCELLED) | +| queuePosition | Integer | 대기열 순서 | +| estimatedWaitTime | Integer | 예상 대기 시간 (분) | +| createdAt | DateTime | 요청 생성 시간 | + +#### 실패 케이스 + +| Status | Code | Message | Description | +|--------|------|---------|-------------| +| 400 | INVALID_STATION | 올바르지 않은 출발역입니다 | SANBON, GEUMJEONG 외 값 | +| 401 | UNAUTHORIZED | 인증이 필요합니다 | 토큰 없음 또는 만료 | +| 409 | ALREADY_IN_QUEUE | 이미 대기열에 등록되어 있습니다 | 중복 매칭 요청 | + +--- + +## 작성 시 체크리스트 + +- [ ] 엔드포인트 URL이 RESTful 규칙을 따르는가? +- [ ] HTTP Method 선택 이유가 명확한가? +- [ ] Request/Response 예시가 실제 데이터와 유사한가? +- [ ] 모든 필수/선택 필드가 명시되어 있는가? +- [ ] 에러 케이스가 충분히 정의되어 있는가? +- [ ] 인증/권한 정보가 명시되어 있는가? + +--- + +## HTTP Method 가이드 + +| Method | 용도 | 멱등성 | 예시 | +|--------|------|--------|------| +| GET | 리소스 조회 | O | 매칭 상태 조회 | +| POST | 리소스 생성 | X | 매칭 요청, 회원가입 | +| PUT | 리소스 전체 수정 | O | 프로필 전체 수정 | +| PATCH | 리소스 부분 수정 | O | 프로필 일부 수정 | +| DELETE | 리소스 삭제 | O | 매칭 취소 | + +--- + +## 공통 Response 형식 + +### 성공 응답 +```json +{ + "code": "SUCCESS", + "message": "성공 메시지", + "data": { ... } +} +``` + +### 에러 응답 +```json +{ + "code": "ERROR_CODE", + "message": "에러 메시지", + "errors": [ + { + "field": "필드명", + "message": "상세 에러 메시지" + } + ] +} +``` + +### 페이징 응답 +```json +{ + "code": "SUCCESS", + "message": "성공", + "data": { + "content": [ ... ], + "page": 0, + "size": 10, + "totalElements": 100, + "totalPages": 10, + "first": true, + "last": false + } +} +``` \ No newline at end of file From 84476440adbe2695612145d6965529a16bc3c969 Mon Sep 17 00:00:00 2001 From: taenam kim Date: Sun, 28 Dec 2025 15:39:51 +0900 Subject: [PATCH 3/3] =?UTF-8?q?MatchingAPI=20docs=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/MatchingAPI_v0_0_1.md | 464 +++++++++++++++++++++++++++++++++++++ 1 file changed, 464 insertions(+) create mode 100644 docs/MatchingAPI_v0_0_1.md diff --git a/docs/MatchingAPI_v0_0_1.md b/docs/MatchingAPI_v0_0_1.md new file mode 100644 index 0000000..6d8a6a4 --- /dev/null +++ b/docs/MatchingAPI_v0_0_1.md @@ -0,0 +1,464 @@ +# 매칭 (Matching) API + +> Base URL: `/api/v1/matching` +> 담당자: 김태남 +> 최종 수정일: 2025.12.24 +> 관련 스키마: `Matching Room`, `Room Participant` + +--- + +## `GET` /api/v1/matching/status + +### 개요 +| 항목 | 내용 | +|------|------| +| **설명** | 특정 출발역(산본/금정)의 실시간 매칭 대기 현황(인원 수)을 조회합니다. | +| **UI 매핑** | **[홈 화면]** '산본역 매칭 현황' 카드, 진행률 바, '2/4' 텍스트 | +| **인증** | Required | +| **권한** | USER | + +### Method 선택 이유 +> GET - 서버의 상태를 변경하지 않고, 현재 대기열의 정보(리소스)를 조회하는 요청이기 때문입니다. + +--- + +### Request + +#### Headers +| Key | Value | Required | Description | +|-----|-------|----------|-------------| +| Authorization | Bearer {token} | O | JWT 액세스 토큰 | + +#### Query Parameters +| Parameter | Type | Required | Default | Description | +|-----------|------|----------|---------|-------------| +| station | String | O | - | 출발역 (SANBON / GEUMJEONG) | + +--- + +### Response + +#### 성공 (200 OK) +```json +{ + "code": "SUCCESS", + "message": "매칭 현황 조회 성공", + "data": { + "station": "SANBON", + "currentCount": 2 + } +} +``` + +#### 실패 케이스 +| Status | Code | Message | Description | +|--------|------|---------|-------------| +| 400 | INVALID_STATION | 유효하지 않은 역 이름입니다. | SANBON, GEUMJEONG 외 입력 시 | + +--- + +## `POST` /api/v1/matching/requests + +### 개요 +| 항목 | 내용 | +|------|------| +| **설명** | 사용자가 특정 역의 매칭 대기열에 진입(매칭 요청)합니다. | +| **UI 매핑** | [홈 화면] 하단 '금정역/산본역' 파란색 버튼 클릭 시 | +| **인증** | Required | +| **권한** | USER | + +### Method 선택 이유 +> POST - 대기열에 새로운 참가자(리소스)를 생성하는 행위이므로 POST를 사용합니다. + +--- + +### Request + +#### Headers +| Key | Value | Required | Description | +|-----|-------|----------|-------------| +| Authorization | Bearer {token} | O | JWT 액세스 토큰 | +| Content-Type | application/json | O | - | + +#### Request Body +```json +{ + "station": "SANBON" +} +``` + +| Field | Type | Required | Description | +|-------|------|----------|-------------| +| station | String | O | 출발역 (SANBON / GEUMJEONG) | + +--- + +### Response + +#### 성공 (201 Created) +```json +{ + "code": "SUCCESS", + "message": "매칭 대기열 등록 성공", + "data": { + "matchingId": 101, + "participantId": 505, + "myStatus": "WAITING" + } +} +``` + +#### 실패 케이스 +| Status | Code | Message | Description | +|--------|------|---------|-------------| +| 409 | ALREADY_MATCHING | 이미 진행 중인 매칭이 있습니다. | 중복 요청 방지 | +| 400 | INVALID_STATION | 유효하지 않은 역 이름입니다. | - | + +--- + +## `DELETE` /api/v1/matching/rooms/{matchingId}/members/me + +### 개요 +| 항목 | 내용 | +|------|------| +| **설명** | 현재 대기 중인 매칭방에서 나갑니다 (매칭 취소). | +| **UI 매핑** | [매칭 대기 화면] 하단 '매칭 취소' 버튼 | +| **인증** | Required | +| **권한** | USER | + +### Method 선택 이유 +> DELETE - 매칭방 내의 '참가자(나)'라는 리소스를 삭제하는 행위이므로 DELETE를 사용합니다. + +--- + +### Request + +#### Headers +| Key | Value | Required | Description | +|-----|-------|----------|-------------| +| Authorization | Bearer {token} | O | JWT 액세스 토큰 | + +#### Path Parameters +| Parameter | Type | Required | Description | +|-----------|------|----------|-------------| +| matchingId | Long | O | 매칭방 ID (matching_id) | + +--- + +### Response + +#### 성공 (200 OK) +```json +{ + "code": "SUCCESS", + "message": "매칭이 취소되었습니다.", + "data": null +} +``` + +#### 실패 케이스 +| Status | Code | Message | Description | +|--------|------|---------|-------------| +| 404 | ROOM_NOT_FOUND | 매칭방을 찾을 수 없습니다. | 존재하지 않거나 이미 종료된 방 | + +--- + +## `PATCH` /api/v1/matching/rooms/{matchingId}/status + +### 개요 +| 항목 | 내용 | +|------|------| +| **설명** | 4인이 되기 전 강제 출발을 위해 본인의 상태를 '준비 완료'로 변경합니다. | +| **UI 매핑** | [매칭 대기 화면] 리스트 내 본인 프로필의 체크박스 또는 토글 | +| **인증** | Required | +| **권한** | USER | + +### Method 선택 이유 +> PATCH - 참가자의 정보 중 상태(isReady) 필드만 부분 수정하므로 PATCH를 사용합니다. + +--- + +### Request + +#### Headers +| Key | Value | Required | Description | +|-----|-------|----------|-------------| +| Authorization | Bearer {token} | O | JWT 액세스 토큰 | +| Content-Type | application/json | O | - | + +#### Path Parameters +| Parameter | Type | Required | Description | +|-----------|------|----------|-------------| +| matchingId | Long | O | 매칭방 ID | + +#### Request Body +```json +{ + "isReady": true +} +``` + +| Field | Type | Required | Description | +|-------|------|----------|-------------| +| isReady | Boolean | O | 준비 완료 여부 (true: 준비됨, false: 취소) | + +--- + +### Response + +#### 성공 (200 OK) +```json +{ + "code": "SUCCESS", + "message": "상태가 변경되었습니다.", + "data": { + "participantId": 505, + "userId": 12, + "isReady": true, + "roomStatus": "MATCHING_COMPLETED" + } +} +``` + +#### 실패 케이스 +| Status | Code | Message | Description | +|--------|------|---------|-------------| +| 400 | CANNOT_READY | 준비할 수 없는 상태입니다. | 이미 출발했거나 방이 유효하지 않음 | + +--- + +## `POST` /api/v1/matching/rooms/{matchingId}/force-start + +### 개요 +| 항목 | 내용 | +|------|------| +| **설명** | 현재 인원으로 출발을 확정합니다. (모든 참가자가 Ready 상태여야 함) | +| **UI 매핑** | [매칭 대기 화면] '현재 인원으로 출발' 주황색 버튼 | +| **인증** | Required | +| **권한** | USER (참가자 누구나 가능하나, 서버에서 전원 동의 체크) | + +### Method 선택 이유 +> POST - '매칭 완료'라는 새로운 상태를 확정하고 거래(Transaction)를 트리거하는 행위이므로 POST를 사용합니다. + +--- + +### Request + +#### Headers +| Key | Value | Required | Description | +|-----|-------|----------|-------------| +| Authorization | Bearer {token} | O | JWT 액세스 토큰 | + +#### Path Parameters +| Parameter | Type | Required | Description | +|-----------|------|----------|-------------| +| matchingId | Long | O | 매칭방 ID | + +--- + +### Response + +#### 성공 (200 OK) +```json +{ + "code": "SUCCESS", + "message": "매칭이 확정되었습니다. 곧 출발합니다!", + "data": { + "matchingId": 101, + "status": "MATCHED", + "finalMemberCount": 3 + } +} +``` + +#### 실패 케이스 +| Status | Code | Message | Description | +|--------|------|---------|-------------| +| 409 | NOT_ALL_READY | 모든 참가자가 준비되지 않았습니다. | 만장일치 조건 미달 | +| 400 | NOT_ENOUGH_MEMBERS | 최소 출발 인원 부족 | 최소 2인 이상 등 정책 위반 시 | + +--- + +## `GET` /api/v1/matching/rooms/{matchingId} + +### 개요 +| 항목 | 내용 | +|------|------| +| **설명** | 특정 매칭방의 상세 정보와 참가자 현황을 최신 상태로 조회합니다. (Polling용) | +| **UI 매핑** | [매칭 대기 화면] 전체 (타이머, 참가자 리스트, 준비 상태 등) | +| **인증** | Required | +| **권한** | USER (해당 방의 참가자만 조회 가능) | + +### Method 선택 이유 +> GET - 매칭방이라는 리소스의 상세 정보를 조회하는 요청이므로 GET을 사용합니다. + +--- + +### Request + +#### Headers +| Key | Value | Required | Description | +|-----|-------|----------|-------------| +| Authorization | Bearer {token} | O | JWT 액세스 토큰 | + +#### Path Parameters +| Parameter | Type | Required | Description | +|-----------|------|----------|-------------| +| matchingId | Long | O | 매칭방 ID | + +--- + +### Response + +#### 성공 (200 OK) +```json +{ + "code": "SUCCESS", + "message": "매칭방 상세 조회 성공", + "data": { + "matchingId": 101, + "station": "SANBON", + "status": "WAITING", + "createdAt": "2025-12-24T12:00:00", + "members": [ + { + "participantId": 501, + "userId": 10, + "name": "홍길동", + "major": "컴퓨터공학과", + "isReady": true, + "joinedAt": "2025-12-24T12:01:00" + }, + { + "participantId": 505, + "userId": 12, + "name": "김한세", + "major": "디자인학부", + "isReady": false, + "joinedAt": "2025-12-24T12:05:00" + } + ] + } +} +``` + +#### 실패 케이스 +| Status | Code | Message | Description | +|--------|------|---------|-------------| +| 404 | ROOM_NOT_FOUND | 매칭방을 찾을 수 없습니다. | 존재하지 않는 방 ID | +| 403 | FORBIDDEN | 조회 권한이 없습니다. | 해당 방의 참가자가 아님 | + +--- + +## `GET` /api/v1/matching/history + +### 개요 +| 항목 | 내용 | +|------|------| +| **설명** | 사용자의 과거 매칭 참여 이력을 조회합니다. | +| **UI 매핑** | [마이페이지 화면] '12월 9일(목) 산본역 4인 매칭' 리스트 | +| **인증** | Required | +| **권한** | USER | + +### Method 선택 이유 +> GET - 사용자의 이력 데이터(컬렉션)를 조회하는 요청이므로 GET을 사용합니다. + +--- + +### Request + +#### Headers +| Key | Value | Required | Description | +|-----|-------|----------|-------------| +| Authorization | Bearer {token} | O | JWT 액세스 토큰 | + +#### Query Parameters +| Parameter | Type | Required | Default | Description | +|-----------|------|----------|---------|-------------| +| page | Integer | X | 0 | 페이지 번호 | +| size | Integer | X | 10 | 페이지 크기 | + +--- + +### Response + +#### 성공 (200 OK) +```json +{ + "code": "SUCCESS", + "message": "매칭 이력 조회 성공", + "data": { + "content": [ + { + "historyId": "1", + "date": "2025-12-09T18:30", + "station": "SANBON", + "finalMemberCount": 4 + }, + { + "historyId": "2", + "date": "2025-12-07T09:00", + "station": "GEUMJEONG", + "finalMemberCount": 2 + } + ], + "page": 0, + "size": 10, + "hasNext": true + } +} +``` + +--- + +## `GET` /api/v1/matching/my-status + +### 개요 +| 항목 | 내용 | +|------|------| +| **설명** | 현재 사용자가 참여 중인 매칭방이 있는지 확인합니다. (앱 실행 시 라우팅용) | +| **UI 매핑** | [앱 실행/스플래시] 결과에 따라 '홈 화면' 또는 '매칭 대기 화면'으로 이동 | +| **인증** | Required | +| **권한** | USER | + +### Method 선택 이유 +> GET - 사용자의 현재 상태 정보를 조회하는 요청이므로 GET을 사용합니다. + +--- + +### Request + +#### Headers +| Key | Value | Required | Description | +|-----|-------|----------|-------------| +| Authorization | Bearer {token} | O | JWT 액세스 토큰 | + +--- + +### Response + +#### 성공 (참여 중인 방 있음) +```json +{ + "code": "SUCCESS", + "message": "현재 참여 중인 매칭이 있습니다.", + "data": { + "isMatching": true, + "matchingId": 101, + "status": "WAITING" + } +} +``` + +#### 성공 (참여 중인 방 없음) +```json +{ + "code": "SUCCESS", + "message": "참여 중인 매칭이 없습니다.", + "data": { + "isMatching": false, + "matchingId": null, + "status": null + } +} +```