diff --git a/src/main/java/com/example/ReviewZIP/domain/token/RefreshTokenService.java b/src/main/java/com/example/ReviewZIP/domain/token/RefreshTokenService.java index 62b9ceb..a6273df 100644 --- a/src/main/java/com/example/ReviewZIP/domain/token/RefreshTokenService.java +++ b/src/main/java/com/example/ReviewZIP/domain/token/RefreshTokenService.java @@ -8,6 +8,7 @@ import com.example.ReviewZIP.domain.token.dto.response.TokenDto; import com.example.ReviewZIP.domain.user.Status; import com.example.ReviewZIP.domain.user.Users; +import com.example.ReviewZIP.domain.user.UsersConverter; import com.example.ReviewZIP.domain.user.UsersRepository; import com.example.ReviewZIP.global.jwt.JwtProvider; import com.example.ReviewZIP.global.response.code.resultCode.ErrorStatus; @@ -47,6 +48,8 @@ public class RefreshTokenService { private final JwtProvider jwtProvider; private final RefreshTokenRepository refreshTokenRepository; + private static final String DEFAULT_PROFILE_URL = "https://reviewzipbucket.s3.ap-northeast-2.amazonaws.com/ReviewImage/911a02f0-206c-4fb0-b287-f49b58429526.png"; + @Transactional public SignUpResponseDto signUp(SignUpRequestDto signUpRequestDto) { if(usersRepository.existsByEmail(signUpRequestDto.getEmail())) { @@ -55,7 +58,7 @@ public SignUpResponseDto signUp(SignUpRequestDto signUpRequestDto) { signUpRequestDto.setPassword(encodePassword(signUpRequestDto.getPassword())); - return SignUpResponseDto.signUpResponseDto(usersRepository.save(Users.toEntity(signUpRequestDto))); + return SignUpResponseDto.signUpResponseDto(usersRepository.save(UsersConverter.toSignUpDto(signUpRequestDto))); } public String encodePassword(String password) { @@ -105,7 +108,7 @@ public Long createUser(String id, String nickname, String email){ .name(nickname) .email(email) .status(Status.ENABLED) - .profileUrl("https://reviewzipbucket.s3.ap-northeast-2.amazonaws.com/ReviewImage/911a02f0-206c-4fb0-b287-f49b58429526.png") + .profileUrl(DEFAULT_PROFILE_URL) .build(); usersRepository.save(newUser); diff --git a/src/main/java/com/example/ReviewZIP/domain/user/Users.java b/src/main/java/com/example/ReviewZIP/domain/user/Users.java index 888854e..79b6383 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/Users.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/Users.java @@ -79,14 +79,4 @@ public class Users extends BaseEntity { @OneToMany(mappedBy = "user") private Set userStores = new HashSet<>(); - public static Users toEntity(SignUpRequestDto signUpRequestDto) { - return Users.builder() - .name(signUpRequestDto.getName()) - .email(signUpRequestDto.getEmail()) - .password(signUpRequestDto.getPassword()) - .nickname(signUpRequestDto.getNickname()) - .phoneNum(signUpRequestDto.getPhoneNum()) - .status(Status.ENABLED) - .build(); - } } diff --git a/src/main/java/com/example/ReviewZIP/domain/user/UsersController.java b/src/main/java/com/example/ReviewZIP/domain/user/UsersController.java index 3b0dffb..f4452a4 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/UsersController.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/UsersController.java @@ -1,6 +1,7 @@ package com.example.ReviewZIP.domain.user; import com.example.ReviewZIP.domain.follow.Follows; +import com.example.ReviewZIP.domain.image.ImagesService; import com.example.ReviewZIP.domain.post.Posts; import com.example.ReviewZIP.domain.post.dto.response.PostResponseDto; import com.example.ReviewZIP.domain.scrab.Scrabs; @@ -11,7 +12,6 @@ import com.example.ReviewZIP.domain.userStores.dto.response.UserStoresResponseDto; import com.example.ReviewZIP.global.response.ApiResponse; import com.example.ReviewZIP.global.response.code.resultCode.SuccessStatus; -import com.example.ReviewZIP.global.security.UserDetailsServiceImpl; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameters; @@ -33,6 +33,7 @@ public class UsersController { private final UsersService usersService; private final UserStoresService userStoresService; + private final ImagesService imagesService; @GetMapping("/{userId}/stores") @Operation(summary = "특정 유저의 관심 장소 목록 API",description = "특정 유저의 관심 장소 목록을 가져온다, 반환 시 StoreInfoListDto 사용") @@ -228,27 +229,26 @@ public ApiResponse getUserInfo(@AuthenticationPrinc } @PatchMapping("/me/profileUrl") - @Operation(summary = "프로필 이미지 수정하기 API", description = "프로필 이미지 수정하기, UserProfileDto 사용") + @Operation(summary = "프로필 이미지 수정하기 API", description = "프로필 이미지 수정하기, UserProfileImageDto 사용") @ApiResponses({ @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "COMMON200", description = "OK, 성공"), @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "USER404", description = "유저가 존재하지 않습니다",content = @Content(schema = @Schema(implementation = ApiResponse.class))), + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "IMAGE403", description = "프로필 이미지가 존재하지 않습니다.",content = @Content(schema = @Schema(implementation = ApiResponse.class))), }) - public ApiResponse updateProfileUrl(@RequestBody UserRequestDto.UserProfileUrlDto userProfileUrlDto){ - - UserRequestDto.UserProfileUrlDto ProfileUrlDto = usersService.updateProfileUrl(1L, userProfileUrlDto); - return ApiResponse.onSuccess(ProfileUrlDto); + public ApiResponse updateProfileImage(@AuthenticationPrincipal UserDetails user, @RequestBody UserRequestDto.UserProfileImageDto userProfileImageDto){ + usersService.updateProfileImage(usersService.getUserId(user), userProfileImageDto); + return ApiResponse.onSuccess(SuccessStatus._OK); } @PatchMapping("/me/nickname") - @Operation(summary = "닉네임 수정하기 API", description = "마이페이지 닉네임 수정하기, UserNicknameDto 사용") + @Operation(summary = "프로필 닉네임 수정하기 API", description = "프로필 닉네임 수정하기, UserNicknameDto 사용") @ApiResponses({ @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "COMMON200", description = "OK, 성공"), @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "USER404", description = "유저가 존재하지 않습니다", content = @Content(schema = @Schema(implementation = ApiResponse.class))), }) - public ApiResponse updateUserNickname(@RequestBody UserRequestDto.UserNicknameDto userNicknameDto) { - - UserRequestDto.UserNicknameDto NicknameDto = usersService.updateUserNickname(1L, userNicknameDto); - return ApiResponse.onSuccess(NicknameDto); + public ApiResponse updateUserNickname(@AuthenticationPrincipal UserDetails user, @RequestBody UserRequestDto.UserNicknameDto userNicknameDto) { + usersService.updateUserNickname(usersService.getUserId(user), userNicknameDto); + return ApiResponse.onSuccess(SuccessStatus._OK); } @DeleteMapping("/{userId}") diff --git a/src/main/java/com/example/ReviewZIP/domain/user/UsersConverter.java b/src/main/java/com/example/ReviewZIP/domain/user/UsersConverter.java index 943b3d4..252ac86 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/UsersConverter.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/UsersConverter.java @@ -2,9 +2,9 @@ import com.example.ReviewZIP.domain.follow.Follows; import com.example.ReviewZIP.domain.postHashtag.PostHashtags; -import com.example.ReviewZIP.domain.postHashtag.PostHashtagsRepository; import com.example.ReviewZIP.domain.searchHistory.SearchHistories; import com.example.ReviewZIP.domain.searchHistory.SearchType; +import com.example.ReviewZIP.domain.token.dto.request.SignUpRequestDto; import com.example.ReviewZIP.domain.user.dto.response.UserResponseDto; import com.example.ReviewZIP.global.response.code.resultCode.ErrorStatus; import com.example.ReviewZIP.global.response.exception.handler.SearchHandler; @@ -16,6 +16,7 @@ public class UsersConverter { + private static final String DEFAULT_PROFILE_URL = "https://reviewzipbucket.s3.ap-northeast-2.amazonaws.com/ReviewImage/911a02f0-206c-4fb0-b287-f49b58429526.png"; public static UserResponseDto.UserPreviewDto toUserPreviewDto(Users user, List followingIdList) { boolean following = followingIdList.contains(user.getId()); @@ -107,9 +108,6 @@ public static UserResponseDto.PostHashtagsPreviewDto toHashtagPreviewDto(String .tagName(hashtag) .postNum(postHashtagsRepositoryList.size()) .build(); - - - } public static UserResponseDto.HistoryDto toHistoryDto(SearchHistories history, List followingIdList){ @@ -138,4 +136,16 @@ public static List toHistoryDtoList(ListtoHistoryDto(history, followingIdList)) .collect(Collectors.toList()); } + + public static Users toSignUpDto(SignUpRequestDto signUpRequestDto) { + return Users.builder() + .name(signUpRequestDto.getName()) + .email(signUpRequestDto.getEmail()) + .password(signUpRequestDto.getPassword()) + .nickname(signUpRequestDto.getNickname()) + .phoneNum(signUpRequestDto.getPhoneNum()) + .profileUrl(DEFAULT_PROFILE_URL) + .status(Status.ENABLED) + .build(); + } } diff --git a/src/main/java/com/example/ReviewZIP/domain/user/UsersRepository.java b/src/main/java/com/example/ReviewZIP/domain/user/UsersRepository.java index 19c134b..3412434 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/UsersRepository.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/UsersRepository.java @@ -23,5 +23,5 @@ public interface UsersRepository extends JpaRepository { boolean existsBySocial(String social); Optional findBySocial(String social); - Optional findByPhoneNum(String phoneNum); + List findByPhoneNum(String phoneNum); } diff --git a/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java b/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java index 2eb75ab..c00919d 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java @@ -2,6 +2,8 @@ import com.example.ReviewZIP.domain.follow.Follows; import com.example.ReviewZIP.domain.follow.FollowsRepository; +import com.example.ReviewZIP.domain.image.Images; +import com.example.ReviewZIP.domain.image.ImagesRepository; import com.example.ReviewZIP.domain.post.Posts; import com.example.ReviewZIP.domain.post.PostsConverter; import com.example.ReviewZIP.domain.post.PostsRepository; @@ -13,17 +15,15 @@ import com.example.ReviewZIP.domain.user.dto.request.UserRequestDto; import com.example.ReviewZIP.domain.user.dto.response.UserResponseDto; import com.example.ReviewZIP.global.response.code.resultCode.ErrorStatus; +import com.example.ReviewZIP.global.response.exception.handler.ImagesHandler; import com.example.ReviewZIP.global.response.exception.handler.PostsHandler; import com.example.ReviewZIP.global.response.exception.handler.UsersHandler; -import com.example.ReviewZIP.global.s3.S3Service; -import com.example.ReviewZIP.global.s3.dto.S3Result; import com.example.ReviewZIP.global.security.UserDetailsImpl; import com.example.ReviewZIP.global.security.UserDetailsServiceImpl; import lombok.RequiredArgsConstructor; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import org.springframework.web.multipart.MultipartFile; import java.time.Duration; import java.time.LocalDateTime; @@ -44,6 +44,7 @@ public class UsersService { private final PostsRepository postsRepository; private final ScrabsRepository scrabsRepository; private final PostLikesRepository postLikesRepository; + private final ImagesRepository imagesRepository; private final UserDetailsServiceImpl userDetailsService; public Long getUserId(UserDetails user){ @@ -98,14 +99,18 @@ public UserResponseDto.UserInfoDto getUserInfo(String email){ return UsersConverter.toUserInfoDto(usersRepository.findByEmail(email).orElseThrow(() -> new UsersHandler(ErrorStatus.USER_NOT_FOUND))); } - public UserRequestDto.UserProfileUrlDto updateProfileUrl(Long userId, UserRequestDto.UserProfileUrlDto userProfileUrlDto){ + @Transactional + public UserRequestDto.UserProfileImageDto updateProfileImage(Long userId, UserRequestDto.UserProfileImageDto userProfileUrlDto){ Users user = usersRepository.findById(userId).orElseThrow(() -> new UsersHandler(ErrorStatus.USER_NOT_FOUND)); - user.setProfileUrl(userProfileUrlDto.getProfileUrl()); + Images image = imagesRepository.findById(userProfileUrlDto.getImageId()).orElseThrow(() -> new ImagesHandler(ErrorStatus.IMAGE_NOT_PROVIDED)); + + user.setProfileUrl(image.getUrl()); usersRepository.save(user); return userProfileUrlDto; } + @Transactional public UserRequestDto.UserNicknameDto updateUserNickname(Long userId, UserRequestDto.UserNicknameDto userNicknameDto){ Users user = usersRepository.findById(userId).orElseThrow(() -> new UsersHandler(ErrorStatus.USER_NOT_FOUND)); user.setNickname(userNicknameDto.getNickname()); diff --git a/src/main/java/com/example/ReviewZIP/domain/user/dto/request/UserRequestDto.java b/src/main/java/com/example/ReviewZIP/domain/user/dto/request/UserRequestDto.java index 17cc146..fcdd115 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/dto/request/UserRequestDto.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/dto/request/UserRequestDto.java @@ -11,8 +11,8 @@ public class UserRequestDto { @Getter @NoArgsConstructor @AllArgsConstructor - public static class UserProfileUrlDto { - private String profileUrl; + public static class UserProfileImageDto { + private Long imageId; } @Builder @@ -22,5 +22,4 @@ public static class UserProfileUrlDto { public static class UserNicknameDto { private String nickname; } - } diff --git a/src/main/java/com/example/ReviewZIP/global/sms/SmsService.java b/src/main/java/com/example/ReviewZIP/global/sms/SmsService.java index 484938f..1ba41a2 100644 --- a/src/main/java/com/example/ReviewZIP/global/sms/SmsService.java +++ b/src/main/java/com/example/ReviewZIP/global/sms/SmsService.java @@ -52,6 +52,8 @@ public void resetPassword(SmsDto.PasswordResetRequestDto requestDto) { } String encodedPassword = passwordEncoder.encode(requestDto.getPassword()); Users user = usersRepository.findByPhoneNum(requestDto.getPhoneNum()) + .stream() + .findFirst() .orElseThrow(() -> new UsersHandler(ErrorStatus.USER_NOT_FOUND)); user.setPassword(encodedPassword); usersRepository.save(user);