diff --git a/yakssok/src/main/java/server/yakssok/domain/friend/application/service/FriendService.java b/yakssok/src/main/java/server/yakssok/domain/friend/application/service/FriendService.java index a62e2ee..bbbc766 100644 --- a/yakssok/src/main/java/server/yakssok/domain/friend/application/service/FriendService.java +++ b/yakssok/src/main/java/server/yakssok/domain/friend/application/service/FriendService.java @@ -9,7 +9,6 @@ import server.yakssok.domain.friend.domain.entity.Friend; import server.yakssok.domain.friend.domain.repository.FriendRepository; import server.yakssok.domain.friend.presentation.dto.request.FollowFriendRequest; -import server.yakssok.domain.friend.presentation.dto.response.FollowFriendResponse; import server.yakssok.domain.friend.presentation.dto.response.FollowerInfoGroupResponse; import server.yakssok.domain.friend.presentation.dto.response.FollowerInfoResponse; import server.yakssok.domain.friend.presentation.dto.response.FollowingInfoGroupResponse; @@ -34,16 +33,6 @@ public void followFriendByInviteCode(Long userId, FollowFriendRequest followFrie followEachOther(followFriendRequest, user, following); } - @Transactional - public FollowFriendResponse followFriendByInviteCodeV2(Long userId, FollowFriendRequest followFriendRequest) { - String inviteCode = followFriendRequest.inviteCode(); - User following = userService.getUserIdByInviteCode(inviteCode); - User user = userService.getActiveUser(userId); - relationshipService.validateCanFollow(user.getId(), following.getId()); - followEachOther(followFriendRequest, user, following); - return FollowFriendResponse.of(following); - } - private void followEachOther(FollowFriendRequest followFriendRequest, User user, User following) { Friend userToFollowing = followFriendRequest.toFriend(user, following); Friend followingToUser = followFriendRequest.toFriend(following, user); diff --git a/yakssok/src/main/java/server/yakssok/domain/friend/application/service/FriendServiceV2.java b/yakssok/src/main/java/server/yakssok/domain/friend/application/service/FriendServiceV2.java new file mode 100644 index 0000000..b870630 --- /dev/null +++ b/yakssok/src/main/java/server/yakssok/domain/friend/application/service/FriendServiceV2.java @@ -0,0 +1,40 @@ +package server.yakssok.domain.friend.application.service; + +import java.util.List; + +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import lombok.RequiredArgsConstructor; +import server.yakssok.domain.friend.domain.entity.Friend; +import server.yakssok.domain.friend.domain.repository.FriendRepository; +import server.yakssok.domain.friend.presentation.dto.request.FollowFriendRequestV2; +import server.yakssok.domain.friend.presentation.dto.response.FollowFriendResponse; +import server.yakssok.domain.user.application.service.UserService; +import server.yakssok.domain.user.domain.entity.User; + +@Service +@RequiredArgsConstructor +public class FriendServiceV2 { + + private final UserService userService; + private final RelationshipService relationshipService; + private final FriendRepository friendRepository; + + @Transactional + public FollowFriendResponse followFriendByInviteCode(Long userId, FollowFriendRequestV2 followFriendRequest) { + String inviteCode = followFriendRequest.inviteCode(); + User following = userService.getUserIdByInviteCode(inviteCode); + User user = userService.getActiveUser(userId); + relationshipService.validateCanFollow(user.getId(), following.getId()); + followEachOther(followFriendRequest, user, following); + return FollowFriendResponse.of(following); + } + + private void followEachOther(FollowFriendRequestV2 followFriendRequest, User user, User following) { + Friend userToFollowing = followFriendRequest.toFriend(user, following); + Friend followingToUser = followFriendRequest.toFriend(following, user); + friendRepository.saveAll(List.of(userToFollowing, followingToUser)); + } +} + diff --git a/yakssok/src/main/java/server/yakssok/domain/friend/presentation/controller/FriendControllerV2.java b/yakssok/src/main/java/server/yakssok/domain/friend/presentation/controller/FriendControllerV2.java index 1a8a387..ab599aa 100644 --- a/yakssok/src/main/java/server/yakssok/domain/friend/presentation/controller/FriendControllerV2.java +++ b/yakssok/src/main/java/server/yakssok/domain/friend/presentation/controller/FriendControllerV2.java @@ -10,8 +10,8 @@ import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; -import server.yakssok.domain.friend.application.service.FriendService; -import server.yakssok.domain.friend.presentation.dto.request.FollowFriendRequest; +import server.yakssok.domain.friend.application.service.FriendServiceV2; +import server.yakssok.domain.friend.presentation.dto.request.FollowFriendRequestV2; import server.yakssok.domain.friend.presentation.dto.response.FollowFriendResponse; import server.yakssok.global.common.reponse.ApiResponse; import server.yakssok.global.common.security.YakssokUserDetails; @@ -24,7 +24,7 @@ @RequiredArgsConstructor @RequestMapping("/api/v2/friends") public class FriendControllerV2 { - private final FriendService friendService; + private final FriendServiceV2 friendServicev2; @Operation(summary = "지인 팔로우") @ApiErrorResponses(value = { @@ -33,11 +33,11 @@ public class FriendControllerV2 { }) @PostMapping public ApiResponse followByInviteCode( - @RequestBody @Valid FollowFriendRequest followRequest, + @RequestBody @Valid FollowFriendRequestV2 followRequest, @AuthenticationPrincipal YakssokUserDetails userDetails ) { Long userId = userDetails.getUserId(); - FollowFriendResponse followFriendResponse = friendService.followFriendByInviteCodeV2(userId, followRequest); + FollowFriendResponse followFriendResponse = friendServicev2.followFriendByInviteCode(userId, followRequest); return ApiResponse.success(followFriendResponse); } diff --git a/yakssok/src/main/java/server/yakssok/domain/friend/presentation/dto/request/FollowFriendRequestV2.java b/yakssok/src/main/java/server/yakssok/domain/friend/presentation/dto/request/FollowFriendRequestV2.java new file mode 100644 index 0000000..24312ec --- /dev/null +++ b/yakssok/src/main/java/server/yakssok/domain/friend/presentation/dto/request/FollowFriendRequestV2.java @@ -0,0 +1,17 @@ +package server.yakssok.domain.friend.presentation.dto.request; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; +import server.yakssok.domain.friend.domain.entity.Friend; +import server.yakssok.domain.user.domain.entity.User; + +@Schema(description = "지인 팔로우") +public record FollowFriendRequestV2( + @Schema(description = "팔로우 할 사람의 초대 코드", example = "AWsaZP8cq") + @NotNull + String inviteCode +) { + public Friend toFriend(User user, User following) { + return Friend.create(user, following); + } +}