Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
@RestController
@RequiredArgsConstructor
@RequestMapping("/api/users")
@Tag(name = "User", description = "사용자 관련 API")
public class UserRestController {
private final UserService userService;

Expand All @@ -38,8 +39,19 @@ public ApiResponse<UserResponseDTO.ProfileDto> myIcon(HttpServletRequest request
@Operation(summary = "해당 프로필의 유저를 차단 목록에 추가합니다.")
@PostMapping("/{userId}/profile/block")
@Tag(name = "User", description = "사용자 관련 API")
public ApiResponse<UserResponseDTO.UserBlockResponseDto> blockUser(HttpServletRequest request,@PathVariable Long userId) {
public ApiResponse<UserResponseDTO.UserActionResponseDto> blockUser(HttpServletRequest request, @PathVariable Long userId) {
return ApiResponse.onSuccess(userService.blockUser(request,userId));
}

@Operation(summary = "팔로잉")
@PostMapping("/follow/{userId}")
public ApiResponse<UserResponseDTO.UserActionResponseDto> followUser(HttpServletRequest request, @PathVariable Long userId) {
return ApiResponse.onSuccess(userService.followUser(request,userId));
}
@Operation(summary = "팔로잉 취소")
@DeleteMapping("/follow/{userId}")
public ApiResponse<UserResponseDTO.UserActionResponseDto> unfollowUser(HttpServletRequest request, @PathVariable Long userId) {
return ApiResponse.onSuccess(userService.unfollowUser(request,userId));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -83,10 +83,17 @@ public static SearchResponseDTO.GetAccountResponseDto toAccountDto(User user) {
.build();
}

public static UserResponseDTO.UserBlockResponseDto toUserBlockResponseDto(UserBlock userBlock) {
return UserResponseDTO.UserBlockResponseDto.builder()
public static UserResponseDTO.UserActionResponseDto toUserActionResponseDto(UserBlock userBlock) {
return UserResponseDTO.UserActionResponseDto.builder()
.userId(userBlock.getUser().getId())
.targetUserId(userBlock.getBlockedUser().getId())
.build();
}

public static UserResponseDTO.UserActionResponseDto toUserActionResponseDto(UserFollow userFollow) {
return UserResponseDTO.UserActionResponseDto.builder()
.userId(userFollow.getUser().getId())
.targetUserId(userFollow.getTargetUser().getId())
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,11 @@ public static class UserIconListResponseDto{
@Builder
@AllArgsConstructor
@NoArgsConstructor
public static class UserBlockResponseDto{
public static class UserActionResponseDto {
Long userId;
Long targetUserId;
}



}
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,6 @@ public interface UserFollowRepository extends JpaRepository<UserFollow,Long> {
WHERE uf.user.id = :userId
""")
List<Long> findFollowingUserIds(@Param("userId") Long userId);

UserFollow findByUserAndTargetUser(User user, User target);
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,13 @@ public interface UserService {
LoginResponseDTO loginUser(LoginRequestDTO request);
UserResponseDTO.UserIconListResponseDto followingUserIconList(HttpServletRequest request, int page, int size);
UserResponseDTO.ProfileDto getMyIcon(HttpServletRequest request);
UserResponseDTO.UserBlockResponseDto blockUser(HttpServletRequest request,Long targetUserId);
UserResponseDTO.UserActionResponseDto blockUser(HttpServletRequest request, Long targetUserId);
boolean isEmailDuplicate(String email);
boolean isnameIdDuplicate(String nameId);
// UserQueryService
UserInfoDTO getUserInfo(HttpServletRequest request);

UserResponseDTO.UserActionResponseDto followUser(HttpServletRequest request, Long targetUserId);
UserResponseDTO.UserActionResponseDto unfollowUser(HttpServletRequest request, Long targetUserId);
User getLoginUser(HttpServletRequest request);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,13 @@
import org.springframework.data.domain.PageRequest;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Collections;

import static EatPic.spring.global.common.code.status.ErrorStatus.USER_NOT_FOUND;
import static EatPic.spring.global.common.code.status.ErrorStatus.*;

@Service
@RequiredArgsConstructor
Expand Down Expand Up @@ -147,7 +146,7 @@ public UserResponseDTO.ProfileDto getMyIcon(HttpServletRequest request) {

// 유저 차단
@Transactional
public UserResponseDTO.UserBlockResponseDto blockUser(HttpServletRequest request,Long targetUserId) {
public UserResponseDTO.UserActionResponseDto blockUser(HttpServletRequest request, Long targetUserId) {
User user = getLoginUser(request);
User targetUser = userRepository.findById(targetUserId)
.orElseThrow(() -> new ExceptionHandler(USER_NOT_FOUND));
Expand All @@ -159,7 +158,7 @@ public UserResponseDTO.UserBlockResponseDto blockUser(HttpServletRequest request

userBlockRepository.save(userBlock);

return UserConverter.toUserBlockResponseDto(userBlock);
return UserConverter.toUserActionResponseDto(userBlock);
}

// 이메일 중복 검사
Expand All @@ -180,4 +179,34 @@ public User getLoginUser(HttpServletRequest request) {
return userRepository.findByEmail(email)
.orElseThrow(() -> new ExceptionHandler(ErrorStatus.MEMBER_NOT_FOUND));
}

@Override
public UserResponseDTO.UserActionResponseDto unfollowUser(HttpServletRequest request, Long targetUserId) {
User user = getLoginUser(request);
User target = userRepository.findUserById(targetUserId);

UserFollow prev = userFollowRepository.findByUserAndTargetUser(user,target);
if(prev == null) {
throw new ExceptionHandler(ErrorStatus.FOLLOW_NOT_EXISTS);
}

UserFollow follow = UserFollow.builder().user(user).targetUser(target).build();
userFollowRepository.delete(follow);
return UserConverter.toUserActionResponseDto(follow);
}

@Override
public UserResponseDTO.UserActionResponseDto followUser(HttpServletRequest request, Long targetUserId) {
User user = getLoginUser(request);
User target = userRepository.findUserById(targetUserId);

UserFollow prev = userFollowRepository.findByUserAndTargetUser(user,target);
UserFollow follow = UserFollow.builder().user(user).targetUser(target).build();
if(prev!=null && prev.getTargetUser().getId().equals(targetUserId)) {
throw new ExceptionHandler(FOLLOW_ALREADY_EXISTS);
}

userFollowRepository.save(follow);
return UserConverter.toUserActionResponseDto(follow);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,11 @@ public enum ErrorStatus implements BaseErrorCode {
MEMBER_NOT_FOUND(HttpStatus.BAD_REQUEST, "USER_404", "사용자가 없습니다."),
INVALID_PASSWORD(HttpStatus.BAD_REQUEST, "USER_401", "비밀번호가 불일치합니다."),
INVALID_TOKEN(HttpStatus.BAD_REQUEST, "USER_403", "유효하지 않은 토큰입니다."),
DUPLICATE_JOIN_REQUEST(HttpStatus.BAD_REQUEST, "USER_400", "해당 이메일로 이미 가입된 사용자가 존재합니다.");
DUPLICATE_JOIN_REQUEST(HttpStatus.BAD_REQUEST, "USER_400", "해당 이메일로 이미 가입된 사용자가 존재합니다."),

// 팔로우 관련 응답
FOLLOW_ALREADY_EXISTS(HttpStatus.BAD_REQUEST, "FOLLOW_001", "이미 팔로잉 중입니다"),
FOLLOW_NOT_EXISTS(HttpStatus.BAD_REQUEST, "FOLLOW_002", "팔로우 기록이 없습니다");

private final HttpStatus httpStatus;
private final String code;
Expand Down
Loading