Skip to content

Commit a703f22

Browse files
authored
Merge pull request #99 from Central-MakeUs/refactor/friend
feat: v2 메이트 추가 api
2 parents 1174756 + 33b6997 commit a703f22

File tree

4 files changed

+72
-3
lines changed

4 files changed

+72
-3
lines changed

yakssok/src/main/java/server/yakssok/domain/friend/application/service/FriendService.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import server.yakssok.domain.friend.domain.entity.Friend;
1010
import server.yakssok.domain.friend.domain.repository.FriendRepository;
1111
import server.yakssok.domain.friend.presentation.dto.request.FollowFriendRequest;
12+
import server.yakssok.domain.friend.presentation.dto.response.FollowFriendResponse;
1213
import server.yakssok.domain.friend.presentation.dto.response.FollowerInfoGroupResponse;
1314
import server.yakssok.domain.friend.presentation.dto.response.FollowerInfoResponse;
1415
import server.yakssok.domain.friend.presentation.dto.response.FollowingInfoGroupResponse;
@@ -33,6 +34,16 @@ public void followFriendByInviteCode(Long userId, FollowFriendRequest followFrie
3334
followEachOther(followFriendRequest, user, following);
3435
}
3536

37+
@Transactional
38+
public FollowFriendResponse followFriendByInviteCodeV2(Long userId, FollowFriendRequest followFriendRequest) {
39+
String inviteCode = followFriendRequest.inviteCode();
40+
User following = userService.getUserIdByInviteCode(inviteCode);
41+
User user = userService.getActiveUser(userId);
42+
relationshipService.validateCanFollow(user.getId(), following.getId());
43+
followEachOther(followFriendRequest, user, following);
44+
return FollowFriendResponse.of(following);
45+
}
46+
3647
private void followEachOther(FollowFriendRequest followFriendRequest, User user, User following) {
3748
Friend userToFollowing = followFriendRequest.toFriend(user, following);
3849
Friend followingToUser = followFriendRequest.toFriend(following, user);

yakssok/src/main/java/server/yakssok/domain/friend/presentation/controller/FriendController.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33

44
import org.springframework.security.core.annotation.AuthenticationPrincipal;
55
import org.springframework.web.bind.annotation.GetMapping;
6-
import org.springframework.web.bind.annotation.PathVariable;
76
import org.springframework.web.bind.annotation.PostMapping;
87
import org.springframework.web.bind.annotation.RequestBody;
98
import org.springframework.web.bind.annotation.RequestMapping;
@@ -25,7 +24,7 @@
2524
import server.yakssok.global.common.swagger.ApiErrorResponses;
2625
import server.yakssok.global.exception.ErrorCode;
2726

28-
@Tag(name = "Friend", description = "지인 API")
27+
@Tag(name = "Friend", description = "친구 API")
2928
@RestController
3029
@RequiredArgsConstructor
3130
@RequestMapping("/api/friends")
@@ -34,7 +33,6 @@ public class FriendController {
3433
private final FriendService friendService;
3534
private final FollowingMedicationStatusService followingMedicationStatusService;
3635

37-
3836
@Operation(summary = "지인 팔로우")
3937
@ApiErrorResponses(value = {
4038
@ApiErrorResponse(ErrorCode.ALREADY_FRIEND),
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package server.yakssok.domain.friend.presentation.controller;
2+
3+
import org.springframework.security.core.annotation.AuthenticationPrincipal;
4+
import org.springframework.web.bind.annotation.PostMapping;
5+
import org.springframework.web.bind.annotation.RequestBody;
6+
import org.springframework.web.bind.annotation.RequestMapping;
7+
import org.springframework.web.bind.annotation.RestController;
8+
9+
import io.swagger.v3.oas.annotations.Operation;
10+
import io.swagger.v3.oas.annotations.tags.Tag;
11+
import jakarta.validation.Valid;
12+
import lombok.RequiredArgsConstructor;
13+
import server.yakssok.domain.friend.application.service.FriendService;
14+
import server.yakssok.domain.friend.presentation.dto.request.FollowFriendRequest;
15+
import server.yakssok.domain.friend.presentation.dto.response.FollowFriendResponse;
16+
import server.yakssok.global.common.reponse.ApiResponse;
17+
import server.yakssok.global.common.security.YakssokUserDetails;
18+
import server.yakssok.global.common.swagger.ApiErrorResponse;
19+
import server.yakssok.global.common.swagger.ApiErrorResponses;
20+
import server.yakssok.global.exception.ErrorCode;
21+
22+
@Tag(name = "Friend", description = "친구 API V2")
23+
@RestController
24+
@RequiredArgsConstructor
25+
@RequestMapping("/api/v2/friends")
26+
public class FriendControllerV2 {
27+
private final FriendService friendService;
28+
29+
@Operation(summary = "지인 팔로우")
30+
@ApiErrorResponses(value = {
31+
@ApiErrorResponse(ErrorCode.ALREADY_FRIEND),
32+
@ApiErrorResponse(ErrorCode.INVALID_INVITE_CODE),
33+
})
34+
@PostMapping
35+
public ApiResponse<FollowFriendResponse> followByInviteCode(
36+
@RequestBody @Valid FollowFriendRequest followRequest,
37+
@AuthenticationPrincipal YakssokUserDetails userDetails
38+
) {
39+
Long userId = userDetails.getUserId();
40+
FollowFriendResponse followFriendResponse = friendService.followFriendByInviteCodeV2(userId, followRequest);
41+
return ApiResponse.success(followFriendResponse);
42+
}
43+
44+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package server.yakssok.domain.friend.presentation.dto.response;
2+
3+
import io.swagger.v3.oas.annotations.media.Schema;
4+
import server.yakssok.domain.user.domain.entity.User;
5+
6+
public record FollowFriendResponse(
7+
@Schema(description = "닉네임", example = "노을")
8+
String nickname,
9+
@Schema(description = "프로필 이미지 URL", example = "https://example.com/profile.jpg")
10+
String profileImageUrl
11+
) {
12+
13+
public static FollowFriendResponse of(User following) {
14+
return new FollowFriendResponse(following.getNickName(), following.getProfileImageUrl());
15+
}
16+
}

0 commit comments

Comments
 (0)