Skip to content

Commit

Permalink
[Merge] main <- hyungjun#105-fix-url-http-method
Browse files Browse the repository at this point in the history
[Fix] url 수정, userUpdate http 메서드 변경, getUserProfile에서 팔로우 여부를 리턴합니다
  • Loading branch information
sukangpunch authored Jul 17, 2024
2 parents 78b1d61 + f4aa552 commit 2e5e5cd
Show file tree
Hide file tree
Showing 11 changed files with 52 additions and 45 deletions.
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,27 @@ 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)){
User ownUser = userRepository.findByLoginId(ownLoginId).orElseThrow(() -> new CustomException(ExceptionCode.USER_NOT_EXIST));
isFollow = friendService.checkIsFollow(ownUser,targetUser);
}

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

return UserProfileResDto.toDto(targetUser, profileURL, isFollow);
}

@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

0 comments on commit 2e5e5cd

Please sign in to comment.