diff --git a/build.gradle b/build.gradle index 548535a..c9782e8 100644 --- a/build.gradle +++ b/build.gradle @@ -25,6 +25,7 @@ dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'mysql:mysql-connector-java:8.0.33' + implementation 'org.projectlombok:lombok:1.18.26' compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' diff --git a/src/main/java/Journey/Together/domain/bookbark/controller/BookmarkController.java b/src/main/java/Journey/Together/domain/bookbark/controller/BookmarkController.java index 44f737a..e62b652 100644 --- a/src/main/java/Journey/Together/domain/bookbark/controller/BookmarkController.java +++ b/src/main/java/Journey/Together/domain/bookbark/controller/BookmarkController.java @@ -26,38 +26,38 @@ public class BookmarkController { @GetMapping("/names") public ApiResponse> getBookmarkPlaceNames( @AuthenticationPrincipal PrincipalDetails principalDetails){ - return ApiResponse.success(Success.GET_BOOKMARK_PLACE_NAMES_SUCCESS, bookmarkService.getBookmarkPlaceNames(principalDetails.getMember())); + return ApiResponse.success(Success.GET_BOOKMARK_PLACE_NAMES_SUCCESS, bookmarkService.getBookmarkPlaceNames(principalDetails.getMemberId())); } @GetMapping("/place") public ApiResponse> getPlaceBookmarks( @AuthenticationPrincipal PrincipalDetails principalDetails){ - return ApiResponse.success(Success.GET_BOOKMARK_PLACES_SUCCESS, bookmarkService.getPlaceBookmarks(principalDetails.getMember())); + return ApiResponse.success(Success.GET_BOOKMARK_PLACES_SUCCESS, bookmarkService.getPlaceBookmarks(principalDetails.getMemberId())); } @GetMapping("/plan") public ApiResponse> getPlanBookmarks( @AuthenticationPrincipal PrincipalDetails principalDetails){ - return ApiResponse.success(Success.GET_BOOKMARK_PLAN_SUCCESS, bookmarkService.getPlanBookmarks(principalDetails.getMember())); + return ApiResponse.success(Success.GET_BOOKMARK_PLAN_SUCCESS, bookmarkService.getPlanBookmarks(principalDetails.getMemberId())); } @PatchMapping("/place/{placeId}") public ApiResponse updatePlaceBookmark( @AuthenticationPrincipal PrincipalDetails principalDetails, @PathVariable Long placeId){ - bookmarkService.placeBookmark(principalDetails.getMember(), placeId); + bookmarkService.placeBookmark(principalDetails.getMemberId(), placeId); return ApiResponse.success(Success.CHANGE_BOOKMARK_SUCCESS); } @PatchMapping("/plan/{planId}") public ApiResponse updatePlanBookmark( @AuthenticationPrincipal PrincipalDetails principalDetails, @PathVariable Long planId){ - bookmarkService.planBookmark(principalDetails.getMember(), planId); + bookmarkService.planBookmark(principalDetails.getMemberId(), planId); return ApiResponse.success(Success.CHANGE_BOOKMARK_SUCCESS); } @GetMapping("/plan/{planId}") public ApiResponse findPlanBookmark( @AuthenticationPrincipal PrincipalDetails principalDetails, @PathVariable Long planId){ - return ApiResponse.success(Success.GET_BOOKMARK_PLAN_STATE_SUCCESS,bookmarkService.findPlanBookmark(principalDetails.getMember(), planId)); + return ApiResponse.success(Success.GET_BOOKMARK_PLAN_STATE_SUCCESS,bookmarkService.findPlanBookmark(principalDetails.getMemberId(), planId)); } } diff --git a/src/main/java/Journey/Together/domain/bookbark/entity/PlaceBookmark.java b/src/main/java/Journey/Together/domain/bookbark/entity/PlaceBookmark.java index c69247a..b3694c5 100644 --- a/src/main/java/Journey/Together/domain/bookbark/entity/PlaceBookmark.java +++ b/src/main/java/Journey/Together/domain/bookbark/entity/PlaceBookmark.java @@ -7,7 +7,12 @@ import Journey.Together.domain.place.entity.Place; import Journey.Together.global.common.BaseTimeEntity; import jakarta.persistence.*; -import lombok.*; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; @Getter @Setter diff --git a/src/main/java/Journey/Together/domain/bookbark/service/BookmarkService.java b/src/main/java/Journey/Together/domain/bookbark/service/BookmarkService.java index b55cd46..a426829 100644 --- a/src/main/java/Journey/Together/domain/bookbark/service/BookmarkService.java +++ b/src/main/java/Journey/Together/domain/bookbark/service/BookmarkService.java @@ -7,6 +7,7 @@ import Journey.Together.domain.bookbark.entity.PlanBookmarkRes; import Journey.Together.domain.bookbark.repository.PlaceBookmarkRepository; import Journey.Together.domain.bookbark.repository.PlanBookmarkRepository; +import Journey.Together.domain.member.service.MemberService; import Journey.Together.domain.plan.entity.Day; import Journey.Together.domain.plan.entity.Plan; import Journey.Together.domain.plan.repository.DayRepository; @@ -39,12 +40,14 @@ public class BookmarkService { private final DayRepository dayRepository; private final PlanRepository planRepository; + private final MemberService memberService; private final S3Client s3Client; //북마크한 여행지 이름만 가져오기 - public List getBookmarkPlaceNames(Member member){ + public List getBookmarkPlaceNames(Long memberId){ + Member member = memberService.findMemberById(memberId); List placeBookmarkList = placeBookmarkRepository.findAllByMemberOrderByPlaceNameAsc(member); if(placeBookmarkList.isEmpty() || placeBookmarkList==null) return new ArrayList<>(); @@ -55,8 +58,9 @@ public List getBookmarkPlaceNames(Member member){ @Transactional // 북마크 상태변경 - public void placeBookmark(Member member, Long placeId){ + public void placeBookmark(Long memberId, Long placeId){ Place place = getPlace(placeId); + Member member = memberService.findMemberById(memberId); PlaceBookmark placeBookmark = placeBookmarkRepository.findPlaceBookmarkByPlaceAndMember(place, member); if (placeBookmark == null) { @@ -73,7 +77,8 @@ public void placeBookmark(Member member, Long placeId){ @Transactional // 북마크 상태변경 - public void planBookmark(Member member, Long planId){ + public void planBookmark(Long memberId, Long planId){ + Member member = memberService.findMemberById(memberId); Plan plan = planRepository.findById(planId) .orElseThrow(() -> new ApplicationException(ErrorCode.NOT_FOUND_PLACE_EXCEPTION)); @@ -92,7 +97,8 @@ public void planBookmark(Member member, Long planId){ @Transactional // 북마크 상태변경 - public PlanBookMarkStateRes findPlanBookmark(Member member, Long planId){ + public PlanBookMarkStateRes findPlanBookmark(Long memberId, Long planId){ + Member member = memberService.findMemberById(memberId); Plan plan = planRepository.findById(planId) .orElseThrow(() -> new ApplicationException(ErrorCode.NOT_FOUND_PLAN_EXCEPTION)); PlanBookmark planBookmark = planBookmarkRepository.findPlanBookmarkByPlanAndMember(plan, member); @@ -109,8 +115,9 @@ private Place getPlace(Long placeId){ ()->new ApplicationException(ErrorCode.NOT_FOUND_PLACE_EXCEPTION)); } - public List getPlaceBookmarks(Member member) { + public List getPlaceBookmarks(Long memberId) { List list = new ArrayList<>(); + Member member = memberService.findMemberById(memberId); List placeBookmarkList = placeBookmarkRepository.findAllByMemberOrderByCreatedAtDesc(member); placeBookmarkList.forEach( @@ -123,18 +130,19 @@ public List getPlaceBookmarks(Member member) { return list; } - public List getPlanBookmarks(Member member) { + public List getPlanBookmarks(Long memberId) { List list = new ArrayList<>(); + Member member = memberService.findMemberById(memberId); List planBookmarkList = planBookmarkRepository.findAllByMemberOrderByCreatedAtDesc(member); planBookmarkList.forEach( planBookmark -> { - list.add(PlanBookmarkRes.of(planBookmark.getPlan(),s3Client.getUrl()+planBookmark.getPlan().getMember().getProfileUuid()+"/profile_"+planBookmark.getPlan().getMember().getProfileUuid(),getPlanImageUrl(member, planBookmark.getPlan()))); + list.add(PlanBookmarkRes.of(planBookmark.getPlan(),s3Client.getUrl()+planBookmark.getPlan().getMember().getProfileUuid()+"/profile_"+planBookmark.getPlan().getMember().getProfileUuid(),getPlanImageUrl(planBookmark.getPlan()))); }); return list; } - private String getPlanImageUrl(Member member, Plan plan){ + private String getPlanImageUrl(Plan plan){ List dayList = dayRepository.findByPlanOrderByCreatedAtDesc(plan); if (dayList.isEmpty() || dayList == null) { return null; diff --git a/src/main/java/Journey/Together/domain/member/controller/AuthController.java b/src/main/java/Journey/Together/domain/member/controller/AuthController.java index 2a82b15..0a50837 100644 --- a/src/main/java/Journey/Together/domain/member/controller/AuthController.java +++ b/src/main/java/Journey/Together/domain/member/controller/AuthController.java @@ -40,14 +40,14 @@ public ApiResponse signIn(@RequestHeader("Authorization") String token @PostMapping("/sign-out") public ApiResponse signOut(HttpServletRequest request, @AuthenticationPrincipal PrincipalDetails principalDetails) { String token = request.getHeader("Authorization"); - authService.signOut(token, principalDetails.getMember()); + authService.signOut(token, principalDetails.getMemberId()); return ApiResponse.success(Success.SIGNOUT_SUCCESS); } @Operation(summary = "회원탈퇴 API", description = "회원탈퇴 등록") @DeleteMapping("/withdrawal") public ApiResponse withdrawal(@AuthenticationPrincipal PrincipalDetails principalDetails) { - authService.withdrawal(principalDetails.getMember()); + authService.withdrawal(principalDetails.getMemberId()); return ApiResponse.success(Success.DELETE_USER_SUCCESS); } @@ -59,6 +59,6 @@ public ApiResponse reissue(HttpServletRequest request, @Authentication if (token == null || !token.startsWith("Bearer ")) { return ApiResponse.success(Success.LOGIN_SUCCESS); } - return ApiResponse.success(Success.RE_ISSUE_TOKEN_SUCCESS,authService.reissue(token, principalDetails.getMember())); + return ApiResponse.success(Success.RE_ISSUE_TOKEN_SUCCESS,authService.reissue(token, principalDetails.getMemberId())); } } diff --git a/src/main/java/Journey/Together/domain/member/controller/MemberController.java b/src/main/java/Journey/Together/domain/member/controller/MemberController.java index f299f78..c89c835 100644 --- a/src/main/java/Journey/Together/domain/member/controller/MemberController.java +++ b/src/main/java/Journey/Together/domain/member/controller/MemberController.java @@ -22,25 +22,25 @@ public class MemberController { @PatchMapping ("") public ApiResponse saveMemberInfo(@AuthenticationPrincipal PrincipalDetails principalDetails, @RequestPart(required = false) MultipartFile profileImage, @RequestPart(required = false) MemberReq memberReq) { - memberService.saveInfo(principalDetails.getMember(),profileImage,memberReq); + memberService.saveInfo(principalDetails.getMemberId(),profileImage,memberReq); return ApiResponse.success(Success.UPDATE_USER_INFO_SUCCESS); } @GetMapping("") public ApiResponse findMemberInfo(@AuthenticationPrincipal PrincipalDetails principalDetails){ - MemberRes memberRes = memberService.findMemberInfo(principalDetails.getMember()); + MemberRes memberRes = memberService.findMemberInfo(principalDetails.getMemberId()); return ApiResponse.success(Success.GET_MYPAGE_SUCCESS,memberRes); } @PatchMapping("/interest-type") public ApiResponse updateInterestType(@AuthenticationPrincipal PrincipalDetails principalDetails, @RequestBody InterestDto interestDto) { - memberService.updateMemberInterest(principalDetails.getMember(),interestDto); + memberService.updateMemberInterest(principalDetails.getMemberId(),interestDto); return ApiResponse.success(Success.UPDATE_USER_INFO_SUCCESS); } @GetMapping("/interest-type") public ApiResponse findInterestType(@AuthenticationPrincipal PrincipalDetails principalDetails) { - InterestDto interestDto = memberService.findMemberInterest(principalDetails.getMember()); + InterestDto interestDto = memberService.findMemberInterest(principalDetails.getMemberId()); return ApiResponse.success(Success.GET_USER_INTEREST_SUCCESS,interestDto); } } diff --git a/src/main/java/Journey/Together/domain/member/controller/MyPageController.java b/src/main/java/Journey/Together/domain/member/controller/MyPageController.java index 9df90dd..5e0c5c2 100644 --- a/src/main/java/Journey/Together/domain/member/controller/MyPageController.java +++ b/src/main/java/Journey/Together/domain/member/controller/MyPageController.java @@ -26,7 +26,7 @@ public class MyPageController { @GetMapping public ApiResponse getMyPage(@AuthenticationPrincipal PrincipalDetails principalDetails) { - return ApiResponse.success(Success.GET_MYPAGE_SUCCESS, memberService.getMypage(principalDetails.getMember())); + return ApiResponse.success(Success.GET_MYPAGE_SUCCESS, memberService.getMypage(principalDetails.getMemberId())); } } diff --git a/src/main/java/Journey/Together/domain/member/service/AuthService.java b/src/main/java/Journey/Together/domain/member/service/AuthService.java index 8e42123..e02fdd2 100644 --- a/src/main/java/Journey/Together/domain/member/service/AuthService.java +++ b/src/main/java/Journey/Together/domain/member/service/AuthService.java @@ -51,6 +51,7 @@ public class AuthService { private final NaverProperties naverProperties; private final S3Client s3Client; + private final MemberService memberService; private final RestTemplate restTemplate = new RestTemplate(); @Transactional @@ -131,21 +132,23 @@ public LoginRes signIn(String token, String type, LoginReq loginReq) throws IOEx return LoginRes.of(member, tokenDto); } @Transactional - public void signOut(String token, Member member) { + public void signOut(String token, Long memberId) { // Validation String accessToken = token.substring(7); tokenProvider.validateToken(accessToken); // Business Logic - Refresh Token 삭제 및 Access Token 블랙리스트 등록 tokenProvider.getExpiration(accessToken); + Member member = memberService.findMemberById(memberId); member.setRefreshToken(null); // Response } @Transactional - public void withdrawal(Member member) { + public void withdrawal(Long memberId) { // Validation + Member member = memberService.findMemberById(memberId); // Business Logic - 회원 논리적 삭제 진행 if(member.getLoginType().equals(LoginType.NAVER)) { @@ -173,12 +176,14 @@ public void withdrawal(Member member) { } @Transactional - public TokenDto reissue(String token, Member member) { + public TokenDto reissue(String token, Long memberId) { String refreshToken = token.substring(7); // Token 유효성 검사 tokenProvider.validateToken(refreshToken); + Member member = memberService.findMemberById(memberId); + String memberRefreshToken = member.getRefreshToken(); if (refreshToken.isBlank() || memberRefreshToken.isEmpty() || !memberRefreshToken.equals(refreshToken)) { throw new ApplicationException(ErrorCode.WRONG_TOKEN_EXCEPTION); diff --git a/src/main/java/Journey/Together/domain/member/service/MemberService.java b/src/main/java/Journey/Together/domain/member/service/MemberService.java index cb42f76..40ffa46 100644 --- a/src/main/java/Journey/Together/domain/member/service/MemberService.java +++ b/src/main/java/Journey/Together/domain/member/service/MemberService.java @@ -6,6 +6,7 @@ import Journey.Together.domain.member.dto.MemberRes; import Journey.Together.domain.member.entity.Interest; import Journey.Together.domain.member.entity.Member; +import Journey.Together.domain.member.enumerate.MemberType; import Journey.Together.domain.member.repository.InterestRepository; import Journey.Together.domain.member.repository.MemberRepository; import Journey.Together.domain.place.repository.PlaceReviewRepository; @@ -32,20 +33,18 @@ public class MemberService { private final PlanReviewRepository planReviewRepository; private final PlaceReviewRepository placeReviewRepository; - - public MyPageRes getMypage(Member member){ + public MyPageRes getMypage(Long memberId){ + Member member = findMemberById(memberId); Long date = Duration.between(member.getCreatedAt(), LocalDateTime.now()).toDays(); long cnt1 = placeReviewRepository.countPlaceReviewByMember(member); long cnt2 = planReviewRepository.countPlanReviewByMember(member); - System.out.println(cnt1); - System.out.println(cnt2); return new MyPageRes(member.getNickname(), (int) (cnt1+cnt2), date, s3Client.getUrl()+member.getProfileUuid()+"/profile_"+member.getProfileUuid()); } @Transactional - public void saveInfo(Member member, MultipartFile profileImage, MemberReq memberReq){ + public void saveInfo(Long memberId, MultipartFile profileImage, MemberReq memberReq){ // Validation - memberRepository.findMemberByEmailAndDeletedAtIsNull(member.getEmail()).orElseThrow(()->new ApplicationException(ErrorCode.NOT_FOUND_EXCEPTION)); + Member member = findMemberById(memberId); //Business if (profileImage != null) { s3Client.update(member.getProfileUuid()+"/profile_"+member.getProfileUuid(),profileImage); @@ -93,26 +92,26 @@ public void saveInfo(Member member, MultipartFile profileImage, MemberReq member memberRepository.save(member); } @Transactional - public MemberRes findMemberInfo(Member member){ + public MemberRes findMemberInfo(Long memberId){ // Validation - memberRepository.findMemberByEmailAndDeletedAtIsNull(member.getEmail()).orElseThrow(()->new ApplicationException(ErrorCode.NOT_FOUND_EXCEPTION)); + Member member = findMemberById(memberId); //Business MemberRes memberRes = MemberRes.of(member, s3Client.getUrl()+member.getProfileUuid()+"/profile_"+member.getProfileUuid()); //Response return memberRes; } @Transactional - public void updateMemberInterest(Member member, InterestDto interestDto){ + public void updateMemberInterest(Long memberId, InterestDto interestDto){ // Validation - memberRepository.findMemberByEmailAndDeletedAtIsNull(member.getEmail()).orElseThrow(()->new ApplicationException(ErrorCode.NOT_FOUND_EXCEPTION)); + Member member = findMemberById(memberId); Interest interest = interestRepository.findByMemberAndDeletedAtIsNull(member); //Business interest.update(interestDto); } @Transactional - public InterestDto findMemberInterest(Member member){ + public InterestDto findMemberInterest(Long memberId){ // Validation - memberRepository.findMemberByEmailAndDeletedAtIsNull(member.getEmail()).orElseThrow(()->new ApplicationException(ErrorCode.NOT_FOUND_EXCEPTION)); + Member member = findMemberById(memberId); Interest interest = interestRepository.findByMemberAndDeletedAtIsNull(member); //Business InterestDto interestDto = InterestDto.of( @@ -126,4 +125,8 @@ public InterestDto findMemberInterest(Member member){ return interestDto; } + public Member findMemberById(Long memberId){ + return memberRepository.findById(memberId).orElseThrow(() -> new ApplicationException(ErrorCode.NOT_FOUND_EXCEPTION)); + } + } diff --git a/src/main/java/Journey/Together/domain/place/controller/PlaceController.java b/src/main/java/Journey/Together/domain/place/controller/PlaceController.java index 16a1980..4481c0f 100644 --- a/src/main/java/Journey/Together/domain/place/controller/PlaceController.java +++ b/src/main/java/Journey/Together/domain/place/controller/PlaceController.java @@ -48,7 +48,7 @@ public ApiResponse getMain( @GetMapping("/{placeId}") public ApiResponse getPlaceDetail(@AuthenticationPrincipal PrincipalDetails principalDetails, @PathVariable Long placeId){ - return ApiResponse.success(Success.GET_PLACE_DETAIL_SUCCESS, placeService.getPlaceDetail(principalDetails.getMember(), placeId)); + return ApiResponse.success(Success.GET_PLACE_DETAIL_SUCCESS, placeService.getPlaceDetail(principalDetails.getMemberId(), placeId)); } @GetMapping("guest/{placeId}") @@ -62,14 +62,14 @@ public ApiResponse createReivew(@AuthenticationPrincipal PrincipalDetails pri @RequestPart PlaceReviewReq placeReviewReq, @PathVariable Long placeId) { images = (images == null) ? new ArrayList<>() : images; - placeService.createReview(principalDetails.getMember(), images,placeReviewReq, placeId); + placeService.createReview(principalDetails.getMemberId(), images,placeReviewReq, placeId); return ApiResponse.success(Success.CREATE_PLACE_REVIEW_SUCCESS); } @GetMapping("/review/{placeId}") public ApiResponse getPlaceReview(@AuthenticationPrincipal PrincipalDetails principalDetails, @PathVariable Long placeId, @PageableDefault(size = 5,page = 0) Pageable pageable) { - return ApiResponse.success(Success.GET_PLACE_REVIEW_LIST_SUCCESS, placeService.getReviews(principalDetails.getMember(), placeId, pageable)); + return ApiResponse.success(Success.GET_PLACE_REVIEW_LIST_SUCCESS, placeService.getReviews(principalDetails.getMemberId(), placeId, pageable)); } @GetMapping("/review/guest/{placeId}") @@ -81,20 +81,20 @@ public ApiResponse getPlaceReview( @GetMapping("/review/my") public ApiResponse getPlaceMyReviews( @AuthenticationPrincipal PrincipalDetails principalDetails,@PageableDefault(size = 5,page = 0) Pageable pageable) { - return ApiResponse.success(Success.GET_MY_PLACE_REVIEW_LIST_SUCCESS, placeService.getMyReviews(principalDetails.getMember(), pageable)); + return ApiResponse.success(Success.GET_MY_PLACE_REVIEW_LIST_SUCCESS, placeService.getMyReviews(principalDetails.getMemberId(), pageable)); } @DeleteMapping("/review/my/{reviewId}") public ApiResponse deletePlaceMyReview( @AuthenticationPrincipal PrincipalDetails principalDetails, @PathVariable Long reviewId) { - placeService.deleteMyPlaceReview(principalDetails.getMember(),reviewId); + placeService.deleteMyPlaceReview(principalDetails.getMemberId(),reviewId); return ApiResponse.success(Success.DELETE_MY_PLACE_REVIEW_SUCCESS); } @GetMapping("/review/my/{reviewId}") public ApiResponse getPlaceMyReview( @AuthenticationPrincipal PrincipalDetails principalDetails, @PathVariable Long reviewId) { - return ApiResponse.success(Success.GET_MY_PLACE_REVIEW_SUCCESS,placeService.getReview(principalDetails.getMember(),reviewId)); + return ApiResponse.success(Success.GET_MY_PLACE_REVIEW_SUCCESS,placeService.getReview(principalDetails.getMemberId(),reviewId)); } @PatchMapping("/review/my/{reviewId}") @@ -104,7 +104,7 @@ public ApiResponse updatePlaceMyReview( @RequestPart(required = false) List addImages, @PathVariable Long reviewId) { addImages = (addImages == null) ? new ArrayList<>() : addImages; - placeService.updateMyPlaceReview(principalDetails.getMember(),updateReviewDto,addImages,reviewId); + placeService.updateMyPlaceReview(principalDetails.getMemberId(),updateReviewDto,addImages,reviewId); return ApiResponse.success(Success.UPDATE_MY_PLACE_REVIEW_SUCCESS); } @GetMapping("/search") diff --git a/src/main/java/Journey/Together/domain/place/service/PlaceService.java b/src/main/java/Journey/Together/domain/place/service/PlaceService.java index 323c328..7f368c9 100644 --- a/src/main/java/Journey/Together/domain/place/service/PlaceService.java +++ b/src/main/java/Journey/Together/domain/place/service/PlaceService.java @@ -1,6 +1,8 @@ package Journey.Together.domain.place.service; import Journey.Together.domain.member.entity.Member; +import Journey.Together.domain.member.enumerate.MemberType; +import Journey.Together.domain.member.service.MemberService; import Journey.Together.domain.place.dto.request.PlaceReviewReq; import Journey.Together.domain.place.dto.request.UpdateReviewDto; import Journey.Together.domain.place.dto.response.*; @@ -24,9 +26,11 @@ import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.index.query.QueryBuilders; +import org.elasticsearch.monitor.os.OsStats; import org.elasticsearch.search.builder.SearchSourceBuilder; import org.springframework.data.domain.Pageable; import Journey.Together.global.exception.Success; +import Journey.Together.global.security.PrincipalDetails; import jakarta.validation.constraints.NotNull; import lombok.RequiredArgsConstructor; import org.apache.commons.lang3.StringUtils; @@ -54,6 +58,8 @@ public class PlaceService { private final DisabilityPlaceCategoryRepository disabilityPlaceCategoryRepository; private final PlaceBookmarkRepository placeBookmarkRepository; + private final MemberService memberService; + private final RestHighLevelClient client; private final S3Client s3Client; @@ -75,8 +81,8 @@ public MainRes getMainPage(String areacode, String sigungucode){ } //여행지 상세 정보 가져오기 - public PlaceDetailRes getPlaceDetail(Member member, Long placeId){ - // PlaceDetailRes of(Place place, Boolean isMark, Integer bookmarkNum, List disability, List subDisability, List< PlaceReviewDto > reviewList) + public PlaceDetailRes getPlaceDetail(Long memberId, Long placeId){ + Member member = memberService.findMemberById(memberId); Boolean isReview = false; Boolean isMark = false; @@ -183,8 +189,9 @@ public List searchPlaceMap(String category, List disabilityType, //여행지 후기 생성 @Transactional - public void createReview(Member member, List images, PlaceReviewReq placeReviewReq, Long placeId){ + public void createReview(Long memberId, List images, PlaceReviewReq placeReviewReq, Long placeId){ Place place = getPlace(placeId); + Member member = memberService.findMemberById(memberId); if(placeReviewRepository.findPlaceReviewByMemberAndPlace(member,place) != null) throw new ApplicationException(ErrorCode.ALREADY_EXIST_EXCEPTION); @@ -216,8 +223,10 @@ public void createReview(Member member, List images, PlaceReviewR } //관광지 후기 가져오기 - public PlaceReviewRes getReviews(Member member,Long placeId, Pageable page){ + public PlaceReviewRes getReviews(Long memberId,Long placeId, Pageable page){ Place place = getPlace(placeId); + Member member = memberService.findMemberById(memberId); + List placeReviewList =new ArrayList<>(); Pageable pageable = PageRequest.of(page.getPageNumber(), page.getPageSize(), Sort.by("createdAt").descending()); Page placeReviewPage = placeReviewRepository.findAllByPlaceAndReportIsNullOrReportFalseOrderByCreatedAtDesc(place, pageable); @@ -251,7 +260,8 @@ public PlaceReviewRes getReviewsGeust(Long placeId, Pageable page){ } //나의 여행지 후기 - public MyPlaceReviewRes getMyReviews(Member member, Pageable page){ + public MyPlaceReviewRes getMyReviews(Long memberId, Pageable page){ + Member member = memberService.findMemberById(memberId); Pageable pageable = PageRequest.of(page.getPageNumber(), page.getPageSize(), Sort.by("createdAt").descending()); Page placeReviewPage = placeReviewRepository.findAllByMemberOrderByCreatedAtDesc(member, pageable); @@ -264,13 +274,13 @@ public MyPlaceReviewRes getMyReviews(Member member, Pageable page){ //나의 여행지 후기 삭제 @Transactional - public void deleteMyPlaceReview(Member member, Long reviewId){ + public void deleteMyPlaceReview(Long memberId, Long reviewId){ PlaceReview placeReview = placeReviewRepository.findById(reviewId).orElseThrow( () -> new ApplicationException(ErrorCode.NOT_FOUND_PLACE_REVIEW_EXCEPTION)); - if(placeReview.getMember() != member){ - new ApplicationException(ErrorCode.FORBIDDEN_EXCEPTION); + if(!Objects.equals(placeReview.getMember().getMemberId(), memberId)){ + throw new ApplicationException(ErrorCode.FORBIDDEN_EXCEPTION); } placeReviewImgRepository.findAllByPlaceReview(placeReview).forEach( placeReviewImg -> s3Client.delete(StringUtils.substringAfter(placeReviewImg.getImgUrl(), partToFind)) @@ -282,12 +292,12 @@ public void deleteMyPlaceReview(Member member, Long reviewId){ } //나의 여행지 후기 보기(1개) - public MyReview getReview(Member member, Long reviewId){ + public MyReview getReview(Long memberId, Long reviewId){ PlaceReview placeReview = placeReviewRepository.findById(reviewId).orElseThrow( () -> new ApplicationException(ErrorCode.NOT_FOUND_PLACE_REVIEW_EXCEPTION)); - if(placeReview.getMember() != member){ - new ApplicationException(ErrorCode.FORBIDDEN_EXCEPTION); + if(!Objects.equals(placeReview.getMember().getMemberId(), memberId)){ + throw new ApplicationException(ErrorCode.FORBIDDEN_EXCEPTION); } List list = placeReviewImgRepository.findAllByPlaceReview(placeReview) @@ -345,11 +355,11 @@ private MyPlaceReviewDto getMyPlaceReview(PlaceReview placeReview ){ } @Transactional - public void updateMyPlaceReview(Member member, UpdateReviewDto updateReviewDto, List addImages, Long reviewId) { + public void updateMyPlaceReview(Long memberId, UpdateReviewDto updateReviewDto, List addImages, Long reviewId) { PlaceReview placeReview = placeReviewRepository.findById(reviewId).orElseThrow( () -> new ApplicationException(ErrorCode.NOT_FOUND_PLACE_REVIEW_EXCEPTION)); - if(placeReview.getMember().getMemberId() != member.getMemberId()){ + if(!Objects.equals(placeReview.getMember().getMemberId(), memberId)){ throw new ApplicationException(ErrorCode.UNAUTHORIZED_EXCEPTION); } @@ -357,7 +367,7 @@ public void updateMyPlaceReview(Member member, UpdateReviewDto updateReviewDto, try { for(MultipartFile file : addImages) { String uuid = UUID.randomUUID().toString(); - final String imageUrl = s3Client.upload(file, POST_IMAGE_FOLDER_NAME+member.getMemberId(), uuid); + final String imageUrl = s3Client.upload(file, POST_IMAGE_FOLDER_NAME+memberId, uuid); PlaceReviewImg placeReviewImg = PlaceReviewImg.builder().placeReview(placeReview).imgUrl(imageUrl).build(); placeReviewImgRepository.save(placeReviewImg); } diff --git a/src/main/java/Journey/Together/domain/plan/controller/PlanController.java b/src/main/java/Journey/Together/domain/plan/controller/PlanController.java index 4ea9568..82817cf 100644 --- a/src/main/java/Journey/Together/domain/plan/controller/PlanController.java +++ b/src/main/java/Journey/Together/domain/plan/controller/PlanController.java @@ -23,30 +23,30 @@ public class PlanController { private final PlanService planService; @PostMapping("") public ApiResponse savePlan(@AuthenticationPrincipal PrincipalDetails principalDetails,@RequestBody PlanReq planReq){ - planService.savePlan(principalDetails.getMember(),planReq); + planService.savePlan(principalDetails.getMemberId(),planReq); return ApiResponse.success(Success.CREATE_PLAN_SUCCESS); } @PatchMapping("/{plan_id}") public ApiResponse updatePlan(@AuthenticationPrincipal PrincipalDetails principalDetails, @PathVariable("plan_id") Long planId, @RequestBody PlanReq planReq){ - planService.updatePlan(principalDetails.getMember(),planId,planReq); + planService.updatePlan(principalDetails.getMemberId(),planId,planReq); return ApiResponse.success(Success.UPDATE_PLAN_SUCCESS); } @GetMapping("/{plan_id}") public ApiResponse findPlan(@AuthenticationPrincipal PrincipalDetails principalDetails, @PathVariable("plan_id") Long planId){ - return ApiResponse.success(Success.GET_PLAN_SUCCESS,planService.findPlan(principalDetails.getMember(),planId)); + return ApiResponse.success(Success.GET_PLAN_SUCCESS,planService.findPlan(principalDetails.getMemberId(),planId)); } @DeleteMapping("/{plan_id}") public ApiResponse deletePlan(@AuthenticationPrincipal PrincipalDetails principalDetails, @PathVariable("plan_id") Long planId){ - planService.deletePlan(principalDetails.getMember(),planId); + planService.deletePlan(principalDetails.getMemberId(),planId); return ApiResponse.success(Success.DELETE_PLAN_SUCCESS); } @PatchMapping("/{plan_id}/ispublic") public ApiResponse updatePlanIsPublic(@AuthenticationPrincipal PrincipalDetails principalDetails,@PathVariable("plan_id") Long planId){ - return ApiResponse.success(Success.UPDATE_PLAN_SUCCESS,planService.updatePlanIsPublic(principalDetails.getMember(),planId)); + return ApiResponse.success(Success.UPDATE_PLAN_SUCCESS,planService.updatePlanIsPublic(principalDetails.getMemberId(),planId)); } @GetMapping("/search") @@ -56,24 +56,24 @@ public ApiResponse searchPlace(@RequestParam String word, @Pag @PostMapping("/review/{plan_id}") public ApiResponse savePlanReview(@AuthenticationPrincipal PrincipalDetails principalDetails, @PathVariable("plan_id")Long planId, @RequestPart(required = false) List images, @RequestPart PlanReviewReq planReviewReq){ - planService.savePlanReview(principalDetails.getMember(),planId,planReviewReq,images); + planService.savePlanReview(principalDetails.getMemberId(),planId,planReviewReq,images); return ApiResponse.success(Success.CREATE_REVIEW_SUCCESS); } @GetMapping("/review/{plan_id}") public ApiResponse findPlanReview(@AuthenticationPrincipal PrincipalDetails principalDetails, @PathVariable("plan_id")Long planId){ - return ApiResponse.success(Success.GET_REVIEW_SUCCESS,planService.findPlanReview(principalDetails.getMember(),planId)); + return ApiResponse.success(Success.GET_REVIEW_SUCCESS,planService.findPlanReview(principalDetails.getMemberId(),planId)); } @PatchMapping("/review/{review_id}") public ApiResponse updatePlanReview(@AuthenticationPrincipal PrincipalDetails principalDetails, @PathVariable("review_id")Long reviewId, @RequestPart(required = false) List images, @RequestPart(required = false) UpdatePlanReviewReq planReviewReq){ - planService.updatePlanReview(principalDetails.getMember(),reviewId,planReviewReq,images); + planService.updatePlanReview(principalDetails.getMemberId(),reviewId,planReviewReq,images); return ApiResponse.success(Success.UPDATE_REVIEW_SUCCESS); } @DeleteMapping("/review/{review_id}") public ApiResponse deletePlanReview(@AuthenticationPrincipal PrincipalDetails principalDetails, @PathVariable("review_id")Long reviewId){ - planService.deletePlanReview(principalDetails.getMember(),reviewId); + planService.deletePlanReview(principalDetails.getMemberId(),reviewId); return ApiResponse.success(Success.DELETE_PLAN_REVIEW_SUCCESS); } @@ -89,7 +89,7 @@ public ApiResponse findOpenPlans(@PageableDefault(size = 6) Pag @GetMapping("/detail/{plan_id}") public ApiResponse findPalnDetailInfo(@AuthenticationPrincipal PrincipalDetails principalDetails, @PathVariable("plan_id")Long planId){ - return ApiResponse.success(Success.SEARCH_SUCCESS,planService.findPlanDetail(principalDetails.getMember(),planId)); + return ApiResponse.success(Success.SEARCH_SUCCESS,planService.findPlanDetail(principalDetails.getMemberId(),planId)); } @GetMapping("/guest/detail/{plan_id}") @@ -99,16 +99,16 @@ public ApiResponse findPalnDetailInfo(@PathVariable("plan_id")Lon @GetMapping("/my") public ApiResponse> findMyPlans(@AuthenticationPrincipal PrincipalDetails principalDetails) { - return ApiResponse.success(Success.GET_MYPLAN_SUCCESS,planService.findMyPlans(principalDetails.getMember())); + return ApiResponse.success(Success.GET_MYPLAN_SUCCESS,planService.findMyPlans(principalDetails.getMemberId())); } @GetMapping("/my/not-complete") public ApiResponse findNotComplete(@AuthenticationPrincipal PrincipalDetails principalDetails,@PageableDefault(size = 6,page = 0) Pageable pageable){ - return ApiResponse.success(Success.SEARCH_SUCCESS,planService.findIsCompelete(principalDetails.getMember(),pageable,false)); + return ApiResponse.success(Success.SEARCH_SUCCESS,planService.findIsCompelete(principalDetails.getMemberId(),pageable,false)); } @GetMapping("/my/complete") public ApiResponse findComplete(@AuthenticationPrincipal PrincipalDetails principalDetails,@PageableDefault(size = 6) Pageable pageable){ - return ApiResponse.success(Success.SEARCH_SUCCESS,planService.findIsCompelete(principalDetails.getMember(),pageable,true)); + return ApiResponse.success(Success.SEARCH_SUCCESS,planService.findIsCompelete(principalDetails.getMemberId(),pageable,true)); } } diff --git a/src/main/java/Journey/Together/domain/plan/service/PlanService.java b/src/main/java/Journey/Together/domain/plan/service/PlanService.java index 7c4a214..5a5f869 100644 --- a/src/main/java/Journey/Together/domain/plan/service/PlanService.java +++ b/src/main/java/Journey/Together/domain/plan/service/PlanService.java @@ -1,5 +1,6 @@ package Journey.Together.domain.plan.service; +import Journey.Together.domain.member.service.MemberService; import Journey.Together.domain.place.entity.PlaceReviewImg; import Journey.Together.domain.plan.dto.*; import Journey.Together.domain.plan.entity.Day; @@ -48,10 +49,13 @@ public class PlanService { private final DisabilityPlaceCategoryRepository disabilityPlaceCategoryRepository; private final S3Client s3Client; + private final MemberService memberService; + @Transactional - public void savePlan(Member member, PlanReq planReq){ + public void savePlan(Long memberId, PlanReq planReq){ // Validation - memberRepository.findMemberByEmailAndDeletedAtIsNull(member.getEmail()).orElseThrow(()->new ApplicationException(ErrorCode.NOT_FOUND_EXCEPTION)); + Member member = memberService.findMemberById(memberId); + //Buisness Plan plan = Plan.builder() .member(member) @@ -66,8 +70,9 @@ public void savePlan(Member member, PlanReq planReq){ } @Transactional - public void updatePlan(Member member,Long planId,PlanReq planReq){ + public void updatePlan(Long memberId,Long planId,PlanReq planReq){ // Validation + Member member = memberService.findMemberById(memberId); Plan plan = planRepository.findPlanByMemberAndPlanIdAndDeletedAtIsNull(member,planId); if(plan == null){ throw new ApplicationException(ErrorCode.NOT_FOUND_EXCEPTION); @@ -82,8 +87,9 @@ public void updatePlan(Member member,Long planId,PlanReq planReq){ } @Transactional - public PlanRes findPlan(Member member,Long planId) { + public PlanRes findPlan(Long memberId,Long planId) { // Validation + Member member = memberService.findMemberById(memberId); Plan plan = planRepository.findPlanByMemberAndPlanIdAndDeletedAtIsNull(member, planId); if (plan == null) { throw new ApplicationException(ErrorCode.NOT_FOUND_EXCEPTION); @@ -95,8 +101,9 @@ public PlanRes findPlan(Member member,Long planId) { } @Transactional - public void deletePlan(Member member,Long planId){ + public void deletePlan(Long memberId, Long planId){ // Validation + Member member = memberService.findMemberById(memberId); Plan plan = planRepository.findPlanByMemberAndPlanIdAndDeletedAtIsNull(member,planId); if(plan == null){ throw new ApplicationException(ErrorCode.NOT_FOUND_EXCEPTION); @@ -105,13 +112,13 @@ public void deletePlan(Member member,Long planId){ //Buisness dayRepository.deleteAllByMemberAndPlan(member,plan); if(planReview!=null){ - deletePlanReview(member,planReview.getPlanReviewId()); + deletePlanReview(memberId,planReview.getPlanReviewId()); } planRepository.deletePlanByPlanId(planId); } @Transactional - public PlanDetailRes findPlanDetail(Member member, Long planId){ + public PlanDetailRes findPlanDetail(Long memberId, Long planId){ // Validation Plan plan = planRepository.findPlanByPlanIdAndDeletedAtIsNull(planId); if(plan == null){ @@ -148,10 +155,10 @@ public PlanDetailRes findPlanDetail(Member member, Long planId){ // 날짜 순으로 정렬 dailyLists.sort(Comparator.comparing(DailyList::getDate)); - if (member ==null){ + if (memberId == null){ isWriter = false; }else { - isWriter = plan.getMember().getMemberId().equals(member.getMemberId()); + isWriter = plan.getMember().getMemberId().equals(memberId); } String remainDate = isBetween(plan.getStartDate(),plan.getEndDate()); @@ -160,8 +167,9 @@ public PlanDetailRes findPlanDetail(Member member, Long planId){ } @Transactional - public Boolean updatePlanIsPublic(Member member,Long planId){ + public Boolean updatePlanIsPublic(Long memberId, Long planId){ // Validation + Member member = memberService.findMemberById(memberId); Plan plan = planRepository.findPlanByMemberAndPlanIdAndEndDateIsBeforeAndDeletedAtIsNull(member,planId,LocalDate.now()); if(plan == null){ throw new ApplicationException(ErrorCode.NOT_FOUND_EXCEPTION); @@ -178,8 +186,9 @@ public Boolean updatePlanIsPublic(Member member,Long planId){ } @Transactional - public void savePlanReview(Member member, Long planId, PlanReviewReq planReviewReq,List images){ + public void savePlanReview(Long memberId, Long planId, PlanReviewReq planReviewReq,List images){ // Validation + Member member = memberService.findMemberById(memberId); Plan plan = planRepository.findPlanByMemberAndPlanIdAndEndDateIsBeforeAndDeletedAtIsNull(member,planId,LocalDate.now()); if(plan == null){ throw new ApplicationException(ErrorCode.NOT_FOUND_EXCEPTION); @@ -212,7 +221,7 @@ public void savePlanReview(Member member, Long planId, PlanReviewReq planReviewR } @Transactional - public PlanReviewRes findPlanReview(Member member,long planId){ + public PlanReviewRes findPlanReview(Long memberId, long planId){ // Validation Plan plan = planRepository.findPlanByPlanIdAndDeletedAtIsNull(planId); if(plan == null){ @@ -221,10 +230,10 @@ public PlanReviewRes findPlanReview(Member member,long planId){ PlanReview planReview = planReviewRepository.findPlanReview(plan); //Buisness boolean isWriter; - if (member ==null){ + if (memberId ==null){ isWriter = false; }else { - isWriter = plan.getMember().getMemberId().equals(member.getMemberId()); + isWriter = plan.getMember().getMemberId().equals(memberId); } String profileUrl = s3Client.baseUrl()+plan.getMember().getProfileUuid()+"/profile_"+plan.getMember().getProfileUuid(); if(planReview==null){ @@ -243,12 +252,13 @@ public PlanReviewRes findPlanReview(Member member,long planId){ } @Transactional - public void updatePlanReview(Member member, Long reviewId, UpdatePlanReviewReq updatePlanReviewReq, List images) { + public void updatePlanReview(Long memberId, Long reviewId, UpdatePlanReviewReq updatePlanReviewReq, List images) { // Validation PlanReview planReview = planReviewRepository.findPlanReviewByPlanReviewIdAndDeletedAtIsNull(reviewId); - if(!Objects.equals(planReview.getPlan().getMember().getMemberId(), member.getMemberId())){ + if(!Objects.equals(planReview.getPlan().getMember().getMemberId(), memberId)){ throw new ApplicationException(ErrorCode.UNAUTHORIZED_EXCEPTION); } + Member member = memberService.findMemberById(memberId); //Business if (images != null) { try { @@ -285,10 +295,10 @@ public void updatePlanReview(Member member, Long reviewId, UpdatePlanReviewReq u } @Transactional - public void deletePlanReview(Member member,Long reviewId){ + public void deletePlanReview(Long memberId, Long reviewId){ //Vailda PlanReview planReview = planReviewRepository.findPlanReviewByPlanReviewIdAndDeletedAtIsNull(reviewId); - if(!Objects.equals(planReview.getPlan().getMember().getMemberId(), member.getMemberId())){ + if(!Objects.equals(planReview.getPlan().getMember().getMemberId(), memberId)){ throw new ApplicationException(ErrorCode.UNAUTHORIZED_EXCEPTION); } List planReviewImageList = planReviewImageRepository.findAllByPlanReviewAndDeletedAtIsNull(planReview); @@ -303,8 +313,9 @@ public void deletePlanReview(Member member,Long reviewId){ } @Transactional - public List findMyPlans(Member member) { + public List findMyPlans(Long memberId) { //Vaildation + Member member = memberService.findMemberById(memberId); List list = planRepository.findAllByMemberAndDeletedAtIsNull(member); //Business List top3list = list.stream() @@ -343,7 +354,8 @@ public PlaceInfoPageRes searchPlace(String word, Pageable page){ } @Transactional - public PlanPageRes findIsCompelete(Member member, Pageable page, Boolean compelete){ + public PlanPageRes findIsCompelete(Long memberId, Pageable page, Boolean compelete){ + Member member = memberService.findMemberById(memberId); Pageable pageable = PageRequest.of(page.getPageNumber(), page.getPageSize(), Sort.by("createdAt").descending()); Page planPage; List planResList; @@ -372,7 +384,7 @@ public OpenPlanPageRes findOpenPlans(Pageable page){ return OpenPlanPageRes.of(openPlanResList,planPage.getNumber(),planPage.getSize(),planPage.getTotalPages(),planPage.isLast()); } - public void savePlaceByDay(List places, Member member,Plan plan){ + public void savePlaceByDay(List places, Member member, Plan plan){ for(DailyPlace dailyPlace : places){ for(Long placeId : dailyPlace.places()){ Place place = placeRepository.findById(placeId).orElseThrow(()->new ApplicationException(ErrorCode.NOT_FOUND_EXCEPTION)); diff --git a/src/main/java/Journey/Together/domain/report/controller/ReportController.java b/src/main/java/Journey/Together/domain/report/controller/ReportController.java index 059f4ce..c572cb5 100644 --- a/src/main/java/Journey/Together/domain/report/controller/ReportController.java +++ b/src/main/java/Journey/Together/domain/report/controller/ReportController.java @@ -38,13 +38,13 @@ public ApiResponse getReports(@AuthenticationPrincipal PrincipalDetai @PageableDefault(size = 10,page = 0) Pageable pageable ){ return ApiResponse.success(Success.CREATE_RERORT_SUCCESS, - reportService.getReports(principalDetails.getMember(), approval, reason, reviewType, pageable)); + reportService.getReports(principalDetails.getMemberType(), approval, reason, reviewType, pageable)); } @PatchMapping() public ApiResponse setAprrovalStatus(@AuthenticationPrincipal PrincipalDetails principalDetails, @RequestBody ApprovalDto approvalDto){ - reportService.setApprovalStatus(principalDetails.getMember(), approvalDto); + reportService.setApprovalStatus(principalDetails.getMemberType(), approvalDto); return ApiResponse.success(Success.UPDATE_APPROVAL_SUCCESS); } diff --git a/src/main/java/Journey/Together/domain/report/service/ReportService.java b/src/main/java/Journey/Together/domain/report/service/ReportService.java index b0a7e98..5420b0d 100644 --- a/src/main/java/Journey/Together/domain/report/service/ReportService.java +++ b/src/main/java/Journey/Together/domain/report/service/ReportService.java @@ -71,8 +71,8 @@ public Report reportBuilder(ReportReq reportReq,ReviewType reviewType){ } } - public ReportRes getReports(Member member, Boolean approval, String reason, String reviewType, Pageable pageable) { - if(!member.getMemberType().equals(MemberType.ADMIN)){ + public ReportRes getReports(MemberType memberType, Boolean approval, String reason, String reviewType, Pageable pageable) { + if(!memberType.equals(MemberType.ADMIN)){ throw new ApplicationException(ErrorCode.WRONG_ACCESS_EXCEPTION); } @@ -102,8 +102,8 @@ public ReviewDto getReviewDto(Report report){ } @Transactional - public void setApprovalStatus(Member member, ApprovalDto approvalDto) { - if(!member.getMemberType().equals(MemberType.ADMIN)){ + public void setApprovalStatus(MemberType memberType, ApprovalDto approvalDto) { + if(!memberType.equals(MemberType.ADMIN)){ throw new ApplicationException(ErrorCode.WRONG_ACCESS_EXCEPTION); } diff --git a/src/main/java/Journey/Together/global/security/PrincipalDetails.java b/src/main/java/Journey/Together/global/security/PrincipalDetails.java index bf2d693..5aab365 100644 --- a/src/main/java/Journey/Together/global/security/PrincipalDetails.java +++ b/src/main/java/Journey/Together/global/security/PrincipalDetails.java @@ -1,6 +1,7 @@ package Journey.Together.global.security; import Journey.Together.domain.member.entity.Member; +import Journey.Together.domain.member.enumerate.MemberType; import lombok.Getter; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; @@ -14,39 +15,38 @@ public class PrincipalDetails implements UserDetails, OAuth2User { @Getter - private final Member member; + private String email; + + @Getter + private MemberType memberType; + + @Getter + private Long memberId; private Map attributes; // 일반 로그인 - public PrincipalDetails(Member member) { - this.member = member; - } - - // OAuth 로그인 - public PrincipalDetails(Member member, Map attributes) { - this.member = member; - this.attributes = attributes; + public PrincipalDetails(String email, MemberType memberType, Long memberId) { + this.email = email; + this.memberType = memberType; + this.memberId = memberId; } // 권한 정보 반환 (GENERAL, ADMIN 중 하나) @Override public Collection getAuthorities() { Collection authorities = new ArrayList(); - authorities.add(new SimpleGrantedAuthority(String.valueOf(member.getMemberType()))); + authorities.add(new SimpleGrantedAuthority(String.valueOf(memberType))); return authorities; } - // 사용자의 비밀번호 반환 + // 사용자의 이름 반환 @Override - public String getPassword() { - return member.getPassword(); - } + public String getUsername() { return null; } - // 사용자의 이름 반환 @Override - public String getUsername() { - return member.getName(); + public String getPassword() { + return null; // 패스워드는 JWT 인증 방식에서 필요하지 않음 } // 계정이 잠기지 않았으므로 true 반환 diff --git a/src/main/java/Journey/Together/global/security/jwt/JwtFilter.java b/src/main/java/Journey/Together/global/security/jwt/JwtFilter.java index b1a40df..89538a3 100644 --- a/src/main/java/Journey/Together/global/security/jwt/JwtFilter.java +++ b/src/main/java/Journey/Together/global/security/jwt/JwtFilter.java @@ -32,7 +32,7 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse String token = resolveToken(request); - // 토큰이 존재할 경우, Authentication에 인증 정보 저장 및 로그 출력 + // 토큰이 존재할 경우, Authentication에 인증 정보 저장 if (StringUtils.hasText(token) && tokenProvider.validateToken(token)) { Authentication authentication = tokenProvider.getAuthentication(token); SecurityContextHolder.getContext().setAuthentication(authentication); diff --git a/src/main/java/Journey/Together/global/security/jwt/TokenProvider.java b/src/main/java/Journey/Together/global/security/jwt/TokenProvider.java index b7ac799..b9ceb2f 100644 --- a/src/main/java/Journey/Together/global/security/jwt/TokenProvider.java +++ b/src/main/java/Journey/Together/global/security/jwt/TokenProvider.java @@ -142,8 +142,8 @@ public TokenDto reissue(Member member, String refreshToken) { public Authentication getAuthentication(String token) { String email = getEmail(token); MemberType memberType = getType(token); - Member member = memberRepository.findMemberByEmailAndMemberTypeAndDeletedAtIsNull(email, memberType).orElseThrow(() -> new ApplicationException(ErrorCode.NOT_FOUND_EXCEPTION)); - PrincipalDetails principalDetails = new PrincipalDetails(member); + Long memberId = getId(token); + PrincipalDetails principalDetails = new PrincipalDetails(email, memberType, memberId); return new UsernamePasswordAuthenticationToken(principalDetails, "", principalDetails.getAuthorities()); } @@ -166,6 +166,16 @@ public MemberType getType(String token) { return MemberType.valueOf((String) Jwts.parserBuilder().setSigningKey(key).build().parseClaimsJws(token).getBody().get("role")); } + /** + * 토큰에서 id 정보 반환 + * + * @param token - 일반적으로 액세스 토큰 / 토큰 재발급 요청 시에는 리프레쉬 토큰이 들어옴 + * @return 사용자의 id 반환 + */ + public Long getId(String token) { + return Long.valueOf(Jwts.parserBuilder().setSigningKey(key).build().parseClaimsJws(token).getBody().get("id").toString()); + } + /** * 토큰의 만료기한 반환 * @param token - 일반적으로 액세스 토큰 / 토큰 재발급 요청 시에는 리프레쉬 토큰이 들어옴 @@ -178,11 +188,12 @@ public Long getExpiration(String token) { /** * Claims 정보 생성 * @param member - 사용자 정보 중 사용자를 구분할 수 있는 정보 두 개를 활용함 - * @return 사용자 구분 정보인 이메일과 역할을 저장한 Claims 객체 반환 + * @return 사용자 구분 정보인 이메일과 역할과 id를 저장한 Claims 객체 반환 */ private Claims getClaims(Member member) { Claims claims = Jwts.claims().setSubject(member.getEmail()); claims.put("role", member.getMemberType()); + claims.put("id", member.getMemberId()); return claims; }