Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Fix] url 수정, userUpdate http 메서드 변경 #106

Merged
merged 9 commits into from
Jul 17, 2024
23 changes: 12 additions & 11 deletions src/main/java/me/snaptime/profile/controller/ProfileController.java
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,10 @@ public class ProfileController {
@Operation(summary = "유저 앨범, 스냅 조회", description = "유저의 앨범들과, 각 앨범의 스냅들을 조회합니다." +
"<br> 자신의 프로필 조회 -> 앨범 당 private, public 관계 없이 최근 snap 2개 리턴" +
"<br> 다른 사람의 프로필 조회 -> snap이 전부 private이거나 없는 경우 앨범 리턴 x 그리고 private 인 snap 리턴 x")
@Parameter(name = "login_id", description = "앨범과 사진들을 가져오기 위한 loginId", required = true)
@GetMapping("/album_snap")
@Parameter(name = "loginId", description = "앨범과 사진들을 가져오기 위한 loginId", required = true)
@GetMapping("/album-snap")
public ResponseEntity<CommonResponseDto<List<AlbumSnapResDto>>> getAlbumSnap(@AuthenticationPrincipal UserDetails principal,
@RequestParam("login_id")
@RequestParam("loginId")
@NotBlank(message = "로그인 아이디 입력은 필수입니다.") String targetLoginId){
String yourLoginId = principal.getUsername();
List<AlbumSnapResDto> albumSnapResDtoList = profileService.getAlbumSnap(yourLoginId, targetLoginId);
Expand All @@ -55,11 +55,12 @@ public ResponseEntity<CommonResponseDto<List<AlbumSnapResDto>>> getAlbumSnap(@Au
@Operation(summary = "유저 이름, 프로필 사진 조회", description = "유저의 이름과, 프로필 사진을 조회합니다." +
"<br> 유저 번호, 유저 이름, 프로필 사진 url 리턴(토큰 없이 url 접근 가능)" +
"<br> 토큰이 없어도 해당 Api 엔드포인트를 요청할 수 있습니다.")
@Parameter(name = "login_id", description = "이름과 프로필 사진을 가져오기 위한 loginId", required = true)
@Parameter(name = "loginId", description = "이름과 프로필 사진을 가져오기 위한 loginId", required = true)
@GetMapping("/profile")
public ResponseEntity<CommonResponseDto<UserProfileResDto>> getUserProfile(@RequestParam("login_id")
public ResponseEntity<CommonResponseDto<UserProfileResDto>> getUserProfile(@AuthenticationPrincipal UserDetails principal,
@RequestParam("loginId")
@NotBlank(message = "로그인 아이디 입력은 필수입니다.") String loginId){
UserProfileResDto userProfileResDto = profileService.getUserProfile(loginId);
UserProfileResDto userProfileResDto = profileService.getUserProfile(principal.getUsername(),loginId);
return ResponseEntity.status(HttpStatus.OK).body(
new CommonResponseDto<>(
"유저 이름과, 프로필 사진 조회를 성공적으로 완료하였습니다.",
Expand All @@ -68,9 +69,9 @@ public ResponseEntity<CommonResponseDto<UserProfileResDto>> getUserProfile(@Requ
}

@Operation(summary = "유저의 Snap 수, Follower 수, Following 수 조회", description = "유저의 loginId로 유저의 snap 수, 팔로워 수, 팔로잉 수를 조회합니다.")
@Parameter(name = "login_id", description = "팔로워와 팔로잉 수를 가져오기 위한 loginId", required = true)
@Parameter(name = "loginId", description = "팔로워와 팔로잉 수를 가져오기 위한 loginId", required = true)
@GetMapping("/count")
public ResponseEntity<CommonResponseDto<ProfileCntResDto>> getProfileCnt(@RequestParam("login_id")
public ResponseEntity<CommonResponseDto<ProfileCntResDto>> getProfileCnt(@RequestParam("loginId")
@NotBlank(message = "로그인 아이디 입력은 필수입니다.") String loginId){
ProfileCntResDto profileCntResDto = profileService.getUserProfileCnt(loginId);
return ResponseEntity.status(HttpStatus.OK).body(
Expand All @@ -82,9 +83,9 @@ public ResponseEntity<CommonResponseDto<ProfileCntResDto>> getProfileCnt(@Reques

@Operation(summary = "유저의 태그된 snap 들 조회", description = "유저의 loginId로 유저가 태그된 snap 들을 조회합니다" +
"<br> snap id 기준 내림차순으로 조회합니다.(최근 snap 이 제일 먼저 조회)")
@Parameter(name = "login_id", description = "팔로워와 팔로잉 수를 가져오기 위한 loginId", required = true)
@GetMapping("/tag_snap")
public ResponseEntity<CommonResponseDto<List<ProfileTagSnapResDto>>> getTagSnap(@RequestParam("login_id")
@Parameter(name = "loginId", description = "팔로워와 팔로잉 수를 가져오기 위한 loginId", required = true)
@GetMapping("/tag-snap")
public ResponseEntity<CommonResponseDto<List<ProfileTagSnapResDto>>> getTagSnap(@RequestParam("loginId")
@NotBlank(message = "로그인 아이디 입력은 필수입니다.") String loginId){

List<ProfileTagSnapResDto> profileTagSnapResDto = profileService.getTagSnap(loginId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,16 @@
public record UserProfileResDto(
Long userId,
String userName,
String profileURL
String profileURL,
Boolean isFollow
){
public static UserProfileResDto toDto(User user, String profileURL)
public static UserProfileResDto toDto(User user, String profileURL , Boolean isFollow)
{
return UserProfileResDto.builder()
.userId(user.getId())
.userName(user.getName())
.profileURL(profileURL)
.isFollow(isFollow)
.build();
}
}
4 changes: 2 additions & 2 deletions src/main/java/me/snaptime/profile/service/ProfileService.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@

public interface ProfileService {
/* 호출자의 loginId, 피호출자의 loginId를 통해 피호출자의 album과 snap을 조회 */
public List<AlbumSnapResDto> getAlbumSnap(String yourLoginId, String targetLoginId);
public List<AlbumSnapResDto> getAlbumSnap(String ownLoginId, String targetLoginId);
/* loginId에 해당하는 User의 profile 사진을 조회 */
public UserProfileResDto getUserProfile(String loginId);
public UserProfileResDto getUserProfile(String ownLoginId, String targetLoginId);
/* loginId에 해당하는 User의 스냅, 팔로우, 팔로워 수 리턴 */
public ProfileCntResDto getUserProfileCnt(String loginId);
/* loginId에 해당하는 User가 Tag된 snap들을 조회합니다 */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,19 +32,31 @@ public class ProfileServiceImpl implements ProfileService {

@Override
@Transactional(readOnly = true)
public List<AlbumSnapResDto> getAlbumSnap(String yourLoginId, String targetLoginId) {
public List<AlbumSnapResDto> getAlbumSnap(String ownLoginId, String targetLoginId) {
User targetUser = userRepository.findByLoginId(targetLoginId).orElseThrow(() -> new CustomException(ExceptionCode.USER_NOT_EXIST));

return userRepository.findAlbumSnap(targetUser, yourLoginId.equals(targetLoginId));
return userRepository.findAlbumSnap(targetUser, ownLoginId.equals(targetLoginId));
}

@Override
@Transactional(readOnly = true)
public UserProfileResDto getUserProfile(String loginId) {
User reqUser = userRepository.findByLoginId(loginId).orElseThrow(() -> new CustomException(ExceptionCode.USER_NOT_EXIST));
String profileURL = urlComponent.makeProfileURL(reqUser.getProfilePhoto().getId());
public UserProfileResDto getUserProfile(String ownLoginId, String targetLoginId) {

return UserProfileResDto.toDto(reqUser, profileURL);
Boolean isFollow = null;
User targetUser = userRepository.findByLoginId(targetLoginId).orElseThrow(() -> new CustomException(ExceptionCode.USER_NOT_EXIST));

if(ownLoginId.equals(targetLoginId)){
isFollow = null; /* 자기 자신을 조회한 경우 */
}
else{
User ownUser = userRepository.findByLoginId(ownLoginId).orElseThrow(() -> new CustomException(ExceptionCode.USER_NOT_EXIST));
if (friendService.checkIsFollow(ownUser,targetUser)) isFollow = true; /* 팔로우 한 상대를 조회*/
else isFollow = false; /* 팔로우 하지 않은 상대를 조회 */
}

String profileURL = urlComponent.makeProfileURL(targetUser.getProfilePhoto().getId());

return UserProfileResDto.toDto(targetUser, profileURL, isFollow);
parseyong marked this conversation as resolved.
Show resolved Hide resolved
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,16 +21,16 @@
@Tag(name ="[ProfilePhoto] ProfilePhoto API", description = "프로필 사진 생성, 프로필 사진 조회, 프로필 사진 수정, 프로필 사진 삭제")
@Slf4j
@RestController
@RequestMapping("/profile_photos")
@RequestMapping("/profile-photos")
@RequiredArgsConstructor
public class ProfilePhotoController {

private final ProfilePhotoService profilePhotoService;

@Operation(summary = "프로필 사진 조회",description = "유저의 번호로 유저의 프로필 사진을 조회 합니다.")
@Parameter(name = "profile_photo_id", description = "조회 할 프로필 사진의 id")
@GetMapping("/{profile_photo_id}")
public ResponseEntity<?> downloadProfileToFileSystem(@PathVariable("profile_photo_id") Long profilePhotoId) {
@Parameter(name = "profilePhotoId", description = "조회 할 프로필 사진의 id")
@GetMapping("/{profilePhotoId}")
public ResponseEntity<?> downloadProfileToFileSystem(@PathVariable("profilePhotoId") Long profilePhotoId) {
log.info("[downloadProfile] 유저의 프로필 사진을 조회합니다. profilePhotoId : {}",profilePhotoId);

byte[] downloadProfile = profilePhotoService.downloadPhotoFromFileSystem(profilePhotoId);
Expand Down
8 changes: 4 additions & 4 deletions src/main/java/me/snaptime/user/controller/UserController.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
import me.snaptime.common.CommonResponseDto;
import me.snaptime.user.dto.req.SignInReqDto;
import me.snaptime.user.dto.req.UserReqDto;
import me.snaptime.user.dto.req.UserUpdateDto;
import me.snaptime.user.dto.req.UserUpdateReqDto;
import me.snaptime.user.dto.res.SignInResDto;
import me.snaptime.user.dto.res.UserResDto;
import me.snaptime.user.service.SignService;
Expand Down Expand Up @@ -46,17 +46,17 @@ public ResponseEntity<CommonResponseDto<UserResDto>> getUser(@AuthenticationPrin
@Operation(summary = "유저 정보 수정",description = "해당 유저의 정보를 수정합니다. " +
"<br> 유저 loginId 수정 이후에는, Token의 loginId 정보와 현재 유저의 loginId가 다르므로," +
"<br> Token을 버리고 재 login을 유도해야 합니다.")
@PutMapping()
@PatchMapping()
public ResponseEntity<CommonResponseDto<UserResDto>> changeUser(@AuthenticationPrincipal UserDetails principal,
@Valid @RequestBody UserUpdateDto userUpdateDto){
@Valid @RequestBody UserUpdateReqDto userUpdateDto){
UserResDto userResDto = userService.updateUser(principal.getUsername(), userUpdateDto);
return ResponseEntity.status(HttpStatus.OK).body(
new CommonResponseDto<>(
"유저 정보 수정이 성공적으로 완료되었습니다.",
userResDto));
}
@Operation(summary = "유저 비밀번호 수정",description = "해당 유저의 비밀번호를 수정합니다.")
@PutMapping("/password")
@PatchMapping("/password")
public ResponseEntity<CommonResponseDto<Void>> changeUser(@AuthenticationPrincipal UserDetails principal,
@RequestParam("password")
@NotBlank(message = "로그인 아이디 입력은 필수입니다.") String password) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,28 +1,24 @@
package me.snaptime.user.dto.req;

import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import lombok.Builder;

@Builder
public record UserUpdateDto(
public record UserUpdateReqDto(
@Schema(
example = "홍길순",
description = "유저의 이름을 입력해주세요"
)
@NotBlank(message = "유저 이름 입력은 필수입니다.")
String name,
@Schema(
example = "[email protected]",
description = "유저의 이메일을 입력해주세요"
)
@NotBlank(message = "유저 이메일 입력은 필수입니다.")
String email,
@Schema(
example = "1999-10-29",
description = "유저의 생년월일을 입력해주세요"
)
@NotBlank(message = "유저 생년월일 입력은 필수입니다.")
String birthDay

){}
4 changes: 2 additions & 2 deletions src/main/java/me/snaptime/user/service/UserService.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package me.snaptime.user.service;

import me.snaptime.user.dto.req.UserUpdateDto;
import me.snaptime.user.dto.req.UserUpdateReqDto;
import me.snaptime.user.dto.res.UserResDto;

public interface UserService {
public UserResDto getUser(String loginId);
public UserResDto updateUser(String loginId, UserUpdateDto userUpdateDto);
public UserResDto updateUser(String loginId, UserUpdateReqDto userUpdateDto);
public void deleteUser(String loginId);
public void updatePassword(String loginId, String password);
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import me.snaptime.exception.CustomException;
import me.snaptime.exception.ExceptionCode;
import me.snaptime.user.domain.User;
import me.snaptime.user.dto.req.UserUpdateDto;
import me.snaptime.user.dto.req.UserUpdateReqDto;
import me.snaptime.user.dto.res.UserResDto;
import me.snaptime.user.repository.UserRepository;
import me.snaptime.user.service.UserService;
Expand All @@ -31,7 +31,7 @@ public UserResDto getUser(String loginId) {
return UserResDto.toDto(user);
}

public UserResDto updateUser(String loginId, UserUpdateDto userUpdateDto) {
public UserResDto updateUser(String loginId, UserUpdateReqDto userUpdateDto) {

User user = userRepository.findByLoginId(loginId).orElseThrow(() -> new CustomException(ExceptionCode.USER_NOT_EXIST));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import me.snaptime.jwt.UserDetailsServiceImpl;
import me.snaptime.profile.service.impl.ProfileServiceImpl;
import me.snaptime.user.dto.req.UserReqDto;
import me.snaptime.user.dto.req.UserUpdateDto;
import me.snaptime.user.dto.req.UserUpdateReqDto;
import me.snaptime.user.dto.res.UserResDto;
import me.snaptime.user.service.impl.SignServiceImpl;
import me.snaptime.user.service.impl.UserServiceImpl;
Expand Down Expand Up @@ -121,13 +121,13 @@ void signUpTest() throws Exception{
void updateUserTest() throws Exception{

//given
UserUpdateDto userUpdateDto = UserUpdateDto.builder()
UserUpdateReqDto userUpdateDto = UserUpdateReqDto.builder()
.name("홍길순")
.email("[email protected]")
.birthDay("1999-10-29")
.build();

given(userService.updateUser(eq("kang4746"),any(UserUpdateDto.class)))
given(userService.updateUser(eq("kang4746"),any(UserUpdateReqDto.class)))
.willReturn(UserResDto.builder()
.loginId("kang4746")
.name("홍길순")
Expand All @@ -139,7 +139,7 @@ void updateUserTest() throws Exception{
String content = gson.toJson(userUpdateDto);

//when
mockMvc.perform(put("/users")
mockMvc.perform(patch("/users")
.content(content).contentType(MediaType.APPLICATION_JSON))
.andExpect(jsonPath("$.msg").exists())
.andExpect(jsonPath("$.result.loginId").exists())
Expand All @@ -148,7 +148,7 @@ void updateUserTest() throws Exception{
.andDo(print());

//then
verify(userService,times(1)).updateUser(eq("kang4746"),any(UserUpdateDto.class));
verify(userService,times(1)).updateUser(eq("kang4746"),any(UserUpdateReqDto.class));
}

@Test
Expand Down
4 changes: 2 additions & 2 deletions src/test/java/me/snaptime/user/service/UserServiceTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import me.snaptime.user.domain.User;
import me.snaptime.user.dto.req.SignInReqDto;
import me.snaptime.user.dto.req.UserReqDto;
import me.snaptime.user.dto.req.UserUpdateDto;
import me.snaptime.user.dto.req.UserUpdateReqDto;
import me.snaptime.user.dto.res.SignInResDto;
import me.snaptime.user.dto.res.UserResDto;
import me.snaptime.user.repository.UserRepository;
Expand Down Expand Up @@ -165,7 +165,7 @@ public void deleteUser() {
@DisplayName("given_when_then 방식으로 updateUser 서비스 성공 테스트")
public void updateUser() {
//given
UserUpdateDto userUpdateDto = UserUpdateDto.builder()
UserUpdateReqDto userUpdateDto = UserUpdateReqDto.builder()
.name("")
.email("[email protected]")
.birthDay("")
Expand Down
Loading