Skip to content

Commit c003531

Browse files
committed
[BE] docs: 친구 관련 API Swagger 추가 (#81)
1 parent f530c50 commit c003531

File tree

2 files changed

+113
-2
lines changed

2 files changed

+113
-2
lines changed

src/backend/user-server/src/main/java/com/asyncgate/user_server/controller/FriendController.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.asyncgate.user_server.controller;
22

3+
import com.asyncgate.user_server.controller.docs.FriendControllerDocs;
34
import com.asyncgate.user_server.domain.Friend;
45
import com.asyncgate.user_server.domain.Member;
56
import com.asyncgate.user_server.dto.response.FriendResponse;
@@ -16,13 +17,14 @@
1617
@RestController
1718
@RequiredArgsConstructor
1819
@RequestMapping("/friends")
19-
public class FriendController {
20+
public class FriendController implements FriendControllerDocs {
2021

2122
private final FriendUseCase friendUseCase;
2223

2324
/**
2425
* 회원 검색 (이메일 기준)
2526
*/
27+
@Override
2628
@GetMapping
2729
public SuccessResponse<MemberResponse> searchTarget(final @RequestParam String email) {
2830
Member findMember = friendUseCase.getByEmail(email);
@@ -35,6 +37,7 @@ public SuccessResponse<MemberResponse> searchTarget(final @RequestParam String e
3537
* 친구 요청: 현재 사용자(userId)가 toUserId에게 친구 요청
3638
* URL 예시: POST /friends/request/{toUserId}
3739
*/
40+
@Override
3841
@PostMapping("/request/{toUserId}")
3942
public SuccessResponse<FriendResponse> requestFriend(
4043
final @MemberID String userId,
@@ -50,6 +53,7 @@ public SuccessResponse<FriendResponse> requestFriend(
5053
* 친구 수락: 현재 사용자(userId)가 friendId에 해당하는 친구 요청을 수락
5154
* URL 예시: POST /friends/accept/{friendId}
5255
*/
56+
@Override
5357
@PostMapping("/accept/{friendId}")
5458
public SuccessResponse<FriendResponse> acceptFriend(
5559
final @MemberID String userId,
@@ -65,7 +69,7 @@ public SuccessResponse<FriendResponse> acceptFriend(
6569
* 친구 거절: 현재 사용자(userId)가 friendId에 해당하는 친구 요청을 거절
6670
* URL 예시: POST /friends/reject/{friendId}
6771
*/
68-
72+
@Override
6973
@PostMapping("/reject/{friendId}")
7074
public SuccessResponse<FriendResponse> rejectFriend(
7175
final @MemberID String userId,
@@ -78,6 +82,7 @@ public SuccessResponse<FriendResponse> rejectFriend(
7882
* 친구 삭제(soft delete): 현재 사용자(userId)가 friendId에 해당하는 친구 관계를 soft delete 처리
7983
* URL 예시: DELETE /friends/{friendId}
8084
*/
85+
@Override
8186
@DeleteMapping("/{friendId}")
8287
public SuccessResponse<String> deleteFriend(
8388
final @MemberID String userId,
@@ -91,6 +96,7 @@ public SuccessResponse<String> deleteFriend(
9196
* 본인이 보낸 친구 요청 목록 조회 (상태: PENDING)
9297
* URL 예시: GET /friends/sent
9398
*/
99+
@Override
94100
@GetMapping("/sent")
95101
public SuccessResponse<FriendsResponse> getSentFriendRequests(final @MemberID String userId) {
96102
List<Friend> sent = friendUseCase.getSentFriendRequests(userId);
@@ -103,6 +109,7 @@ public SuccessResponse<FriendsResponse> getSentFriendRequests(final @MemberID St
103109
* 본인이 받은 친구 요청 목록 조회 (상태: PENDING)
104110
* URL 예시: GET /friends/received
105111
*/
112+
@Override
106113
@GetMapping("/received")
107114
public SuccessResponse<FriendsResponse> getReceivedFriendRequests(final @MemberID String userId) {
108115
List<Friend> received = friendUseCase.getReceivedFriendRequests(userId);
@@ -115,6 +122,7 @@ public SuccessResponse<FriendsResponse> getReceivedFriendRequests(final @MemberI
115122
* 본인의 실제 친구 목록 조회 (상태: ACCEPTED)
116123
* URL 예시: GET /friends/list
117124
*/
125+
@Override
118126
@GetMapping("/list")
119127
public SuccessResponse<FriendsResponse> getFriends(final @MemberID String userId) {
120128
List<Friend> friends = friendUseCase.getFriends(userId);
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
package com.asyncgate.user_server.controller.docs;
2+
3+
import com.asyncgate.user_server.dto.response.FriendResponse;
4+
import com.asyncgate.user_server.dto.response.FriendsResponse;
5+
import com.asyncgate.user_server.dto.response.MemberResponse;
6+
import com.asyncgate.user_server.security.annotation.MemberID;
7+
import com.asyncgate.user_server.support.response.SuccessResponse;
8+
import io.swagger.v3.oas.annotations.Operation;
9+
import io.swagger.v3.oas.annotations.Parameter;
10+
import io.swagger.v3.oas.annotations.responses.ApiResponse;
11+
import io.swagger.v3.oas.annotations.responses.ApiResponses;
12+
import org.springframework.web.bind.annotation.*;
13+
14+
public interface FriendControllerDocs {
15+
16+
@Operation(summary = "회원 검색", description = "이메일을 기반으로 회원 정보를 조회합니다.")
17+
@ApiResponses(value = {
18+
@ApiResponse(responseCode = "200", description = "정상적으로 조회되었습니다.")
19+
})
20+
@GetMapping
21+
SuccessResponse<MemberResponse> searchTarget(
22+
@Parameter(description = "검색할 회원의 이메일", required = true)
23+
@RequestParam String email
24+
);
25+
26+
27+
@Operation(summary = "친구 요청", description = "현재 사용자(@MemberID)가 지정된 toUserId에게 친구 요청을 보냅니다.")
28+
@ApiResponses(value = {
29+
@ApiResponse(responseCode = "201", description = "친구 요청이 생성되었습니다.")
30+
})
31+
@PostMapping("/request/{toUserId}")
32+
SuccessResponse<FriendResponse> requestFriend(
33+
@Parameter(hidden = true) @MemberID String userId,
34+
@Parameter(description = "친구 요청 대상의 사용자 ID", required = true)
35+
@PathVariable String toUserId
36+
);
37+
38+
39+
@Operation(summary = "친구 요청 수락", description = "현재 사용자(@MemberID)가 friendId에 해당하는 친구 요청을 수락합니다.")
40+
@ApiResponses(value = {
41+
@ApiResponse(responseCode = "200", description = "친구 요청이 수락되었습니다.")
42+
})
43+
@PostMapping("/accept/{friendId}")
44+
SuccessResponse<FriendResponse> acceptFriend(
45+
@Parameter(hidden = true) @MemberID String userId,
46+
@Parameter(description = "수락할 친구 요청의 ID", required = true)
47+
@PathVariable String friendId
48+
);
49+
50+
51+
@Operation(summary = "친구 요청 거절", description = "현재 사용자(@MemberID)가 friendId에 해당하는 친구 요청을 거절합니다.")
52+
@ApiResponses(value = {
53+
@ApiResponse(responseCode = "200", description = "친구 요청이 거절되었습니다.")
54+
})
55+
@PostMapping("/reject/{friendId}")
56+
SuccessResponse<FriendResponse> rejectFriend(
57+
@Parameter(hidden = true) @MemberID String userId,
58+
@Parameter(description = "거절할 친구 요청의 ID", required = true)
59+
@PathVariable String friendId
60+
);
61+
62+
63+
@Operation(summary = "친구 삭제", description = "현재 사용자(@MemberID)가 friendId에 해당하는 친구 관계를 삭제(soft delete)합니다.")
64+
@ApiResponses(value = {
65+
@ApiResponse(responseCode = "200", description = "친구 관계가 삭제되었습니다.")
66+
})
67+
@DeleteMapping("/{friendId}")
68+
SuccessResponse<String> deleteFriend(
69+
@Parameter(hidden = true) @MemberID String userId,
70+
@Parameter(description = "삭제할 친구 관계의 ID", required = true)
71+
@PathVariable String friendId
72+
);
73+
74+
75+
@Operation(summary = "보낸 친구 요청 목록 조회", description = "현재 사용자(@MemberID)가 보낸 친구 요청 목록(PENDING)을 조회합니다.")
76+
@ApiResponses(value = {
77+
@ApiResponse(responseCode = "200", description = "보낸 친구 요청 목록이 조회되었습니다.")
78+
})
79+
@GetMapping("/sent")
80+
SuccessResponse<FriendsResponse> getSentFriendRequests(
81+
@Parameter(hidden = true) @MemberID String userId
82+
);
83+
84+
85+
@Operation(summary = "받은 친구 요청 목록 조회", description = "현재 사용자(@MemberID)가 받은 친구 요청 목록(PENDING)을 조회합니다.")
86+
@ApiResponses(value = {
87+
@ApiResponse(responseCode = "200", description = "받은 친구 요청 목록이 조회되었습니다.")
88+
})
89+
@GetMapping("/received")
90+
SuccessResponse<FriendsResponse> getReceivedFriendRequests(
91+
@Parameter(hidden = true) @MemberID String userId
92+
);
93+
94+
95+
@Operation(summary = "친구 목록 조회", description = "현재 사용자(@MemberID)의 실제 친구 목록(ACCEPTED)을 조회합니다.")
96+
@ApiResponses(value = {
97+
@ApiResponse(responseCode = "200", description = "친구 목록이 조회되었습니다.")
98+
})
99+
@GetMapping("/list")
100+
SuccessResponse<FriendsResponse> getFriends(
101+
@Parameter(hidden = true) @MemberID String userId
102+
);
103+
}

0 commit comments

Comments
 (0)