diff --git a/src/main/java/com/example/solidconnection/application/controller/ApplicationController.java b/src/main/java/com/example/solidconnection/application/controller/ApplicationController.java index e79b4f8e3..07571d060 100644 --- a/src/main/java/com/example/solidconnection/application/controller/ApplicationController.java +++ b/src/main/java/com/example/solidconnection/application/controller/ApplicationController.java @@ -8,7 +8,6 @@ import com.example.solidconnection.common.resolver.AuthorizedUser; import com.example.solidconnection.security.annotation.RequireRoleAccess; import com.example.solidconnection.siteuser.domain.Role; -import com.example.solidconnection.siteuser.domain.SiteUser; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; @@ -31,10 +30,10 @@ public class ApplicationController { // 지원서 제출하기 api @PostMapping public ResponseEntity apply( - @AuthorizedUser SiteUser siteUser, + @AuthorizedUser long siteUserId, @Valid @RequestBody ApplyRequest applyRequest ) { - ApplicationSubmissionResponse applicationSubmissionResponse = applicationSubmissionService.apply(siteUser, applyRequest); + ApplicationSubmissionResponse applicationSubmissionResponse = applicationSubmissionService.apply(siteUserId, applyRequest); return ResponseEntity .status(HttpStatus.OK) .body(applicationSubmissionResponse); @@ -43,22 +42,22 @@ public ResponseEntity apply( @RequireRoleAccess(roles = {Role.ADMIN}) @GetMapping public ResponseEntity getApplicants( - @AuthorizedUser SiteUser siteUser, + @AuthorizedUser long siteUserId, @RequestParam(required = false, defaultValue = "") String region, @RequestParam(required = false, defaultValue = "") String keyword ) { - applicationQueryService.validateSiteUserCanViewApplicants(siteUser); - ApplicationsResponse result = applicationQueryService.getApplicants(siteUser, region, keyword); + applicationQueryService.validateSiteUserCanViewApplicants(siteUserId); + ApplicationsResponse result = applicationQueryService.getApplicants(siteUserId, region, keyword); return ResponseEntity .ok(result); } @GetMapping("/competitors") public ResponseEntity getApplicantsForUserCompetitors( - @AuthorizedUser SiteUser siteUser + @AuthorizedUser long siteUserId ) { - applicationQueryService.validateSiteUserCanViewApplicants(siteUser); - ApplicationsResponse result = applicationQueryService.getApplicantsByUserApplications(siteUser); + applicationQueryService.validateSiteUserCanViewApplicants(siteUserId); + ApplicationsResponse result = applicationQueryService.getApplicantsByUserApplications(siteUserId); return ResponseEntity .ok(result); } diff --git a/src/main/java/com/example/solidconnection/application/service/ApplicationQueryService.java b/src/main/java/com/example/solidconnection/application/service/ApplicationQueryService.java index 9b34bdbc5..7eba19de3 100644 --- a/src/main/java/com/example/solidconnection/application/service/ApplicationQueryService.java +++ b/src/main/java/com/example/solidconnection/application/service/ApplicationQueryService.java @@ -1,6 +1,7 @@ package com.example.solidconnection.application.service; import static com.example.solidconnection.common.exception.ErrorCode.APPLICATION_NOT_APPROVED; +import static com.example.solidconnection.common.exception.ErrorCode.USER_NOT_FOUND; import com.example.solidconnection.application.domain.Application; import com.example.solidconnection.application.dto.ApplicantsResponse; @@ -9,6 +10,7 @@ import com.example.solidconnection.common.VerifyStatus; import com.example.solidconnection.common.exception.CustomException; import com.example.solidconnection.siteuser.domain.SiteUser; +import com.example.solidconnection.siteuser.repository.SiteUserRepository; import com.example.solidconnection.university.domain.UnivApplyInfo; import com.example.solidconnection.university.repository.UnivApplyInfoRepository; import com.example.solidconnection.university.repository.custom.UnivApplyInfoFilterRepositoryImpl; @@ -32,14 +34,17 @@ public class ApplicationQueryService { private final ApplicationRepository applicationRepository; private final UnivApplyInfoRepository univApplyInfoRepository; private final UnivApplyInfoFilterRepositoryImpl universityFilterRepository; + private final SiteUserRepository siteUserRepository; @Value("${university.term}") public String term; // todo: 캐싱 정책 변경 시 수정 필요 @Transactional(readOnly = true) - public ApplicationsResponse getApplicants(SiteUser siteUser, String regionCode, String keyword) { + public ApplicationsResponse getApplicants(long siteUserId, String regionCode, String keyword) { // 1. 대학 지원 정보 필터링 (regionCode, keyword) + SiteUser siteUser = siteUserRepository.findById(siteUserId) + .orElseThrow(() -> new CustomException(USER_NOT_FOUND)); List univApplyInfos = universityFilterRepository.findAllByRegionCodeAndKeywords(regionCode, List.of(keyword)); if (univApplyInfos.isEmpty()) { return new ApplicationsResponse(List.of(), List.of(), List.of()); @@ -54,7 +59,9 @@ public ApplicationsResponse getApplicants(SiteUser siteUser, String regionCode, } @Transactional(readOnly = true) - public ApplicationsResponse getApplicantsByUserApplications(SiteUser siteUser) { + public ApplicationsResponse getApplicantsByUserApplications(long siteUserId) { + SiteUser siteUser = siteUserRepository.findById(siteUserId) + .orElseThrow(() -> new CustomException(USER_NOT_FOUND)); Application userLatestApplication = applicationRepository.getApplicationBySiteUserIdAndTerm(siteUser.getId(), term); List univApplyInfoIds = Stream.of( @@ -118,7 +125,9 @@ private List createUniversityApplicantsResponses( } @Transactional(readOnly = true) - public void validateSiteUserCanViewApplicants(SiteUser siteUser) { + public void validateSiteUserCanViewApplicants(long siteUserId) { + SiteUser siteUser = siteUserRepository.findById(siteUserId) + .orElseThrow(() -> new CustomException(USER_NOT_FOUND)); VerifyStatus verifyStatus = applicationRepository.getApplicationBySiteUserIdAndTerm(siteUser.getId(), term).getVerifyStatus(); if (verifyStatus != VerifyStatus.APPROVED) { throw new CustomException(APPLICATION_NOT_APPROVED); diff --git a/src/main/java/com/example/solidconnection/application/service/ApplicationSubmissionService.java b/src/main/java/com/example/solidconnection/application/service/ApplicationSubmissionService.java index 02c096529..4fd403d3a 100644 --- a/src/main/java/com/example/solidconnection/application/service/ApplicationSubmissionService.java +++ b/src/main/java/com/example/solidconnection/application/service/ApplicationSubmissionService.java @@ -5,6 +5,7 @@ import static com.example.solidconnection.common.exception.ErrorCode.INVALID_GPA_SCORE_STATUS; import static com.example.solidconnection.common.exception.ErrorCode.INVALID_LANGUAGE_TEST_SCORE; import static com.example.solidconnection.common.exception.ErrorCode.INVALID_LANGUAGE_TEST_SCORE_STATUS; +import static com.example.solidconnection.common.exception.ErrorCode.USER_NOT_FOUND; import com.example.solidconnection.application.domain.Application; import com.example.solidconnection.application.dto.ApplicationSubmissionResponse; @@ -18,6 +19,7 @@ import com.example.solidconnection.score.repository.GpaScoreRepository; import com.example.solidconnection.score.repository.LanguageTestScoreRepository; import com.example.solidconnection.siteuser.domain.SiteUser; +import com.example.solidconnection.siteuser.repository.SiteUserRepository; import java.util.Optional; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Value; @@ -33,6 +35,7 @@ public class ApplicationSubmissionService { private final ApplicationRepository applicationRepository; private final GpaScoreRepository gpaScoreRepository; private final LanguageTestScoreRepository languageTestScoreRepository; + private final SiteUserRepository siteUserRepository; @Value("${university.term}") private String term; @@ -40,7 +43,9 @@ public class ApplicationSubmissionService { // 학점 및 어학성적이 모두 유효한 경우에만 지원서 등록이 가능하다. // 기존에 있던 status field 우선 APRROVED로 입력시킨다. @Transactional - public ApplicationSubmissionResponse apply(SiteUser siteUser, ApplyRequest applyRequest) { + public ApplicationSubmissionResponse apply(long siteUserId, ApplyRequest applyRequest) { + SiteUser siteUser = siteUserRepository.findById(siteUserId) + .orElseThrow(() -> new CustomException(USER_NOT_FOUND)); UnivApplyInfoChoiceRequest univApplyInfoChoiceRequest = applyRequest.univApplyInfoChoiceRequest(); GpaScore gpaScore = getValidGpaScore(siteUser, applyRequest.gpaScoreId()); LanguageTestScore languageTestScore = getValidLanguageTestScore(siteUser, applyRequest.languageTestScoreId()); diff --git a/src/main/java/com/example/solidconnection/auth/controller/AuthController.java b/src/main/java/com/example/solidconnection/auth/controller/AuthController.java index da3ea12c1..57a42223d 100644 --- a/src/main/java/com/example/solidconnection/auth/controller/AuthController.java +++ b/src/main/java/com/example/solidconnection/auth/controller/AuthController.java @@ -21,7 +21,6 @@ import com.example.solidconnection.common.exception.ErrorCode; import com.example.solidconnection.common.resolver.AuthorizedUser; import com.example.solidconnection.siteuser.domain.AuthType; -import com.example.solidconnection.siteuser.domain.SiteUser; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; @@ -104,11 +103,11 @@ public ResponseEntity signOut( @DeleteMapping("/quit") public ResponseEntity quit( - @AuthorizedUser SiteUser siteUser, - Authentication authentication // todo: #299를 작업하며 인자를 (Authentication authentication)만 받도록 수정해야 함 + Authentication authentication, + @AuthorizedUser long siteUserId ) { String accessToken = getAccessToken(authentication); - authService.quit(siteUser, accessToken); + authService.quit(siteUserId, accessToken); return ResponseEntity.ok().build(); } diff --git a/src/main/java/com/example/solidconnection/auth/service/AuthService.java b/src/main/java/com/example/solidconnection/auth/service/AuthService.java index d487d39e8..2737360c2 100644 --- a/src/main/java/com/example/solidconnection/auth/service/AuthService.java +++ b/src/main/java/com/example/solidconnection/auth/service/AuthService.java @@ -1,12 +1,14 @@ package com.example.solidconnection.auth.service; import static com.example.solidconnection.common.exception.ErrorCode.REFRESH_TOKEN_EXPIRED; +import static com.example.solidconnection.common.exception.ErrorCode.USER_NOT_FOUND; import com.example.solidconnection.auth.dto.ReissueRequest; import com.example.solidconnection.auth.dto.ReissueResponse; import com.example.solidconnection.auth.token.TokenBlackListService; import com.example.solidconnection.common.exception.CustomException; import com.example.solidconnection.siteuser.domain.SiteUser; +import com.example.solidconnection.siteuser.repository.SiteUserRepository; import java.time.LocalDate; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -18,6 +20,7 @@ public class AuthService { private final AuthTokenProvider authTokenProvider; private final TokenBlackListService tokenBlackListService; + private final SiteUserRepository siteUserRepository; /* * 로그아웃한다. @@ -37,7 +40,9 @@ public void signOut(String token) { * - 로그아웃한다. * */ @Transactional - public void quit(SiteUser siteUser, String token) { // todo: #299를 작업하며 인자를 (String token)만 받도록 수정해야 함 + public void quit(long siteUserId, String token) { + SiteUser siteUser = siteUserRepository.findById(siteUserId) + .orElseThrow(() -> new CustomException(USER_NOT_FOUND)); LocalDate tomorrow = LocalDate.now().plusDays(1); siteUser.setQuitedAt(tomorrow); signOut(token); diff --git a/src/main/java/com/example/solidconnection/common/resolver/AuthorizedUserResolver.java b/src/main/java/com/example/solidconnection/common/resolver/AuthorizedUserResolver.java index 917784f8b..7afb08d66 100644 --- a/src/main/java/com/example/solidconnection/common/resolver/AuthorizedUserResolver.java +++ b/src/main/java/com/example/solidconnection/common/resolver/AuthorizedUserResolver.java @@ -4,7 +4,6 @@ import com.example.solidconnection.common.exception.CustomException; import com.example.solidconnection.security.userdetails.SiteUserDetails; -import com.example.solidconnection.siteuser.domain.SiteUser; import lombok.RequiredArgsConstructor; import org.springframework.core.MethodParameter; import org.springframework.security.core.Authentication; @@ -22,7 +21,8 @@ public class AuthorizedUserResolver implements HandlerMethodArgumentResolver { @Override public boolean supportsParameter(MethodParameter parameter) { return parameter.hasParameterAnnotation(AuthorizedUser.class) - && parameter.getParameterType().equals(SiteUser.class); + && (parameter.getParameterType().equals(long.class) + || parameter.getParameterType().equals(Long.class)); } @Override @@ -30,21 +30,28 @@ public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) { - SiteUser siteUser = extractSiteUserFromAuthentication(); - if (parameter.getParameterAnnotation(AuthorizedUser.class).required() && siteUser == null) { + Long siteUserId = extractIdFromAuthentication(); + if (isRequired(parameter) && siteUserId == null) { throw new CustomException(AUTHENTICATION_FAILED, "로그인 상태가 아닙니다."); } - - return siteUser; + return siteUserId; } - private SiteUser extractSiteUserFromAuthentication() { + private Long extractIdFromAuthentication() { try { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); SiteUserDetails principal = (SiteUserDetails) authentication.getPrincipal(); - return principal.getSiteUser(); + return principal.getSiteUser().getId(); } catch (Exception e) { return null; } } + + private boolean isRequired(MethodParameter parameter) { + if (parameter.getParameterType().isPrimitive()) { // NPE 방지를 위해 required로 간주 + return true; + } + AuthorizedUser authorizedUser = parameter.getParameterAnnotation(AuthorizedUser.class); + return authorizedUser != null && authorizedUser.required(); + } } diff --git a/src/main/java/com/example/solidconnection/community/board/controller/BoardController.java b/src/main/java/com/example/solidconnection/community/board/controller/BoardController.java index 20601eb65..196a48239 100644 --- a/src/main/java/com/example/solidconnection/community/board/controller/BoardController.java +++ b/src/main/java/com/example/solidconnection/community/board/controller/BoardController.java @@ -4,7 +4,6 @@ import com.example.solidconnection.community.board.domain.BoardCode; import com.example.solidconnection.community.post.dto.PostListResponse; import com.example.solidconnection.community.post.service.PostQueryService; -import com.example.solidconnection.siteuser.domain.SiteUser; import java.util.ArrayList; import java.util.List; import lombok.RequiredArgsConstructor; @@ -34,7 +33,7 @@ public ResponseEntity findAccessibleCodes() { @GetMapping("/{code}") public ResponseEntity findPostsByCodeAndCategory( - @AuthorizedUser SiteUser siteUser, + @AuthorizedUser long siteUserId, // todo: '사용하지 않는 인자'로 인증된 유저만 접근하게 하기보다는, 다른 방식으로 접근하는것이 좋을 것 같다 @PathVariable(value = "code") String code, @RequestParam(value = "category", defaultValue = "전체") String category) { List postsByCodeAndPostCategory = postQueryService diff --git a/src/main/java/com/example/solidconnection/community/comment/controller/CommentController.java b/src/main/java/com/example/solidconnection/community/comment/controller/CommentController.java index f17792a75..9e64a25fd 100644 --- a/src/main/java/com/example/solidconnection/community/comment/controller/CommentController.java +++ b/src/main/java/com/example/solidconnection/community/comment/controller/CommentController.java @@ -7,7 +7,6 @@ import com.example.solidconnection.community.comment.dto.CommentUpdateRequest; import com.example.solidconnection.community.comment.dto.CommentUpdateResponse; import com.example.solidconnection.community.comment.service.CommentService; -import com.example.solidconnection.siteuser.domain.SiteUser; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; @@ -28,29 +27,29 @@ public class CommentController { @PostMapping public ResponseEntity createComment( - @AuthorizedUser SiteUser siteUser, + @AuthorizedUser long siteUserId, @Valid @RequestBody CommentCreateRequest commentCreateRequest ) { - CommentCreateResponse response = commentService.createComment(siteUser, commentCreateRequest); + CommentCreateResponse response = commentService.createComment(siteUserId, commentCreateRequest); return ResponseEntity.ok().body(response); } @PatchMapping("/{comment_id}") public ResponseEntity updateComment( - @AuthorizedUser SiteUser siteUser, + @AuthorizedUser long siteUserId, @PathVariable("comment_id") Long commentId, @Valid @RequestBody CommentUpdateRequest commentUpdateRequest ) { - CommentUpdateResponse response = commentService.updateComment(siteUser, commentId, commentUpdateRequest); + CommentUpdateResponse response = commentService.updateComment(siteUserId, commentId, commentUpdateRequest); return ResponseEntity.ok().body(response); } @DeleteMapping("/{comment_id}") public ResponseEntity deleteCommentById( - @AuthorizedUser SiteUser siteUser, + @AuthorizedUser long siteUserId, @PathVariable("comment_id") Long commentId ) { - CommentDeleteResponse response = commentService.deleteCommentById(siteUser, commentId); + CommentDeleteResponse response = commentService.deleteCommentById(siteUserId, commentId); return ResponseEntity.ok().body(response); } } diff --git a/src/main/java/com/example/solidconnection/community/comment/service/CommentService.java b/src/main/java/com/example/solidconnection/community/comment/service/CommentService.java index 7f31885ea..81b6bb49b 100644 --- a/src/main/java/com/example/solidconnection/community/comment/service/CommentService.java +++ b/src/main/java/com/example/solidconnection/community/comment/service/CommentService.java @@ -3,6 +3,7 @@ import static com.example.solidconnection.common.exception.ErrorCode.CAN_NOT_UPDATE_DEPRECATED_COMMENT; import static com.example.solidconnection.common.exception.ErrorCode.INVALID_COMMENT_LEVEL; import static com.example.solidconnection.common.exception.ErrorCode.INVALID_POST_ACCESS; +import static com.example.solidconnection.common.exception.ErrorCode.USER_NOT_FOUND; import com.example.solidconnection.common.exception.CustomException; import com.example.solidconnection.community.comment.domain.Comment; @@ -36,7 +37,9 @@ public class CommentService { private final SiteUserRepository siteUserRepository; @Transactional(readOnly = true) - public List findCommentsByPostId(SiteUser siteUser, Long postId) { + public List findCommentsByPostId(long siteUserId, Long postId) { + SiteUser siteUser = siteUserRepository.findById(siteUserId) + .orElseThrow(() -> new CustomException(USER_NOT_FOUND)); List allComments = commentRepository.findCommentTreeByPostId(postId); List filteredComments = filterCommentsByDeletionRules(allComments); @@ -83,7 +86,9 @@ private Boolean isOwner(Comment comment, SiteUser siteUser) { } @Transactional - public CommentCreateResponse createComment(SiteUser siteUser, CommentCreateRequest commentCreateRequest) { + public CommentCreateResponse createComment(long siteUserId, CommentCreateRequest commentCreateRequest) { + SiteUser siteUser = siteUserRepository.findById(siteUserId) + .orElseThrow(() -> new CustomException(USER_NOT_FOUND)); Post post = postRepository.getById(commentCreateRequest.postId()); Comment parentComment = null; @@ -105,7 +110,9 @@ private void validateCommentDepth(Comment parentComment) { } @Transactional - public CommentUpdateResponse updateComment(SiteUser siteUser, Long commentId, CommentUpdateRequest commentUpdateRequest) { + public CommentUpdateResponse updateComment(long siteUserId, Long commentId, CommentUpdateRequest commentUpdateRequest) { + SiteUser siteUser = siteUserRepository.findById(siteUserId) + .orElseThrow(() -> new CustomException(USER_NOT_FOUND)); Comment comment = commentRepository.getById(commentId); validateDeprecated(comment); validateOwnership(comment, siteUser); @@ -122,7 +129,9 @@ private void validateDeprecated(Comment comment) { } @Transactional - public CommentDeleteResponse deleteCommentById(SiteUser siteUser, Long commentId) { + public CommentDeleteResponse deleteCommentById(long siteUserId, Long commentId) { + SiteUser siteUser = siteUserRepository.findById(siteUserId) + .orElseThrow(() -> new CustomException(USER_NOT_FOUND)); Comment comment = commentRepository.getById(commentId); validateOwnership(comment, siteUser); diff --git a/src/main/java/com/example/solidconnection/community/post/controller/PostController.java b/src/main/java/com/example/solidconnection/community/post/controller/PostController.java index c329425a8..88ea58695 100644 --- a/src/main/java/com/example/solidconnection/community/post/controller/PostController.java +++ b/src/main/java/com/example/solidconnection/community/post/controller/PostController.java @@ -12,7 +12,6 @@ import com.example.solidconnection.community.post.service.PostCommandService; import com.example.solidconnection.community.post.service.PostLikeService; import com.example.solidconnection.community.post.service.PostQueryService; -import com.example.solidconnection.siteuser.domain.SiteUser; import jakarta.validation.Valid; import java.util.Collections; import java.util.List; @@ -40,20 +39,20 @@ public class PostController { @PostMapping public ResponseEntity createPost( - @AuthorizedUser SiteUser siteUser, + @AuthorizedUser long siteUserId, @Valid @RequestPart("postCreateRequest") PostCreateRequest postCreateRequest, @RequestParam(value = "file", required = false) List imageFile ) { if (imageFile == null) { imageFile = Collections.emptyList(); } - PostCreateResponse post = postCommandService.createPost(siteUser, postCreateRequest, imageFile); + PostCreateResponse post = postCommandService.createPost(siteUserId, postCreateRequest, imageFile); return ResponseEntity.ok().body(post); } @PatchMapping(value = "/{post_id}") public ResponseEntity updatePost( - @AuthorizedUser SiteUser siteUser, + @AuthorizedUser long siteUserId, @PathVariable("post_id") Long postId, @Valid @RequestPart("postUpdateRequest") PostUpdateRequest postUpdateRequest, @RequestParam(value = "file", required = false) List imageFile @@ -62,44 +61,44 @@ public ResponseEntity updatePost( imageFile = Collections.emptyList(); } PostUpdateResponse postUpdateResponse = postCommandService.updatePost( - siteUser, postId, postUpdateRequest, imageFile + siteUserId, postId, postUpdateRequest, imageFile ); return ResponseEntity.ok().body(postUpdateResponse); } @GetMapping("/{post_id}") public ResponseEntity findPostById( - @AuthorizedUser SiteUser siteUser, + @AuthorizedUser long siteUserId, @PathVariable("post_id") Long postId ) { - PostFindResponse postFindResponse = postQueryService.findPostById(siteUser, postId); + PostFindResponse postFindResponse = postQueryService.findPostById(siteUserId, postId); return ResponseEntity.ok().body(postFindResponse); } @DeleteMapping(value = "/{post_id}") public ResponseEntity deletePostById( - @AuthorizedUser SiteUser siteUser, + @AuthorizedUser long siteUserId, @PathVariable("post_id") Long postId ) { - PostDeleteResponse postDeleteResponse = postCommandService.deletePostById(siteUser, postId); + PostDeleteResponse postDeleteResponse = postCommandService.deletePostById(siteUserId, postId); return ResponseEntity.ok().body(postDeleteResponse); } @PostMapping(value = "/{post_id}/like") public ResponseEntity likePost( - @AuthorizedUser SiteUser siteUser, + @AuthorizedUser long siteUserId, @PathVariable("post_id") Long postId ) { - PostLikeResponse postLikeResponse = postLikeService.likePost(siteUser, postId); + PostLikeResponse postLikeResponse = postLikeService.likePost(siteUserId, postId); return ResponseEntity.ok().body(postLikeResponse); } @DeleteMapping(value = "/{post_id}/like") public ResponseEntity dislikePost( - @AuthorizedUser SiteUser siteUser, + @AuthorizedUser long siteUserId, @PathVariable("post_id") Long postId ) { - PostDislikeResponse postDislikeResponse = postLikeService.dislikePost(siteUser, postId); + PostDislikeResponse postDislikeResponse = postLikeService.dislikePost(siteUserId, postId); return ResponseEntity.ok().body(postDislikeResponse); } } diff --git a/src/main/java/com/example/solidconnection/community/post/service/PostCommandService.java b/src/main/java/com/example/solidconnection/community/post/service/PostCommandService.java index 57721ee46..4b3b8d15a 100644 --- a/src/main/java/com/example/solidconnection/community/post/service/PostCommandService.java +++ b/src/main/java/com/example/solidconnection/community/post/service/PostCommandService.java @@ -4,6 +4,7 @@ import static com.example.solidconnection.common.exception.ErrorCode.CAN_NOT_UPLOAD_MORE_THAN_FIVE_IMAGES; import static com.example.solidconnection.common.exception.ErrorCode.INVALID_POST_ACCESS; import static com.example.solidconnection.common.exception.ErrorCode.INVALID_POST_CATEGORY; +import static com.example.solidconnection.common.exception.ErrorCode.USER_NOT_FOUND; import com.example.solidconnection.common.exception.CustomException; import com.example.solidconnection.community.board.domain.Board; @@ -21,6 +22,7 @@ import com.example.solidconnection.s3.dto.UploadedFileUrlResponse; import com.example.solidconnection.s3.service.S3Service; import com.example.solidconnection.siteuser.domain.SiteUser; +import com.example.solidconnection.siteuser.repository.SiteUserRepository; import com.example.solidconnection.util.RedisUtils; import java.util.List; import java.util.Objects; @@ -36,13 +38,16 @@ public class PostCommandService { private final PostRepository postRepository; private final BoardRepository boardRepository; + private final SiteUserRepository siteUserRepository; private final S3Service s3Service; private final RedisService redisService; private final RedisUtils redisUtils; @Transactional - public PostCreateResponse createPost(SiteUser siteUser, PostCreateRequest postCreateRequest, + public PostCreateResponse createPost(long siteUserId, PostCreateRequest postCreateRequest, List imageFile) { + SiteUser siteUser = siteUserRepository.findById(siteUserId) + .orElseThrow(() -> new CustomException(USER_NOT_FOUND)); // 유효성 검증 validatePostCategory(postCreateRequest.postCategory()); validateFileSize(imageFile); @@ -59,8 +64,10 @@ public PostCreateResponse createPost(SiteUser siteUser, PostCreateRequest postCr } @Transactional - public PostUpdateResponse updatePost(SiteUser siteUser, Long postId, PostUpdateRequest postUpdateRequest, + public PostUpdateResponse updatePost(long siteUserId, Long postId, PostUpdateRequest postUpdateRequest, List imageFile) { + SiteUser siteUser = siteUserRepository.findById(siteUserId) + .orElseThrow(() -> new CustomException(USER_NOT_FOUND)); // 유효성 검증 Post post = postRepository.getById(postId); validateOwnership(post, siteUser); @@ -89,7 +96,9 @@ private void savePostImages(List imageFile, Post post) { } @Transactional - public PostDeleteResponse deletePostById(SiteUser siteUser, Long postId) { + public PostDeleteResponse deletePostById(long siteUserId, Long postId) { + SiteUser siteUser = siteUserRepository.findById(siteUserId) + .orElseThrow(() -> new CustomException(USER_NOT_FOUND)); Post post = postRepository.getById(postId); validateOwnership(post, siteUser); validateQuestion(post); diff --git a/src/main/java/com/example/solidconnection/community/post/service/PostLikeService.java b/src/main/java/com/example/solidconnection/community/post/service/PostLikeService.java index 1a7ba05ae..8f9eeb318 100644 --- a/src/main/java/com/example/solidconnection/community/post/service/PostLikeService.java +++ b/src/main/java/com/example/solidconnection/community/post/service/PostLikeService.java @@ -1,6 +1,7 @@ package com.example.solidconnection.community.post.service; import static com.example.solidconnection.common.exception.ErrorCode.DUPLICATE_POST_LIKE; +import static com.example.solidconnection.common.exception.ErrorCode.USER_NOT_FOUND; import com.example.solidconnection.common.exception.CustomException; import com.example.solidconnection.community.post.domain.Post; @@ -10,6 +11,7 @@ import com.example.solidconnection.community.post.repository.PostLikeRepository; import com.example.solidconnection.community.post.repository.PostRepository; import com.example.solidconnection.siteuser.domain.SiteUser; +import com.example.solidconnection.siteuser.repository.SiteUserRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; @@ -21,9 +23,12 @@ public class PostLikeService { private final PostRepository postRepository; private final PostLikeRepository postLikeRepository; + private final SiteUserRepository siteUserRepository; @Transactional(isolation = Isolation.READ_COMMITTED) - public PostLikeResponse likePost(SiteUser siteUser, Long postId) { + public PostLikeResponse likePost(long siteUserId, Long postId) { + SiteUser siteUser = siteUserRepository.findById(siteUserId) + .orElseThrow(() -> new CustomException(USER_NOT_FOUND)); Post post = postRepository.getById(postId); validateDuplicatePostLike(post, siteUser); PostLike postLike = new PostLike(); @@ -35,7 +40,9 @@ public PostLikeResponse likePost(SiteUser siteUser, Long postId) { } @Transactional(isolation = Isolation.READ_COMMITTED) - public PostDislikeResponse dislikePost(SiteUser siteUser, Long postId) { + public PostDislikeResponse dislikePost(long siteUserId, Long postId) { + SiteUser siteUser = siteUserRepository.findById(siteUserId) + .orElseThrow(() -> new CustomException(USER_NOT_FOUND)); Post post = postRepository.getById(postId); PostLike postLike = postLikeRepository.getByPostAndSiteUserId(post, siteUser.getId()); diff --git a/src/main/java/com/example/solidconnection/community/post/service/PostQueryService.java b/src/main/java/com/example/solidconnection/community/post/service/PostQueryService.java index a6f956fc0..85657a8a7 100644 --- a/src/main/java/com/example/solidconnection/community/post/service/PostQueryService.java +++ b/src/main/java/com/example/solidconnection/community/post/service/PostQueryService.java @@ -54,7 +54,9 @@ public List findPostsByCodeAndPostCategory(String code, String } @Transactional(readOnly = true) - public PostFindResponse findPostById(SiteUser siteUser, Long postId) { + public PostFindResponse findPostById(long siteUserId, Long postId) { + SiteUser siteUser = siteUserRepository.findById(siteUserId) + .orElseThrow(() -> new CustomException(USER_NOT_FOUND)); Post post = postRepository.getByIdUsingEntityGraph(postId); Boolean isOwner = getIsOwner(post, siteUser); Boolean isLiked = getIsLiked(post, siteUser); @@ -66,7 +68,7 @@ public PostFindResponse findPostById(SiteUser siteUser, Long postId) { PostFindBoardResponse boardPostFindResultDTO = PostFindBoardResponse.from(board); PostFindSiteUserResponse siteUserPostFindResultDTO = PostFindSiteUserResponse.from(postAuthor); List postImageFindResultDTOList = PostFindPostImageResponse.from(post.getPostImageList()); - List commentFindResultDTOList = commentService.findCommentsByPostId(siteUser, postId); + List commentFindResultDTOList = commentService.findCommentsByPostId(siteUser.getId(), postId); // caching && 어뷰징 방지 if (redisService.isPresent(redisUtils.getValidatePostViewCountRedisKey(siteUser.getId(), postId))) { diff --git a/src/main/java/com/example/solidconnection/mentor/controller/MentorController.java b/src/main/java/com/example/solidconnection/mentor/controller/MentorController.java index 9900e4496..5d9cde156 100644 --- a/src/main/java/com/example/solidconnection/mentor/controller/MentorController.java +++ b/src/main/java/com/example/solidconnection/mentor/controller/MentorController.java @@ -7,7 +7,6 @@ import com.example.solidconnection.mentor.dto.MentorDetailResponse; import com.example.solidconnection.mentor.dto.MentorPreviewResponse; import com.example.solidconnection.mentor.service.MentorQueryService; -import com.example.solidconnection.siteuser.domain.SiteUser; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; @@ -30,18 +29,18 @@ public class MentorController { @GetMapping("/{mentor-id}") public ResponseEntity getMentorDetails( - @AuthorizedUser SiteUser siteUser, + @AuthorizedUser long siteUserId, @PathVariable("mentor-id") Long mentorId ) { - MentorDetailResponse response = mentorQueryService.getMentorDetails(mentorId, siteUser); + MentorDetailResponse response = mentorQueryService.getMentorDetails(mentorId, siteUserId); return ResponseEntity.ok(response); } @GetMapping public ResponseEntity> getMentorPreviews( - @AuthorizedUser SiteUser siteUser, + @AuthorizedUser long siteUserId, @RequestParam("region") String region, - + @PageableDefault(size = 3, sort = "menteeCount", direction = DESC) @SortDefaults({ @SortDefault(sort = "menteeCount", direction = Sort.Direction.DESC), @@ -49,7 +48,7 @@ public ResponseEntity> getMentorPreviews( }) Pageable pageable ) { - SliceResponse response = mentorQueryService.getMentorPreviews(region, siteUser, pageable); + SliceResponse response = mentorQueryService.getMentorPreviews(region, siteUserId, pageable); return ResponseEntity.ok(response); } } diff --git a/src/main/java/com/example/solidconnection/mentor/controller/MentorMyPageController.java b/src/main/java/com/example/solidconnection/mentor/controller/MentorMyPageController.java index ba8bc0911..dd9289a3e 100644 --- a/src/main/java/com/example/solidconnection/mentor/controller/MentorMyPageController.java +++ b/src/main/java/com/example/solidconnection/mentor/controller/MentorMyPageController.java @@ -6,7 +6,6 @@ import com.example.solidconnection.mentor.service.MentorMyPageService; import com.example.solidconnection.security.annotation.RequireRoleAccess; import com.example.solidconnection.siteuser.domain.Role; -import com.example.solidconnection.siteuser.domain.SiteUser; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; @@ -26,19 +25,19 @@ public class MentorMyPageController { @RequireRoleAccess(roles = Role.MENTOR) @GetMapping public ResponseEntity getMentorMyPage( - @AuthorizedUser SiteUser siteUser + @AuthorizedUser long siteUserId ) { - MentorMyPageResponse mentorMyPageResponse = mentorMyPageService.getMentorMyPage(siteUser); + MentorMyPageResponse mentorMyPageResponse = mentorMyPageService.getMentorMyPage(siteUserId); return ResponseEntity.ok(mentorMyPageResponse); } @RequireRoleAccess(roles = Role.MENTOR) @PutMapping public ResponseEntity updateMentorMyPage( - @AuthorizedUser SiteUser siteUser, + @AuthorizedUser long siteUserId, @Valid @RequestBody MentorMyPageUpdateRequest mentorMyPageUpdateRequest ) { - mentorMyPageService.updateMentorMyPage(siteUser, mentorMyPageUpdateRequest); + mentorMyPageService.updateMentorMyPage(siteUserId, mentorMyPageUpdateRequest); return ResponseEntity.ok().build(); } } diff --git a/src/main/java/com/example/solidconnection/mentor/controller/MentoringController.java b/src/main/java/com/example/solidconnection/mentor/controller/MentoringController.java index 9df73e41c..5a347f3fb 100644 --- a/src/main/java/com/example/solidconnection/mentor/controller/MentoringController.java +++ b/src/main/java/com/example/solidconnection/mentor/controller/MentoringController.java @@ -12,7 +12,6 @@ import com.example.solidconnection.mentor.service.MentoringQueryService; import com.example.solidconnection.security.annotation.RequireRoleAccess; import com.example.solidconnection.siteuser.domain.Role; -import com.example.solidconnection.siteuser.domain.SiteUser; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; @@ -35,49 +34,49 @@ public class MentoringController { @RequireRoleAccess(roles = Role.MENTEE) @PostMapping("/apply") public ResponseEntity applyMentoring( - @AuthorizedUser SiteUser siteUser, + @AuthorizedUser long siteUserId, @Valid @RequestBody MentoringApplyRequest mentoringApplyRequest ) { - MentoringApplyResponse response = mentoringCommandService.applyMentoring(siteUser.getId(), mentoringApplyRequest); + MentoringApplyResponse response = mentoringCommandService.applyMentoring(siteUserId, mentoringApplyRequest); return ResponseEntity.ok(response); } @RequireRoleAccess(roles = {Role.ADMIN, Role.MENTOR}) @GetMapping("/apply") public ResponseEntity getMentorings( - @AuthorizedUser SiteUser siteUser + @AuthorizedUser long siteUserId ) { - MentoringListResponse responses = mentoringQueryService.getMentorings(siteUser.getId()); + MentoringListResponse responses = mentoringQueryService.getMentorings(siteUserId); return ResponseEntity.ok(responses); } @RequireRoleAccess(roles = {Role.ADMIN, Role.MENTOR}) @PatchMapping("/{mentoring-id}/apply") public ResponseEntity confirmMentoring( - @AuthorizedUser SiteUser siteUser, + @AuthorizedUser long siteUserId, @PathVariable("mentoring-id") Long mentoringId, @Valid @RequestBody MentoringConfirmRequest mentoringConfirmRequest ) { - MentoringConfirmResponse response = mentoringCommandService.confirmMentoring(siteUser.getId(), mentoringId, mentoringConfirmRequest); + MentoringConfirmResponse response = mentoringCommandService.confirmMentoring(siteUserId, mentoringId, mentoringConfirmRequest); return ResponseEntity.ok(response); } @RequireRoleAccess(roles = {Role.ADMIN, Role.MENTOR}) @PatchMapping("/{mentoring-id}/check") public ResponseEntity checkMentoring( - @AuthorizedUser SiteUser siteUser, + @AuthorizedUser long siteUserId, @PathVariable("mentoring-id") Long mentoringId ) { - MentoringCheckResponse response = mentoringCommandService.checkMentoring(siteUser.getId(), mentoringId); + MentoringCheckResponse response = mentoringCommandService.checkMentoring(siteUserId, mentoringId); return ResponseEntity.ok(response); } @RequireRoleAccess(roles = {Role.ADMIN, Role.MENTOR}) @GetMapping("/check") public ResponseEntity getUncheckedMentoringsCount( - @AuthorizedUser SiteUser siteUser + @AuthorizedUser long siteUserId ) { - MentoringCountResponse response = mentoringQueryService.getNewMentoringsCount(siteUser.getId()); + MentoringCountResponse response = mentoringQueryService.getNewMentoringsCount(siteUserId); return ResponseEntity.ok(response); } } diff --git a/src/main/java/com/example/solidconnection/mentor/service/MentorMyPageService.java b/src/main/java/com/example/solidconnection/mentor/service/MentorMyPageService.java index e4a920397..365d10ad4 100644 --- a/src/main/java/com/example/solidconnection/mentor/service/MentorMyPageService.java +++ b/src/main/java/com/example/solidconnection/mentor/service/MentorMyPageService.java @@ -2,6 +2,7 @@ import static com.example.solidconnection.common.exception.ErrorCode.CHANNEL_REGISTRATION_LIMIT_EXCEEDED; import static com.example.solidconnection.common.exception.ErrorCode.MENTOR_NOT_FOUND; +import static com.example.solidconnection.common.exception.ErrorCode.USER_NOT_FOUND; import com.example.solidconnection.common.exception.CustomException; import com.example.solidconnection.mentor.domain.Channel; @@ -11,6 +12,7 @@ import com.example.solidconnection.mentor.dto.MentorMyPageUpdateRequest; import com.example.solidconnection.mentor.repository.MentorRepository; import com.example.solidconnection.siteuser.domain.SiteUser; +import com.example.solidconnection.siteuser.repository.SiteUserRepository; import java.util.ArrayList; import java.util.List; import lombok.RequiredArgsConstructor; @@ -25,18 +27,21 @@ public class MentorMyPageService { private static final int CHANNEL_SEQUENCE_START_NUMBER = 1; private final MentorRepository mentorRepository; + private final SiteUserRepository siteUserRepository; @Transactional(readOnly = true) - public MentorMyPageResponse getMentorMyPage(SiteUser siteUser) { + public MentorMyPageResponse getMentorMyPage(long siteUserId) { + SiteUser siteUser = siteUserRepository.findById(siteUserId) + .orElseThrow(() -> new CustomException(USER_NOT_FOUND)); Mentor mentor = mentorRepository.findBySiteUserId(siteUser.getId()) .orElseThrow(() -> new CustomException(MENTOR_NOT_FOUND)); return MentorMyPageResponse.of(mentor, siteUser); } @Transactional - public void updateMentorMyPage(SiteUser siteUser, MentorMyPageUpdateRequest request) { + public void updateMentorMyPage(long siteUserId, MentorMyPageUpdateRequest request) { validateChannelRegistrationLimit(request.channels()); - Mentor mentor = mentorRepository.findBySiteUserId(siteUser.getId()) + Mentor mentor = mentorRepository.findBySiteUserId(siteUserId) .orElseThrow(() -> new CustomException(MENTOR_NOT_FOUND)); mentor.updateIntroduction(request.introduction()); diff --git a/src/main/java/com/example/solidconnection/mentor/service/MentorQueryService.java b/src/main/java/com/example/solidconnection/mentor/service/MentorQueryService.java index e6d1ffd67..7d878a1d9 100644 --- a/src/main/java/com/example/solidconnection/mentor/service/MentorQueryService.java +++ b/src/main/java/com/example/solidconnection/mentor/service/MentorQueryService.java @@ -31,28 +31,28 @@ public class MentorQueryService { private final MentorBatchQueryRepository mentorBatchQueryRepository; @Transactional(readOnly = true) - public MentorDetailResponse getMentorDetails(long mentorId, SiteUser currentUser) { + public MentorDetailResponse getMentorDetails(long mentorId, long currentUserId) { Mentor mentor = mentorRepository.findById(mentorId) .orElseThrow(() -> new CustomException(MENTOR_NOT_FOUND)); SiteUser mentorUser = siteUserRepository.findById(mentor.getSiteUserId()) .orElseThrow(() -> new CustomException(MENTOR_NOT_FOUND)); - boolean isApplied = mentoringRepository.existsByMentorIdAndMenteeId(mentorId, currentUser.getId()); + boolean isApplied = mentoringRepository.existsByMentorIdAndMenteeId(mentorId, currentUserId); return MentorDetailResponse.of(mentor, mentorUser, isApplied); } @Transactional(readOnly = true) - public SliceResponse getMentorPreviews(String region, SiteUser siteUser, Pageable pageable) { // todo: 멘토의 '인증' 작업 후 region 필터링 추가 + public SliceResponse getMentorPreviews(String region, long currentUserId, Pageable pageable) { // todo: 멘토의 '인증' 작업 후 region 필터링 추가 Slice mentorSlice = mentorRepository.findAllBy(pageable); List mentors = mentorSlice.toList(); - List content = getMentorPreviewResponses(mentors, siteUser); + List content = getMentorPreviewResponses(mentors, currentUserId); return SliceResponse.of(content, mentorSlice); } - private List getMentorPreviewResponses(List mentors, SiteUser siteUser) { + private List getMentorPreviewResponses(List mentors, long currentUserId) { Map mentorIdToSiteUser = mentorBatchQueryRepository.getMentorIdToSiteUserMap(mentors); - Map mentorIdToIsApplied = mentorBatchQueryRepository.getMentorIdToIsApplied(mentors, siteUser.getId()); + Map mentorIdToIsApplied = mentorBatchQueryRepository.getMentorIdToIsApplied(mentors, currentUserId); List mentorPreviews = new ArrayList<>(); for (Mentor mentor : mentors) { diff --git a/src/main/java/com/example/solidconnection/news/controller/NewsController.java b/src/main/java/com/example/solidconnection/news/controller/NewsController.java index dd522fb47..6ba7b2eda 100644 --- a/src/main/java/com/example/solidconnection/news/controller/NewsController.java +++ b/src/main/java/com/example/solidconnection/news/controller/NewsController.java @@ -11,7 +11,6 @@ import com.example.solidconnection.news.service.NewsQueryService; import com.example.solidconnection.security.annotation.RequireRoleAccess; import com.example.solidconnection.siteuser.domain.Role; -import com.example.solidconnection.siteuser.domain.SiteUser; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; @@ -47,24 +46,24 @@ public ResponseEntity findNewsBySiteUserId( @RequireRoleAccess(roles = {Role.ADMIN, Role.MENTOR}) @PostMapping public ResponseEntity createNews( - @AuthorizedUser SiteUser siteUser, + @AuthorizedUser long siteUserId, @Valid @RequestPart("newsCreateRequest") NewsCreateRequest newsCreateRequest, @RequestParam(value = "file", required = false) MultipartFile imageFile ) { - NewsCommandResponse newsCommandResponse = newsCommandService.createNews(siteUser.getId(), newsCreateRequest, imageFile); + NewsCommandResponse newsCommandResponse = newsCommandService.createNews(siteUserId, newsCreateRequest, imageFile); return ResponseEntity.ok(newsCommandResponse); } @RequireRoleAccess(roles = {Role.ADMIN, Role.MENTOR}) @PutMapping("/{news-id}") public ResponseEntity updateNews( - @AuthorizedUser SiteUser siteUser, + @AuthorizedUser long siteUserId, @PathVariable("news-id") Long newsId, @Valid @RequestPart(value = "newsUpdateRequest") NewsUpdateRequest newsUpdateRequest, @RequestParam(value = "file", required = false) MultipartFile imageFile ) { NewsCommandResponse newsCommandResponse = newsCommandService.updateNews( - siteUser.getId(), + siteUserId, newsId, newsUpdateRequest, imageFile); @@ -74,37 +73,37 @@ public ResponseEntity updateNews( @RequireRoleAccess(roles = {Role.ADMIN, Role.MENTOR}) @DeleteMapping("/{news-id}") public ResponseEntity deleteNewsById( - @AuthorizedUser SiteUser siteUser, + @AuthorizedUser long siteUserId, @PathVariable("news-id") Long newsId ) { - NewsCommandResponse newsCommandResponse = newsCommandService.deleteNewsById(siteUser, newsId); + NewsCommandResponse newsCommandResponse = newsCommandService.deleteNewsById(siteUserId, newsId); return ResponseEntity.ok(newsCommandResponse); } @GetMapping("/{news-id}/like") public ResponseEntity isNewsLiked( - @AuthorizedUser SiteUser siteUser, + @AuthorizedUser long siteUserId, @PathVariable("news-id") Long newsId ) { - LikedNewsResponse likedNewsResponse = newsLikeService.isNewsLiked(siteUser.getId(), newsId); + LikedNewsResponse likedNewsResponse = newsLikeService.isNewsLiked(siteUserId, newsId); return ResponseEntity.ok(likedNewsResponse); } @PostMapping("/{news-id}/like") public ResponseEntity addNewsLike( - @AuthorizedUser SiteUser siteUser, + @AuthorizedUser long siteUserId, @PathVariable("news-id") Long newsId ) { - newsLikeService.addNewsLike(siteUser.getId(), newsId); + newsLikeService.addNewsLike(siteUserId, newsId); return ResponseEntity.ok().build(); } @DeleteMapping("/{news-id}/like") public ResponseEntity cancelNewsLike( - @AuthorizedUser SiteUser siteUser, + @AuthorizedUser long siteUserId, @PathVariable("news-id") Long newsId ) { - newsLikeService.cancelNewsLike(siteUser.getId(), newsId); + newsLikeService.cancelNewsLike(siteUserId, newsId); return ResponseEntity.ok().build(); } } diff --git a/src/main/java/com/example/solidconnection/news/service/NewsCommandService.java b/src/main/java/com/example/solidconnection/news/service/NewsCommandService.java index 2875742d5..ca1b262fe 100644 --- a/src/main/java/com/example/solidconnection/news/service/NewsCommandService.java +++ b/src/main/java/com/example/solidconnection/news/service/NewsCommandService.java @@ -2,6 +2,7 @@ import static com.example.solidconnection.common.exception.ErrorCode.INVALID_NEWS_ACCESS; import static com.example.solidconnection.common.exception.ErrorCode.NEWS_NOT_FOUND; +import static com.example.solidconnection.common.exception.ErrorCode.USER_NOT_FOUND; import com.example.solidconnection.common.exception.CustomException; import com.example.solidconnection.news.config.NewsProperties; @@ -15,6 +16,7 @@ import com.example.solidconnection.s3.service.S3Service; import com.example.solidconnection.siteuser.domain.Role; import com.example.solidconnection.siteuser.domain.SiteUser; +import com.example.solidconnection.siteuser.repository.SiteUserRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -27,6 +29,7 @@ public class NewsCommandService { private final S3Service s3Service; private final NewsProperties newsProperties; private final NewsRepository newsRepository; + private final SiteUserRepository siteUserRepository; @Transactional public NewsCommandResponse createNews(long siteUserId, NewsCreateRequest newsCreateRequest, MultipartFile imageFile) { @@ -77,7 +80,9 @@ private void updateThumbnail(News news, MultipartFile imageFile, Boolean resetTo } @Transactional - public NewsCommandResponse deleteNewsById(SiteUser siteUser, Long newsId) { + public NewsCommandResponse deleteNewsById(long siteUserId, Long newsId) { + SiteUser siteUser = siteUserRepository.findById(siteUserId) + .orElseThrow(() -> new CustomException(USER_NOT_FOUND)); News news = newsRepository.findById(newsId) .orElseThrow(() -> new CustomException(NEWS_NOT_FOUND)); validatePermission(siteUser, news); diff --git a/src/main/java/com/example/solidconnection/s3/controller/S3Controller.java b/src/main/java/com/example/solidconnection/s3/controller/S3Controller.java index 20013fa6a..1bd978627 100644 --- a/src/main/java/com/example/solidconnection/s3/controller/S3Controller.java +++ b/src/main/java/com/example/solidconnection/s3/controller/S3Controller.java @@ -5,7 +5,6 @@ import com.example.solidconnection.s3.dto.UploadedFileUrlResponse; import com.example.solidconnection.s3.dto.urlPrefixResponse; import com.example.solidconnection.s3.service.S3Service; -import com.example.solidconnection.siteuser.domain.SiteUser; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.ResponseEntity; @@ -45,11 +44,11 @@ public ResponseEntity uploadPreProfileImage( @PostMapping("/profile/post") public ResponseEntity uploadPostProfileImage( - @AuthorizedUser SiteUser siteUser, + @AuthorizedUser long siteUserId, @RequestParam("file") MultipartFile imageFile ) { UploadedFileUrlResponse profileImageUrl = s3Service.uploadFile(imageFile, ImgType.PROFILE); - s3Service.deleteExProfile(siteUser); + s3Service.deleteExProfile(siteUserId); return ResponseEntity.ok(profileImageUrl); } diff --git a/src/main/java/com/example/solidconnection/s3/service/S3Service.java b/src/main/java/com/example/solidconnection/s3/service/S3Service.java index 1aa0ebbf1..11b66a499 100644 --- a/src/main/java/com/example/solidconnection/s3/service/S3Service.java +++ b/src/main/java/com/example/solidconnection/s3/service/S3Service.java @@ -5,6 +5,7 @@ import static com.example.solidconnection.common.exception.ErrorCode.NOT_ALLOWED_FILE_EXTENSIONS; import static com.example.solidconnection.common.exception.ErrorCode.S3_CLIENT_EXCEPTION; import static com.example.solidconnection.common.exception.ErrorCode.S3_SERVICE_EXCEPTION; +import static com.example.solidconnection.common.exception.ErrorCode.USER_NOT_FOUND; import com.amazonaws.AmazonServiceException; import com.amazonaws.SdkClientException; @@ -15,6 +16,7 @@ import com.example.solidconnection.s3.dto.UploadedFileUrlResponse; import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.siteuser.repository.SiteUserRepository; +import jakarta.transaction.Transactional; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -109,7 +111,10 @@ private String getFileExtension(String fileName) { * - 기존 파일의 key(S3파일명)를 찾는다. * - S3에서 파일을 삭제한다. * */ - public void deleteExProfile(SiteUser siteUser) { + @Transactional + public void deleteExProfile(long siteUserId) { + SiteUser siteUser = siteUserRepository.findById(siteUserId) + .orElseThrow(() -> new CustomException(USER_NOT_FOUND)); String key = siteUser.getProfileImageUrl(); deleteFile(key); } diff --git a/src/main/java/com/example/solidconnection/score/controller/ScoreController.java b/src/main/java/com/example/solidconnection/score/controller/ScoreController.java index 257c3ef4c..3689cf750 100644 --- a/src/main/java/com/example/solidconnection/score/controller/ScoreController.java +++ b/src/main/java/com/example/solidconnection/score/controller/ScoreController.java @@ -6,7 +6,6 @@ import com.example.solidconnection.score.dto.LanguageTestScoreRequest; import com.example.solidconnection.score.dto.LanguageTestScoreStatusesResponse; import com.example.solidconnection.score.service.ScoreService; -import com.example.solidconnection.siteuser.domain.SiteUser; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; @@ -28,40 +27,40 @@ public class ScoreController { // 학점을 등록하는 api @PostMapping("/gpas") public ResponseEntity submitGpaScore( - @AuthorizedUser SiteUser siteUser, + @AuthorizedUser long siteUserId, @Valid @RequestPart("gpaScoreRequest") GpaScoreRequest gpaScoreRequest, @RequestParam("file") MultipartFile file ) { - Long id = scoreService.submitGpaScore(siteUser, gpaScoreRequest, file); + Long id = scoreService.submitGpaScore(siteUserId, gpaScoreRequest, file); return ResponseEntity.ok(id); } // 어학성적을 등록하는 api @PostMapping("/language-tests") public ResponseEntity submitLanguageTestScore( - @AuthorizedUser SiteUser siteUser, + @AuthorizedUser long siteUserId, @Valid @RequestPart("languageTestScoreRequest") LanguageTestScoreRequest languageTestScoreRequest, @RequestParam("file") MultipartFile file ) { - Long id = scoreService.submitLanguageTestScore(siteUser, languageTestScoreRequest, file); + Long id = scoreService.submitLanguageTestScore(siteUserId, languageTestScoreRequest, file); return ResponseEntity.ok(id); } // 학점 상태를 확인하는 api @GetMapping("/gpas") public ResponseEntity getGpaScoreStatus( - @AuthorizedUser SiteUser siteUser + @AuthorizedUser long siteUserId ) { - GpaScoreStatusesResponse gpaScoreStatus = scoreService.getGpaScoreStatus(siteUser); + GpaScoreStatusesResponse gpaScoreStatus = scoreService.getGpaScoreStatus(siteUserId); return ResponseEntity.ok(gpaScoreStatus); } // 어학 성적 상태를 확인하는 api @GetMapping("/language-tests") public ResponseEntity getLanguageTestScoreStatus( - @AuthorizedUser SiteUser siteUser + @AuthorizedUser long siteUserId ) { - LanguageTestScoreStatusesResponse languageTestScoreStatus = scoreService.getLanguageTestScoreStatus(siteUser); + LanguageTestScoreStatusesResponse languageTestScoreStatus = scoreService.getLanguageTestScoreStatus(siteUserId); return ResponseEntity.ok(languageTestScoreStatus); } } diff --git a/src/main/java/com/example/solidconnection/score/service/ScoreService.java b/src/main/java/com/example/solidconnection/score/service/ScoreService.java index daa054a83..f16951d49 100644 --- a/src/main/java/com/example/solidconnection/score/service/ScoreService.java +++ b/src/main/java/com/example/solidconnection/score/service/ScoreService.java @@ -1,7 +1,10 @@ package com.example.solidconnection.score.service; +import static com.example.solidconnection.common.exception.ErrorCode.USER_NOT_FOUND; + import com.example.solidconnection.application.domain.Gpa; import com.example.solidconnection.application.domain.LanguageTest; +import com.example.solidconnection.common.exception.CustomException; import com.example.solidconnection.s3.domain.ImgType; import com.example.solidconnection.s3.dto.UploadedFileUrlResponse; import com.example.solidconnection.s3.service.S3Service; @@ -16,6 +19,7 @@ import com.example.solidconnection.score.repository.GpaScoreRepository; import com.example.solidconnection.score.repository.LanguageTestScoreRepository; import com.example.solidconnection.siteuser.domain.SiteUser; +import com.example.solidconnection.siteuser.repository.SiteUserRepository; import java.util.List; import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; @@ -30,9 +34,12 @@ public class ScoreService { private final GpaScoreRepository gpaScoreRepository; private final S3Service s3Service; private final LanguageTestScoreRepository languageTestScoreRepository; + private final SiteUserRepository siteUserRepository; @Transactional - public Long submitGpaScore(SiteUser siteUser, GpaScoreRequest gpaScoreRequest, MultipartFile file) { + public Long submitGpaScore(long siteUserId, GpaScoreRequest gpaScoreRequest, MultipartFile file) { + SiteUser siteUser = siteUserRepository.findById(siteUserId) + .orElseThrow(() -> new CustomException(USER_NOT_FOUND)); UploadedFileUrlResponse uploadedFile = s3Service.uploadFile(file, ImgType.GPA); Gpa gpa = new Gpa(gpaScoreRequest.gpa(), gpaScoreRequest.gpaCriteria(), uploadedFile.fileUrl()); GpaScore newGpaScore = new GpaScore(gpa, siteUser); @@ -41,7 +48,9 @@ public Long submitGpaScore(SiteUser siteUser, GpaScoreRequest gpaScoreRequest, M } @Transactional - public Long submitLanguageTestScore(SiteUser siteUser, LanguageTestScoreRequest languageTestScoreRequest, MultipartFile file) { + public Long submitLanguageTestScore(long siteUserId, LanguageTestScoreRequest languageTestScoreRequest, MultipartFile file) { + SiteUser siteUser = siteUserRepository.findById(siteUserId) + .orElseThrow(() -> new CustomException(USER_NOT_FOUND)); UploadedFileUrlResponse uploadedFile = s3Service.uploadFile(file, ImgType.LANGUAGE_TEST); LanguageTest languageTest = new LanguageTest(languageTestScoreRequest.languageTestType(), languageTestScoreRequest.languageTestScore(), uploadedFile.fileUrl()); @@ -51,7 +60,9 @@ public Long submitLanguageTestScore(SiteUser siteUser, LanguageTestScoreRequest } @Transactional(readOnly = true) - public GpaScoreStatusesResponse getGpaScoreStatus(SiteUser siteUser) { + public GpaScoreStatusesResponse getGpaScoreStatus(long siteUserId) { + SiteUser siteUser = siteUserRepository.findById(siteUserId) + .orElseThrow(() -> new CustomException(USER_NOT_FOUND)); List gpaScoreStatusResponseList = gpaScoreRepository.findBySiteUserId(siteUser.getId()) .stream() @@ -62,7 +73,9 @@ public GpaScoreStatusesResponse getGpaScoreStatus(SiteUser siteUser) { } @Transactional(readOnly = true) - public LanguageTestScoreStatusesResponse getLanguageTestScoreStatus(SiteUser siteUser) { + public LanguageTestScoreStatusesResponse getLanguageTestScoreStatus(long siteUserId) { + SiteUser siteUser = siteUserRepository.findById(siteUserId) + .orElseThrow(() -> new CustomException(USER_NOT_FOUND)); List languageTestScores = languageTestScoreRepository.findBySiteUserId(siteUser.getId()); List languageTestScoreStatusResponseList = diff --git a/src/main/java/com/example/solidconnection/siteuser/controller/MyPageController.java b/src/main/java/com/example/solidconnection/siteuser/controller/MyPageController.java index 772da0d32..39dcda29a 100644 --- a/src/main/java/com/example/solidconnection/siteuser/controller/MyPageController.java +++ b/src/main/java/com/example/solidconnection/siteuser/controller/MyPageController.java @@ -2,7 +2,6 @@ import com.example.solidconnection.common.resolver.AuthorizedUser; -import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.siteuser.dto.MyPageResponse; import com.example.solidconnection.siteuser.service.MyPageService; import lombok.RequiredArgsConstructor; @@ -23,19 +22,19 @@ class MyPageController { @GetMapping public ResponseEntity getMyPageInfo( - @AuthorizedUser SiteUser siteUser + @AuthorizedUser long siteUserId ) { - MyPageResponse myPageResponse = myPageService.getMyPageInfo(siteUser); + MyPageResponse myPageResponse = myPageService.getMyPageInfo(siteUserId); return ResponseEntity.ok(myPageResponse); } @PatchMapping public ResponseEntity updateMyPageInfo( - @AuthorizedUser SiteUser siteUser, + @AuthorizedUser long siteUserId, @RequestParam(value = "file", required = false) MultipartFile imageFile, @RequestParam(value = "nickname", required = false) String nickname ) { - myPageService.updateMyPageInfo(siteUser, imageFile, nickname); + myPageService.updateMyPageInfo(siteUserId, imageFile, nickname); return ResponseEntity.ok().build(); } } diff --git a/src/main/java/com/example/solidconnection/siteuser/service/MyPageService.java b/src/main/java/com/example/solidconnection/siteuser/service/MyPageService.java index b5602fbf5..7b85bd411 100644 --- a/src/main/java/com/example/solidconnection/siteuser/service/MyPageService.java +++ b/src/main/java/com/example/solidconnection/siteuser/service/MyPageService.java @@ -34,7 +34,9 @@ public class MyPageService { * 마이페이지 정보를 조회한다. * */ @Transactional(readOnly = true) - public MyPageResponse getMyPageInfo(SiteUser siteUser) { + public MyPageResponse getMyPageInfo(long siteUserId) { + SiteUser siteUser = siteUserRepository.findById(siteUserId) + .orElseThrow(() -> new CustomException(USER_NOT_FOUND)); int likedUnivApplyInfoCount = likedUnivApplyInfoRepository.countBySiteUserId(siteUser.getId()); return MyPageResponse.of(siteUser, likedUnivApplyInfoCount); } @@ -43,8 +45,8 @@ public MyPageResponse getMyPageInfo(SiteUser siteUser) { * 마이페이지 정보를 수정한다. * */ @Transactional - public void updateMyPageInfo(SiteUser siteUser, MultipartFile imageFile, String nickname) { - SiteUser user = siteUserRepository.findById(siteUser.getId()) + public void updateMyPageInfo(long siteUserId, MultipartFile imageFile, String nickname) { + SiteUser user = siteUserRepository.findById(siteUserId) .orElseThrow(() -> new CustomException(USER_NOT_FOUND)); if (nickname != null) { @@ -57,7 +59,7 @@ public void updateMyPageInfo(SiteUser siteUser, MultipartFile imageFile, String if (imageFile != null && !imageFile.isEmpty()) { UploadedFileUrlResponse uploadedFile = s3Service.uploadFile(imageFile, ImgType.PROFILE); if (!isDefaultProfileImage(user.getProfileImageUrl())) { - s3Service.deleteExProfile(user); + s3Service.deleteExProfile(user.getId()); } String profileImageUrl = uploadedFile.fileUrl(); user.setProfileImageUrl(profileImageUrl); diff --git a/src/main/java/com/example/solidconnection/university/controller/UnivApplyInfoController.java b/src/main/java/com/example/solidconnection/university/controller/UnivApplyInfoController.java index 5b1a759b8..c3b986d40 100644 --- a/src/main/java/com/example/solidconnection/university/controller/UnivApplyInfoController.java +++ b/src/main/java/com/example/solidconnection/university/controller/UnivApplyInfoController.java @@ -1,7 +1,6 @@ package com.example.solidconnection.university.controller; import com.example.solidconnection.common.resolver.AuthorizedUser; -import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.university.domain.LanguageTestType; import com.example.solidconnection.university.dto.IsLikeResponse; import com.example.solidconnection.university.dto.UnivApplyInfoDetailResponse; @@ -32,48 +31,48 @@ public class UnivApplyInfoController { @GetMapping("/recommend") public ResponseEntity getUnivApplyInfoRecommends( - @AuthorizedUser(required = false) SiteUser siteUser + @AuthorizedUser(required = false) Long siteUserId ) { - if (siteUser == null) { + if (siteUserId == null) { return ResponseEntity.ok(univApplyInfoRecommendService.getGeneralRecommends()); } else { - return ResponseEntity.ok(univApplyInfoRecommendService.getPersonalRecommends(siteUser)); + return ResponseEntity.ok(univApplyInfoRecommendService.getPersonalRecommends(siteUserId)); } } // todo: return 타입 UnivApplyInfoPreviewResponses 같이 객체로 묶어서 반환하는 것으로 변경 필요 @GetMapping("/like") public ResponseEntity> getLikedUnivApplyInfos( - @AuthorizedUser SiteUser siteUser + @AuthorizedUser long siteUserId ) { - List likedUnivApplyInfos = likedUnivApplyInfoService.getLikedUnivApplyInfos(siteUser); + List likedUnivApplyInfos = likedUnivApplyInfoService.getLikedUnivApplyInfos(siteUserId); return ResponseEntity.ok(likedUnivApplyInfos); } @GetMapping("/{univ-apply-info-id}/like") public ResponseEntity isUnivApplyInfoLiked( - @AuthorizedUser SiteUser siteUser, + @AuthorizedUser long siteUserId, @PathVariable("univ-apply-info-id") Long univApplyInfoId ) { - IsLikeResponse isLiked = likedUnivApplyInfoService.isUnivApplyInfoLiked(siteUser, univApplyInfoId); + IsLikeResponse isLiked = likedUnivApplyInfoService.isUnivApplyInfoLiked(siteUserId, univApplyInfoId); return ResponseEntity.ok(isLiked); } @PostMapping("/{univ-apply-info-id}/like") public ResponseEntity addUnivApplyInfoLike( - @AuthorizedUser SiteUser siteUser, + @AuthorizedUser long siteUserId, @PathVariable("univ-apply-info-id") Long univApplyInfoId ) { - likedUnivApplyInfoService.addUnivApplyInfoLike(siteUser, univApplyInfoId); + likedUnivApplyInfoService.addUnivApplyInfoLike(siteUserId, univApplyInfoId); return ResponseEntity.ok().build(); } @DeleteMapping("/{univ-apply-info-id}/like") public ResponseEntity cancelUnivApplyInfoLike( - @AuthorizedUser SiteUser siteUser, + @AuthorizedUser long siteUserId, @PathVariable("univ-apply-info-id") Long univApplyInfoId ) { - likedUnivApplyInfoService.cancelUnivApplyInfoLike(siteUser, univApplyInfoId); + likedUnivApplyInfoService.cancelUnivApplyInfoLike(siteUserId, univApplyInfoId); return ResponseEntity.ok().build(); } diff --git a/src/main/java/com/example/solidconnection/university/service/LikedUnivApplyInfoService.java b/src/main/java/com/example/solidconnection/university/service/LikedUnivApplyInfoService.java index 7be082d9e..0c6e06d21 100644 --- a/src/main/java/com/example/solidconnection/university/service/LikedUnivApplyInfoService.java +++ b/src/main/java/com/example/solidconnection/university/service/LikedUnivApplyInfoService.java @@ -4,7 +4,6 @@ import static com.example.solidconnection.common.exception.ErrorCode.NOT_LIKED_UNIV_APPLY_INFO; import com.example.solidconnection.common.exception.CustomException; -import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.university.domain.LikedUnivApplyInfo; import com.example.solidconnection.university.domain.UnivApplyInfo; import com.example.solidconnection.university.dto.IsLikeResponse; @@ -32,8 +31,8 @@ public class LikedUnivApplyInfoService { * '좋아요'한 대학교 목록을 조회한다. * */ @Transactional(readOnly = true) - public List getLikedUnivApplyInfos(SiteUser siteUser) { - List univApplyInfos = likedUnivApplyInfoRepository.findUnivApplyInfosBySiteUserId(siteUser.getId()); + public List getLikedUnivApplyInfos(long siteUserId) { + List univApplyInfos = likedUnivApplyInfoRepository.findUnivApplyInfosBySiteUserId(siteUserId); return univApplyInfos.stream() .map(UnivApplyInfoPreviewResponse::from) .toList(); @@ -43,17 +42,17 @@ public List getLikedUnivApplyInfos(SiteUser siteUs * 대학교를 '좋아요' 한다. * */ @Transactional - public void addUnivApplyInfoLike(SiteUser siteUser, Long univApplyInfoId) { + public void addUnivApplyInfoLike(long siteUserId, Long univApplyInfoId) { UnivApplyInfo univApplyInfo = univApplyInfoRepository.getUnivApplyInfoById(univApplyInfoId); - Optional optionalLikedUnivApplyInfo = likedUnivApplyInfoRepository.findBySiteUserIdAndUnivApplyInfoId(siteUser.getId(), univApplyInfo.getId()); + Optional optionalLikedUnivApplyInfo = likedUnivApplyInfoRepository.findBySiteUserIdAndUnivApplyInfoId(siteUserId, univApplyInfo.getId()); if (optionalLikedUnivApplyInfo.isPresent()) { throw new CustomException(ALREADY_LIKED_UNIV_APPLY_INFO); } LikedUnivApplyInfo likedUnivApplyInfo = LikedUnivApplyInfo.builder() .univApplyInfoId(univApplyInfo.getId()) - .siteUserId(siteUser.getId()) + .siteUserId(siteUserId) .build(); likedUnivApplyInfoRepository.save(likedUnivApplyInfo); } @@ -62,10 +61,10 @@ public void addUnivApplyInfoLike(SiteUser siteUser, Long univApplyInfoId) { * 대학교 '좋아요'를 취소한다. * */ @Transactional - public void cancelUnivApplyInfoLike(SiteUser siteUser, long univApplyInfoId) { + public void cancelUnivApplyInfoLike(long siteUserId, long univApplyInfoId) { UnivApplyInfo univApplyInfo = univApplyInfoRepository.getUnivApplyInfoById(univApplyInfoId); - Optional optionalLikedUnivApplyInfo = likedUnivApplyInfoRepository.findBySiteUserIdAndUnivApplyInfoId(siteUser.getId(), univApplyInfo.getId()); + Optional optionalLikedUnivApplyInfo = likedUnivApplyInfoRepository.findBySiteUserIdAndUnivApplyInfoId(siteUserId, univApplyInfo.getId()); if (optionalLikedUnivApplyInfo.isEmpty()) { throw new CustomException(NOT_LIKED_UNIV_APPLY_INFO); } @@ -77,9 +76,9 @@ public void cancelUnivApplyInfoLike(SiteUser siteUser, long univApplyInfoId) { * '좋아요'한 대학교인지 확인한다. * */ @Transactional(readOnly = true) - public IsLikeResponse isUnivApplyInfoLiked(SiteUser siteUser, Long univApplyInfoId) { + public IsLikeResponse isUnivApplyInfoLiked(long siteUserId, Long univApplyInfoId) { UnivApplyInfo univApplyInfo = univApplyInfoRepository.getUnivApplyInfoById(univApplyInfoId); - boolean isLike = likedUnivApplyInfoRepository.findBySiteUserIdAndUnivApplyInfoId(siteUser.getId(), univApplyInfo.getId()).isPresent(); + boolean isLike = likedUnivApplyInfoRepository.findBySiteUserIdAndUnivApplyInfoId(siteUserId, univApplyInfo.getId()).isPresent(); return new IsLikeResponse(isLike); } } diff --git a/src/main/java/com/example/solidconnection/university/service/UnivApplyInfoRecommendService.java b/src/main/java/com/example/solidconnection/university/service/UnivApplyInfoRecommendService.java index b3ef68baa..3baeff9f6 100644 --- a/src/main/java/com/example/solidconnection/university/service/UnivApplyInfoRecommendService.java +++ b/src/main/java/com/example/solidconnection/university/service/UnivApplyInfoRecommendService.java @@ -1,7 +1,6 @@ package com.example.solidconnection.university.service; import com.example.solidconnection.cache.annotation.ThunderingHerdCaching; -import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.university.domain.UnivApplyInfo; import com.example.solidconnection.university.dto.UnivApplyInfoPreviewResponse; import com.example.solidconnection.university.dto.UnivApplyInfoRecommendsResponse; @@ -33,10 +32,10 @@ public class UnivApplyInfoRecommendService { * - 맞춤 추천 대학교의 수가 6개보다 적다면, 공통 추천 대학교 후보에서 이번 term 에 열리는 학교들을 부족한 수 만큼 불러온다. * */ @Transactional(readOnly = true) - public UnivApplyInfoRecommendsResponse getPersonalRecommends(SiteUser siteUser) { + public UnivApplyInfoRecommendsResponse getPersonalRecommends(long siteUserId) { // 맞춤 추천 대학교를 불러온다. List personalRecommends = univApplyInfoRepository - .findAllBySiteUsersInterestedCountryOrRegionAndTerm(siteUser.getId(), term); + .findAllBySiteUsersInterestedCountryOrRegionAndTerm(siteUserId, term); List trimmedRecommends = personalRecommends.subList(0, Math.min(RECOMMEND_UNIV_APPLY_INFO_NUM, personalRecommends.size())); Collections.shuffle(trimmedRecommends); diff --git a/src/test/java/com/example/solidconnection/application/service/ApplicationQueryServiceTest.java b/src/test/java/com/example/solidconnection/application/service/ApplicationQueryServiceTest.java index 0fcec8d3b..a53c6b6bf 100644 --- a/src/test/java/com/example/solidconnection/application/service/ApplicationQueryServiceTest.java +++ b/src/test/java/com/example/solidconnection/application/service/ApplicationQueryServiceTest.java @@ -132,7 +132,7 @@ class 지원자_목록_조회_테스트 { // when ApplicationsResponse response = applicationQueryService.getApplicants( - user1, + user1.getId(), "", "" ); @@ -184,7 +184,7 @@ class 지원자_목록_조회_테스트 { // when ApplicationsResponse response = applicationQueryService.getApplicants( - user1, + user1.getId(), regionFixture.영미권().getCode(), "" ); @@ -234,7 +234,7 @@ class 지원자_목록_조회_테스트 { // when ApplicationsResponse response = applicationQueryService.getApplicants( - user1, + user1.getId(), null, "괌" ); @@ -264,7 +264,7 @@ class 지원자_목록_조회_테스트 { // when ApplicationsResponse response = applicationQueryService.getApplicants( - user1, + user1.getId(), "", "" ); @@ -304,7 +304,7 @@ class 지원자_목록_조회_테스트 { // when ApplicationsResponse response = applicationQueryService.getApplicants( - user1, + user1.getId(), "", "" ); @@ -354,7 +354,7 @@ class 경쟁자_목록_조회_테스트 { null ); // when - ApplicationsResponse response = applicationQueryService.getApplicantsByUserApplications(user1); + ApplicationsResponse response = applicationQueryService.getApplicantsByUserApplications(user1.getId()); // then assertThat(response.firstChoice()).containsExactlyInAnyOrder( @@ -398,7 +398,7 @@ class 경쟁자_목록_조회_테스트 { ); // when - ApplicationsResponse response = applicationQueryService.getApplicantsByUserApplications(user1); + ApplicationsResponse response = applicationQueryService.getApplicantsByUserApplications(user1.getId()); // then assertThat(response.firstChoice()) diff --git a/src/test/java/com/example/solidconnection/application/service/ApplicationSubmissionServiceTest.java b/src/test/java/com/example/solidconnection/application/service/ApplicationSubmissionServiceTest.java index cbd36642e..5281faa3e 100644 --- a/src/test/java/com/example/solidconnection/application/service/ApplicationSubmissionServiceTest.java +++ b/src/test/java/com/example/solidconnection/application/service/ApplicationSubmissionServiceTest.java @@ -81,7 +81,7 @@ void setUp() { ApplyRequest request = new ApplyRequest(gpaScore.getId(), languageTestScore.getId(), univApplyInfoChoiceRequest); // when - ApplicationSubmissionResponse response = applicationSubmissionService.apply(user, request); + ApplicationSubmissionResponse response = applicationSubmissionService.apply(user.getId(), request); // then Application savedApplication = applicationRepository.findBySiteUserIdAndTerm(user.getId(), term).orElseThrow(); @@ -115,7 +115,7 @@ void setUp() { // when & then assertThatCode(() -> - applicationSubmissionService.apply(user, request) + applicationSubmissionService.apply(user.getId(), request) ) .isInstanceOf(CustomException.class) .hasMessage(INVALID_GPA_SCORE_STATUS.getMessage()); @@ -135,7 +135,7 @@ void setUp() { // when & then assertThatCode(() -> - applicationSubmissionService.apply(user, request) + applicationSubmissionService.apply(user.getId(), request) ) .isInstanceOf(CustomException.class) .hasMessage(INVALID_LANGUAGE_TEST_SCORE_STATUS.getMessage()); @@ -154,12 +154,12 @@ void setUp() { ApplyRequest request = new ApplyRequest(gpaScore.getId(), languageTestScore.getId(), univApplyInfoChoiceRequest); for (int i = 0; i < APPLICATION_UPDATE_COUNT_LIMIT; i++) { - applicationSubmissionService.apply(user, request); + applicationSubmissionService.apply(user.getId(), request); } // when & then assertThatCode(() -> - applicationSubmissionService.apply(user, request) + applicationSubmissionService.apply(user.getId(), request) ) .isInstanceOf(CustomException.class) .hasMessage(APPLY_UPDATE_LIMIT_EXCEED.getMessage()); diff --git a/src/test/java/com/example/solidconnection/auth/service/AuthServiceTest.java b/src/test/java/com/example/solidconnection/auth/service/AuthServiceTest.java index 0011f2db2..88b835ee2 100644 --- a/src/test/java/com/example/solidconnection/auth/service/AuthServiceTest.java +++ b/src/test/java/com/example/solidconnection/auth/service/AuthServiceTest.java @@ -12,6 +12,7 @@ import com.example.solidconnection.common.exception.CustomException; import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.siteuser.fixture.SiteUserFixture; +import com.example.solidconnection.siteuser.repository.SiteUserRepository; import com.example.solidconnection.support.TestContainerSpringBootTest; import java.time.LocalDate; import org.junit.jupiter.api.DisplayName; @@ -39,6 +40,9 @@ class AuthServiceTest { @Autowired private SiteUserFixture siteUserFixture; + @Autowired + private SiteUserRepository siteUserRepository; + @Test void 로그아웃한다() { // given @@ -64,13 +68,14 @@ class AuthServiceTest { AccessToken accessToken = authTokenProvider.generateAccessToken(subject); // when - authService.quit(user, accessToken.token()); + authService.quit(user.getId(), accessToken.token()); // then LocalDate tomorrow = LocalDate.now().plusDays(1); String refreshTokenKey = TokenType.REFRESH.addPrefix(subject.value()); + SiteUser actualSitUser = siteUserRepository.findById(user.getId()).orElseThrow(); assertAll( - () -> assertThat(user.getQuitedAt()).isEqualTo(tomorrow), + () -> assertThat(actualSitUser.getQuitedAt()).isEqualTo(tomorrow), () -> assertThat(redisTemplate.opsForValue().get(refreshTokenKey)).isNull(), () -> assertThat(tokenBlackListService.isTokenBlacklisted(accessToken.token())).isTrue() ); diff --git a/src/test/java/com/example/solidconnection/common/resolver/AuthorizedUserResolverTest.java b/src/test/java/com/example/solidconnection/common/resolver/AuthorizedUserResolverTest.java index c671c9a76..b53be9c79 100644 --- a/src/test/java/com/example/solidconnection/common/resolver/AuthorizedUserResolverTest.java +++ b/src/test/java/com/example/solidconnection/common/resolver/AuthorizedUserResolverTest.java @@ -4,8 +4,6 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatCode; import static org.junit.jupiter.api.Assertions.assertAll; -import static org.mockito.BDDMockito.given; -import static org.mockito.Mockito.mock; import com.example.solidconnection.common.exception.CustomException; import com.example.solidconnection.security.authentication.TokenAuthentication; @@ -13,6 +11,7 @@ import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.siteuser.fixture.SiteUserFixture; import com.example.solidconnection.support.TestContainerSpringBootTest; +import java.lang.reflect.Method; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; @@ -44,28 +43,36 @@ void setUp() { Authentication authentication = createAuthenticationWithUser(user); SecurityContextHolder.getContext().setAuthentication(authentication); - MethodParameter parameter = mock(MethodParameter.class); - AuthorizedUser authorizedUser = mock(AuthorizedUser.class); - given(parameter.getParameterAnnotation(AuthorizedUser.class)).willReturn(authorizedUser); - given(authorizedUser.required()).willReturn(false); + MethodParameter parameter = getTestMethodParameter("method", Long.class); // when - SiteUser resolveSiteUser = (SiteUser) authorizedUserResolver.resolveArgument(parameter, null, null, null); + Long resolvedUserId = (Long) authorizedUserResolver.resolveArgument(parameter, null, null, null); // then - assertThat(resolveSiteUser).isEqualTo(user); + assertAll( + () -> assertThat(resolvedUserId).isNotNull(), + () -> assertThat(resolvedUserId).isEqualTo(user.getId()) + ); } @Nested class security_context_에_저장된_사용자가_없는_경우 { + @Test + void 파라미터가_원시값이면_예외가_발생한다() { + // given + MethodParameter primitiveTypeParameter = getTestMethodParameter("primitiveType", long.class); + + // when, then + assertThatCode(() -> authorizedUserResolver.resolveArgument(primitiveTypeParameter, null, null, null)) + .isInstanceOf(CustomException.class) + .hasMessageContaining(AUTHENTICATION_FAILED.getMessage()); + } + @Test void required_가_true_이면_예외가_발생한다() { // given - MethodParameter parameter = mock(MethodParameter.class); - AuthorizedUser authorizedUser = mock(AuthorizedUser.class); - given(parameter.getParameterAnnotation(AuthorizedUser.class)).willReturn(authorizedUser); - given(authorizedUser.required()).willReturn(true); + MethodParameter parameter = getTestMethodParameter("required", Long.class); // when, then assertThatCode(() -> authorizedUserResolver.resolveArgument(parameter, null, null, null)) @@ -76,10 +83,7 @@ class security_context_에_저장된_사용자가_없는_경우 { @Test void required_가_false_이면_null_을_반환한다() { // given - MethodParameter parameter = mock(MethodParameter.class); - AuthorizedUser authorizedUser = mock(AuthorizedUser.class); - given(parameter.getParameterAnnotation(AuthorizedUser.class)).willReturn(authorizedUser); - given(authorizedUser.required()).willReturn(false); + MethodParameter parameter = getTestMethodParameter("notRequired", Long.class); // when, then assertThat( @@ -92,4 +96,29 @@ private TokenAuthentication createAuthenticationWithUser(SiteUser siteUser) { SiteUserDetails userDetails = new SiteUserDetails(siteUser); return new TokenAuthentication("token", userDetails); } + + private MethodParameter getTestMethodParameter(String methodName, Class parameterType) { + // 테스트의 목적을 불분명히 만들 수 있는 throws 절을 제거하기 위해 uncheckedException 로 변환한다. + try { + Method method = TestController.class.getMethod(methodName, parameterType); + return new MethodParameter(method, 0); + } catch (NoSuchMethodException e) { + throw new RuntimeException("Method not found: " + methodName, e); + } + } + + static class TestController { + + public void method(@AuthorizedUser Long userId) { + } + + public void primitiveType(@AuthorizedUser long userId) { + } + + public void required(@AuthorizedUser(required = true) Long userId) { + } + + public void notRequired(@AuthorizedUser(required = false) Long userId) { + } + } } diff --git a/src/test/java/com/example/solidconnection/community/comment/service/CommentServiceTest.java b/src/test/java/com/example/solidconnection/community/comment/service/CommentServiceTest.java index 489914266..c5219b036 100644 --- a/src/test/java/com/example/solidconnection/community/comment/service/CommentServiceTest.java +++ b/src/test/java/com/example/solidconnection/community/comment/service/CommentServiceTest.java @@ -85,7 +85,7 @@ class 댓글_조회_테스트 { List comments = List.of(parentComment, childComment); // when - List responses = commentService.findCommentsByPostId(user1, post.getId()); + List responses = commentService.findCommentsByPostId(user1.getId(), post.getId()); // then assertAll( @@ -122,7 +122,7 @@ class 댓글_조회_테스트 { commentRepository.saveAll(List.of(parentComment, childComment1, childComment2)); // when - List responses = commentService.findCommentsByPostId(user1, post.getId()); + List responses = commentService.findCommentsByPostId(user1.getId(), post.getId()); // then assertAll( @@ -141,7 +141,7 @@ class 댓글_조회_테스트 { commentRepository.saveAll(List.of(parentComment, childComment1, childComment2)); // when - List responses = commentService.findCommentsByPostId(user1, post.getId()); + List responses = commentService.findCommentsByPostId(user1.getId(), post.getId()); // then assertAll( @@ -171,7 +171,7 @@ class 댓글_조회_테스트 { commentRepository.saveAll(List.of(parentComment, childComment1, childComment2)); // when - List responses = commentService.findCommentsByPostId(user1, post.getId()); + List responses = commentService.findCommentsByPostId(user1.getId(), post.getId()); // then assertAll( @@ -198,7 +198,7 @@ class 댓글_생성_테스트 { CommentCreateRequest request = new CommentCreateRequest(post.getId(), "댓글", null); // when - CommentCreateResponse response = commentService.createComment(user1, request); + CommentCreateResponse response = commentService.createComment(user1.getId(), request); // then Comment savedComment = commentRepository.findById(response.id()).orElseThrow(); @@ -218,7 +218,7 @@ class 댓글_생성_테스트 { CommentCreateRequest request = new CommentCreateRequest(post.getId(), "자식 댓글", parentComment.getId()); // when - CommentCreateResponse response = commentService.createComment(user2, request); + CommentCreateResponse response = commentService.createComment(user2.getId(), request); // then Comment savedComment = commentRepository.findById(response.id()).orElseThrow(); @@ -241,7 +241,7 @@ class 댓글_생성_테스트 { // when & then assertThatThrownBy(() -> commentService.createComment( - user1, + user1.getId(), request )) .isInstanceOf(CustomException.class) @@ -257,7 +257,7 @@ class 댓글_생성_테스트 { // when & then assertThatThrownBy(() -> commentService.createComment( - user1, + user1.getId(), request )) .isInstanceOf(CustomException.class) @@ -275,7 +275,7 @@ class 댓글_수정_테스트 { CommentUpdateRequest request = new CommentUpdateRequest("수정된 댓글"); // when - CommentUpdateResponse response = commentService.updateComment(user1, comment.getId(), request); + CommentUpdateResponse response = commentService.updateComment(user1.getId(), comment.getId(), request); // then Comment updatedComment = commentRepository.findById(response.id()).orElseThrow(); @@ -297,7 +297,7 @@ class 댓글_수정_테스트 { // when & then assertThatThrownBy(() -> commentService.updateComment( - user2, + user2.getId(), comment.getId(), request )) @@ -314,7 +314,7 @@ class 댓글_수정_테스트 { // when & then assertThatThrownBy(() -> commentService.updateComment( - user1, + user1.getId(), comment.getId(), request )) @@ -335,7 +335,7 @@ class 댓글_삭제_테스트 { int expectedCommentsCount = comments.size() - 1; // when - CommentDeleteResponse response = commentService.deleteCommentById(user1, comment.getId()); + CommentDeleteResponse response = commentService.deleteCommentById(user1.getId(), comment.getId()); // then assertAll( @@ -355,7 +355,7 @@ class 댓글_삭제_테스트 { List childComments = parentComment.getCommentList(); // when - CommentDeleteResponse response = commentService.deleteCommentById(user1, parentComment.getId()); + CommentDeleteResponse response = commentService.deleteCommentById(user1.getId(), parentComment.getId()); // then Comment deletedComment = commentRepository.findById(response.id()).orElseThrow(); @@ -381,7 +381,7 @@ class 댓글_삭제_테스트 { int expectedChildCommentsCount = childComments.size() - 1; // when - CommentDeleteResponse response = commentService.deleteCommentById(user2, childComment1.getId()); + CommentDeleteResponse response = commentService.deleteCommentById(user2.getId(), childComment1.getId()); // then Comment remainingParentComment = commentRepository.findById(parentComment.getId()).orElseThrow(); @@ -404,7 +404,7 @@ class 댓글_삭제_테스트 { // when & then assertThatThrownBy(() -> commentService.deleteCommentById( - user2, + user2.getId(), comment.getId() )) .isInstanceOf(CustomException.class) diff --git a/src/test/java/com/example/solidconnection/community/post/service/PostCommandServiceTest.java b/src/test/java/com/example/solidconnection/community/post/service/PostCommandServiceTest.java index 09e55b45e..36211c341 100644 --- a/src/test/java/com/example/solidconnection/community/post/service/PostCommandServiceTest.java +++ b/src/test/java/com/example/solidconnection/community/post/service/PostCommandServiceTest.java @@ -113,7 +113,7 @@ class 게시글_생성_테스트 { .willReturn(List.of(new UploadedFileUrlResponse(expectedImageUrl))); // when - PostCreateResponse response = postCommandService.createPost(user1, request, imageFiles); + PostCreateResponse response = postCommandService.createPost(user1.getId(), request, imageFiles); // then Post savedPost = postRepository.findById(response.id()).orElseThrow(); @@ -134,7 +134,7 @@ class 게시글_생성_테스트 { // when & then assertThatThrownBy(() -> - postCommandService.createPost(user1, request, imageFiles)) + postCommandService.createPost(user1.getId(), request, imageFiles)) .isInstanceOf(CustomException.class) .hasMessage(INVALID_POST_CATEGORY.getMessage()); } @@ -147,7 +147,7 @@ class 게시글_생성_테스트 { // when & then assertThatThrownBy(() -> - postCommandService.createPost(user1, request, imageFiles)) + postCommandService.createPost(user1.getId(), request, imageFiles)) .isInstanceOf(CustomException.class) .hasMessage(INVALID_POST_CATEGORY.getMessage()); } @@ -160,7 +160,7 @@ class 게시글_생성_테스트 { // when & then assertThatThrownBy(() -> - postCommandService.createPost(user1, request, imageFiles)) + postCommandService.createPost(user1.getId(), request, imageFiles)) .isInstanceOf(CustomException.class) .hasMessage(CAN_NOT_UPLOAD_MORE_THAN_FIVE_IMAGES.getMessage()); } @@ -184,7 +184,7 @@ class 게시글_수정_테스트 { // when PostUpdateResponse response = postCommandService.updatePost( - user1, + user1.getId(), post.getId(), request, imageFiles @@ -212,7 +212,7 @@ class 게시글_수정_테스트 { // when & then assertThatThrownBy(() -> postCommandService.updatePost( - user2, + user2.getId(), post.getId(), request, imageFiles @@ -230,7 +230,7 @@ class 게시글_수정_테스트 { // when & then assertThatThrownBy(() -> postCommandService.updatePost( - user1, + user1.getId(), questionPost.getId(), request, imageFiles @@ -248,7 +248,7 @@ class 게시글_수정_테스트 { // when & then assertThatThrownBy(() -> postCommandService.updatePost( - user1, + user1.getId(), post.getId(), request, imageFiles @@ -270,7 +270,7 @@ class 게시글_삭제_테스트 { redisService.increaseViewCount(viewCountKey); // when - PostDeleteResponse response = postCommandService.deletePostById(user1, post.getId()); + PostDeleteResponse response = postCommandService.deletePostById(user1.getId(), post.getId()); // then assertAll( @@ -289,7 +289,7 @@ class 게시글_삭제_테스트 { // when & then assertThatThrownBy(() -> postCommandService.deletePostById( - user2, + user2.getId(), post.getId() )) .isInstanceOf(CustomException.class) @@ -301,7 +301,7 @@ class 게시글_삭제_테스트 { // when & then assertThatThrownBy(() -> postCommandService.deletePostById( - user1, + user1.getId(), questionPost.getId() )) .isInstanceOf(CustomException.class) diff --git a/src/test/java/com/example/solidconnection/community/post/service/PostLikeServiceTest.java b/src/test/java/com/example/solidconnection/community/post/service/PostLikeServiceTest.java index 36de90c5f..705ddd6f8 100644 --- a/src/test/java/com/example/solidconnection/community/post/service/PostLikeServiceTest.java +++ b/src/test/java/com/example/solidconnection/community/post/service/PostLikeServiceTest.java @@ -71,7 +71,7 @@ class 게시글_좋아요_테스트 { long beforeLikeCount = post.getLikeCount(); // when - PostLikeResponse response = postLikeService.likePost(user, post.getId()); + PostLikeResponse response = postLikeService.likePost(user.getId(), post.getId()); // then Post likedPost = postRepository.findById(post.getId()).orElseThrow(); @@ -86,12 +86,12 @@ class 게시글_좋아요_테스트 { @Test void 이미_좋아요한_게시글을_다시_좋아요하면_예외가_발생한다() { // given - postLikeService.likePost(user, post.getId()); + postLikeService.likePost(user.getId(), post.getId()); // when & then assertThatThrownBy(() -> postLikeService.likePost( - user, + user.getId(), post.getId() )) .isInstanceOf(CustomException.class) @@ -105,11 +105,11 @@ class 게시글_좋아요_취소_테스트 { @Test void 게시글_좋아요를_성공적으로_취소한다() { // given - PostLikeResponse beforeResponse = postLikeService.likePost(user, post.getId()); + PostLikeResponse beforeResponse = postLikeService.likePost(user.getId(), post.getId()); long beforeLikeCount = beforeResponse.likeCount(); // when - PostDislikeResponse response = postLikeService.dislikePost(user, post.getId()); + PostDislikeResponse response = postLikeService.dislikePost(user.getId(), post.getId()); // then Post unlikedPost = postRepository.findById(post.getId()).orElseThrow(); @@ -126,7 +126,7 @@ class 게시글_좋아요_취소_테스트 { // when & then assertThatThrownBy(() -> postLikeService.dislikePost( - user, + user.getId(), post.getId() )) .isInstanceOf(CustomException.class) diff --git a/src/test/java/com/example/solidconnection/community/post/service/PostQueryServiceTest.java b/src/test/java/com/example/solidconnection/community/post/service/PostQueryServiceTest.java index d3c474ba0..2377847d6 100644 --- a/src/test/java/com/example/solidconnection/community/post/service/PostQueryServiceTest.java +++ b/src/test/java/com/example/solidconnection/community/post/service/PostQueryServiceTest.java @@ -153,7 +153,7 @@ void setUp() { String viewCountKey = redisUtils.getPostViewCountRedisKey(post.getId()); // when - PostFindResponse response = postQueryService.findPostById(user, post.getId()); + PostFindResponse response = postQueryService.findPostById(user.getId(), post.getId()); // then assertAll( diff --git a/src/test/java/com/example/solidconnection/concurrency/PostLikeCountConcurrencyTest.java b/src/test/java/com/example/solidconnection/concurrency/PostLikeCountConcurrencyTest.java index 8c36bfbab..7a9e67b99 100644 --- a/src/test/java/com/example/solidconnection/concurrency/PostLikeCountConcurrencyTest.java +++ b/src/test/java/com/example/solidconnection/concurrency/PostLikeCountConcurrencyTest.java @@ -74,8 +74,8 @@ void setUp() { SiteUser tmpSiteUser = siteUserFixture.사용자(i, nickname); executorService.submit(() -> { try { - postLikeService.likePost(tmpSiteUser, post.getId()); - postLikeService.dislikePost(tmpSiteUser, post.getId()); + postLikeService.likePost(tmpSiteUser.getId(), post.getId()); + postLikeService.dislikePost(tmpSiteUser.getId(), post.getId()); } finally { doneSignal.countDown(); } diff --git a/src/test/java/com/example/solidconnection/concurrency/ThunderingHerdTest.java b/src/test/java/com/example/solidconnection/concurrency/ThunderingHerdTest.java index 566d2c8d0..9e86965af 100644 --- a/src/test/java/com/example/solidconnection/concurrency/ThunderingHerdTest.java +++ b/src/test/java/com/example/solidconnection/concurrency/ThunderingHerdTest.java @@ -1,7 +1,6 @@ package com.example.solidconnection.concurrency; import com.example.solidconnection.application.service.ApplicationQueryService; -import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.siteuser.fixture.SiteUserFixture; import com.example.solidconnection.support.TestContainerSpringBootTest; import java.util.Arrays; @@ -33,11 +32,11 @@ class ThunderingHerdTest { private int THREAD_NUMS = 1000; private int THREAD_POOL_SIZE = 200; private int TIMEOUT_SECONDS = 10; - private SiteUser user; + private long siteUserId; @BeforeEach public void setUp() { - user = siteUserFixture.사용자(); + siteUserId = siteUserFixture.사용자().getId(); } @Test @@ -53,9 +52,9 @@ public void setUp() { executorService.submit(() -> { try { List tasks = Arrays.asList( - () -> applicationQueryService.getApplicants(user, "", ""), - () -> applicationQueryService.getApplicants(user, "ASIA", ""), - () -> applicationQueryService.getApplicants(user, "", "추오") + () -> applicationQueryService.getApplicants(siteUserId, "", ""), + () -> applicationQueryService.getApplicants(siteUserId, "ASIA", ""), + () -> applicationQueryService.getApplicants(siteUserId, "", "추오") ); Collections.shuffle(tasks); tasks.forEach(Runnable::run); diff --git a/src/test/java/com/example/solidconnection/mentor/service/MentorMyPageServiceTest.java b/src/test/java/com/example/solidconnection/mentor/service/MentorMyPageServiceTest.java index e00eaadae..85667dffb 100644 --- a/src/test/java/com/example/solidconnection/mentor/service/MentorMyPageServiceTest.java +++ b/src/test/java/com/example/solidconnection/mentor/service/MentorMyPageServiceTest.java @@ -67,7 +67,7 @@ class 멘토의_마이_페이지를_조회한다 { Channel channel2 = channelFixture.채널(2, mentor); // when - MentorMyPageResponse response = mentorMyPageService.getMentorMyPage(mentorUser); + MentorMyPageResponse response = mentorMyPageService.getMentorMyPage(mentorUser.getId()); // then assertAll( @@ -90,7 +90,7 @@ class 멘토의_마이_페이지를_수정한다 { MentorMyPageUpdateRequest request = new MentorMyPageUpdateRequest(newIntroduction, newPassTip, List.of()); // when - mentorMyPageService.updateMentorMyPage(mentorUser, request); + mentorMyPageService.updateMentorMyPage(mentorUser.getId(), request); // then Mentor updatedMentor = mentorRepository.findById(mentor.getId()).get(); @@ -110,7 +110,7 @@ class 멘토의_마이_페이지를_수정한다 { MentorMyPageUpdateRequest request = new MentorMyPageUpdateRequest("introduction", "passTip", newChannels); // when - mentorMyPageService.updateMentorMyPage(mentorUser, request); + mentorMyPageService.updateMentorMyPage(mentorUser.getId(), request); // then List updatedChannels = channelRepositoryForTest.findAllByMentorId(mentor.getId()); diff --git a/src/test/java/com/example/solidconnection/mentor/service/MentorQueryServiceTest.java b/src/test/java/com/example/solidconnection/mentor/service/MentorQueryServiceTest.java index ba44c6db3..a7634c7ba 100644 --- a/src/test/java/com/example/solidconnection/mentor/service/MentorQueryServiceTest.java +++ b/src/test/java/com/example/solidconnection/mentor/service/MentorQueryServiceTest.java @@ -63,7 +63,7 @@ class 멘토_단일_조회_성공 { Channel channel2 = channelFixture.채널(2, mentor); // when - MentorDetailResponse response = mentorQueryService.getMentorDetails(mentor.getId(), siteUser); + MentorDetailResponse response = mentorQueryService.getMentorDetails(mentor.getId(), siteUser.getId()); // then assertAll( @@ -85,8 +85,8 @@ class 멘토_단일_조회_성공 { mentoringFixture.대기중_멘토링(mentor.getId(), appliedUser.getId()); // when - MentorDetailResponse notAppliedResponse = mentorQueryService.getMentorDetails(mentor.getId(), notAppliedUser); - MentorDetailResponse appliedResponse = mentorQueryService.getMentorDetails(mentor.getId(), appliedUser); + MentorDetailResponse notAppliedResponse = mentorQueryService.getMentorDetails(mentor.getId(), notAppliedUser.getId()); + MentorDetailResponse appliedResponse = mentorQueryService.getMentorDetails(mentor.getId(), appliedUser.getId()); // then assertAll( @@ -105,7 +105,7 @@ class 멘토_단일_조회_실패 { long notExistingMentorId = 999L; // when & then - assertThatCode(() -> mentorQueryService.getMentorDetails(notExistingMentorId, siteUserFixture.사용자())) + assertThatCode(() -> mentorQueryService.getMentorDetails(notExistingMentorId, siteUserFixture.사용자().getId())) .isInstanceOf(CustomException.class) .hasMessageContaining(ErrorCode.MENTOR_NOT_FOUND.getMessage()); } @@ -135,7 +135,7 @@ void setUp() { Channel channel2 = channelFixture.채널(2, mentor2); // when - SliceResponse response = mentorQueryService.getMentorPreviews(region, currentUser, PageRequest.of(0, 10)); + SliceResponse response = mentorQueryService.getMentorPreviews(region, currentUser.getId(), PageRequest.of(0, 10)); // then Map mentorPreviewMap = response.content().stream() @@ -159,7 +159,7 @@ void setUp() { mentoringFixture.대기중_멘토링(mentor1.getId(), currentUser.getId()); // when - SliceResponse response = mentorQueryService.getMentorPreviews(region, currentUser, PageRequest.of(0, 10)); + SliceResponse response = mentorQueryService.getMentorPreviews(region, currentUser.getId(), PageRequest.of(0, 10)); // then Map mentorPreviewMap = response.content().stream() @@ -173,7 +173,7 @@ void setUp() { @Test void 다음_페이지_번호를_응답한다() { // given - SliceResponse response = mentorQueryService.getMentorPreviews(region, currentUser, PageRequest.of(0, 1)); + SliceResponse response = mentorQueryService.getMentorPreviews(region, currentUser.getId(), PageRequest.of(0, 1)); // then assertThat(response.nextPageNumber()).isEqualTo(2); @@ -182,7 +182,7 @@ void setUp() { @Test void 다음_페이지가_없으면_페이지_없음을_의미하는_값을_응답한다() { // given - SliceResponse response = mentorQueryService.getMentorPreviews(region, currentUser, PageRequest.of(0, 10)); + SliceResponse response = mentorQueryService.getMentorPreviews(region, currentUser.getId(), PageRequest.of(0, 10)); // then assertThat(response.nextPageNumber()).isEqualTo(NO_NEXT_PAGE_NUMBER); diff --git a/src/test/java/com/example/solidconnection/news/service/NewsCommandServiceTest.java b/src/test/java/com/example/solidconnection/news/service/NewsCommandServiceTest.java index 71c927efc..f82a3bd84 100644 --- a/src/test/java/com/example/solidconnection/news/service/NewsCommandServiceTest.java +++ b/src/test/java/com/example/solidconnection/news/service/NewsCommandServiceTest.java @@ -302,7 +302,7 @@ class 소식지_삭제_테스트 { String expectedImageUrl = originNews.getThumbnailUrl(); // when - NewsCommandResponse response = newsCommandService.deleteNewsById(user, originNews.getId()); + NewsCommandResponse response = newsCommandService.deleteNewsById(user.getId(), originNews.getId()); // then assertAll( diff --git a/src/test/java/com/example/solidconnection/score/service/ScoreServiceTest.java b/src/test/java/com/example/solidconnection/score/service/ScoreServiceTest.java index e143579df..8760a645b 100644 --- a/src/test/java/com/example/solidconnection/score/service/ScoreServiceTest.java +++ b/src/test/java/com/example/solidconnection/score/service/ScoreServiceTest.java @@ -70,7 +70,7 @@ void setUp() { ); // when - GpaScoreStatusesResponse response = scoreService.getGpaScoreStatus(user); + GpaScoreStatusesResponse response = scoreService.getGpaScoreStatus(user.getId()); // then assertThat(response.gpaScoreStatusResponseList()).hasSize(scores.size()); @@ -79,7 +79,7 @@ void setUp() { @Test void GPA_점수가_없는_경우_빈_리스트를_반환한다() { // when - GpaScoreStatusesResponse response = scoreService.getGpaScoreStatus(user); + GpaScoreStatusesResponse response = scoreService.getGpaScoreStatus(user.getId()); // then assertThat(response.gpaScoreStatusResponseList()).isEmpty(); @@ -94,7 +94,7 @@ void setUp() { ); // when - LanguageTestScoreStatusesResponse response = scoreService.getLanguageTestScoreStatus(user); + LanguageTestScoreStatusesResponse response = scoreService.getLanguageTestScoreStatus(user.getId()); // then assertThat(response.languageTestScoreStatusResponseList()).hasSize(scores.size()); @@ -103,7 +103,7 @@ void setUp() { @Test void 어학_시험_점수가_없는_경우_빈_리스트를_반환한다() { // when - LanguageTestScoreStatusesResponse response = scoreService.getLanguageTestScoreStatus(user); + LanguageTestScoreStatusesResponse response = scoreService.getLanguageTestScoreStatus(user.getId()); // then assertThat(response.languageTestScoreStatusResponseList()).isEmpty(); @@ -118,7 +118,7 @@ void setUp() { given(s3Service.uploadFile(file, ImgType.GPA)).willReturn(new UploadedFileUrlResponse(fileUrl)); // when - long scoreId = scoreService.submitGpaScore(user, request, file); + long scoreId = scoreService.submitGpaScore(user.getId(), request, file); GpaScore savedScore = gpaScoreRepository.findById(scoreId).orElseThrow(); // then @@ -134,7 +134,7 @@ void setUp() { given(s3Service.uploadFile(file, ImgType.LANGUAGE_TEST)).willReturn(new UploadedFileUrlResponse(fileUrl)); // when - long scoreId = scoreService.submitLanguageTestScore(user, request, file); + long scoreId = scoreService.submitLanguageTestScore(user.getId(), request, file); LanguageTestScore savedScore = languageTestScoreRepository.findById(scoreId).orElseThrow(); // then diff --git a/src/test/java/com/example/solidconnection/siteuser/service/MyPageServiceTest.java b/src/test/java/com/example/solidconnection/siteuser/service/MyPageServiceTest.java index 5fbebdeff..0358f8024 100644 --- a/src/test/java/com/example/solidconnection/siteuser/service/MyPageServiceTest.java +++ b/src/test/java/com/example/solidconnection/siteuser/service/MyPageServiceTest.java @@ -5,7 +5,6 @@ import static com.example.solidconnection.siteuser.service.MyPageService.NICKNAME_LAST_CHANGE_DATE_FORMAT; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.AssertionsForClassTypes.assertThatCode; -import static org.mockito.ArgumentMatchers.argThat; import static org.mockito.BDDMockito.any; import static org.mockito.BDDMockito.eq; import static org.mockito.BDDMockito.given; @@ -75,7 +74,7 @@ void setUp() { int likedUnivApplyInfoCount = createLikedUnivApplyInfos(user); // when - MyPageResponse response = myPageService.getMyPageInfo(user); + MyPageResponse response = myPageService.getMyPageInfo(user.getId()); // then Assertions.assertAll( @@ -101,7 +100,7 @@ class 프로필_이미지_수정_테스트 { .willReturn(new UploadedFileUrlResponse(expectedUrl)); // when - myPageService.updateMyPageInfo(user, imageFile, "newNickname"); + myPageService.updateMyPageInfo(user.getId(), imageFile, "newNickname"); // then SiteUser updatedUser = siteUserRepository.findById(user.getId()).get(); @@ -116,10 +115,10 @@ class 프로필_이미지_수정_테스트 { .willReturn(new UploadedFileUrlResponse("newProfileImageUrl")); // when - myPageService.updateMyPageInfo(user, imageFile, "newNickname"); + myPageService.updateMyPageInfo(user.getId(), imageFile, "newNickname"); // then - then(s3Service).should(never()).deleteExProfile(any()); + then(s3Service).should(never()).deleteExProfile(user.getId()); } @Test @@ -131,11 +130,10 @@ class 프로필_이미지_수정_테스트 { .willReturn(new UploadedFileUrlResponse("newProfileImageUrl")); // when - myPageService.updateMyPageInfo(커스텀_프로필_사용자, imageFile, "newNickname"); + myPageService.updateMyPageInfo(커스텀_프로필_사용자.getId(), imageFile, "newNickname"); // then - then(s3Service).should().deleteExProfile(argThat(user -> - user.getId().equals(커스텀_프로필_사용자.getId()))); + then(s3Service).should().deleteExProfile(커스텀_프로필_사용자.getId()); } } @@ -155,7 +153,7 @@ void setUp() { String newNickname = "newNickname"; // when - myPageService.updateMyPageInfo(user, imageFile, newNickname); + myPageService.updateMyPageInfo(user.getId(), imageFile, newNickname); // then SiteUser updatedUser = siteUserRepository.findById(user.getId()).get(); @@ -172,7 +170,7 @@ void setUp() { siteUserRepository.save(user); // when & then - assertThatCode(() -> myPageService.updateMyPageInfo(user, imageFile, "nickname12")) + assertThatCode(() -> myPageService.updateMyPageInfo(user.getId(), imageFile, "nickname12")) .isInstanceOf(CustomException.class) .hasMessage(createExpectedErrorMessage(modifiedAt)); } diff --git a/src/test/java/com/example/solidconnection/university/service/LikedUnivApplyInfoServiceTest.java b/src/test/java/com/example/solidconnection/university/service/LikedUnivApplyInfoServiceTest.java index 918838ce1..2693d4501 100644 --- a/src/test/java/com/example/solidconnection/university/service/LikedUnivApplyInfoServiceTest.java +++ b/src/test/java/com/example/solidconnection/university/service/LikedUnivApplyInfoServiceTest.java @@ -57,7 +57,7 @@ void setUp() { saveLikedUnivApplyInfo(user, 그라츠대학_지원_정보); // when - List response = likedUnivApplyInfoService.getLikedUnivApplyInfos(user); + List response = likedUnivApplyInfoService.getLikedUnivApplyInfos(user.getId()); // then assertThat(response).extracting(UnivApplyInfoPreviewResponse::id) @@ -70,7 +70,7 @@ class 대학_지원_정보_좋아요를_등록한다 { @Test void 성공적으로_좋아요를_등록한다() { // when - likedUnivApplyInfoService.addUnivApplyInfoLike(user, 괌대학_A_지원_정보.getId()); + likedUnivApplyInfoService.addUnivApplyInfoLike(user.getId(), 괌대학_A_지원_정보.getId()); // then assertThat( @@ -84,7 +84,7 @@ class 대학_지원_정보_좋아요를_등록한다 { saveLikedUnivApplyInfo(user, 괌대학_A_지원_정보); // when & then - assertThatCode(() -> likedUnivApplyInfoService.addUnivApplyInfoLike(user, 괌대학_A_지원_정보.getId())) + assertThatCode(() -> likedUnivApplyInfoService.addUnivApplyInfoLike(user.getId(), 괌대학_A_지원_정보.getId())) .isInstanceOf(CustomException.class) .hasMessage(ALREADY_LIKED_UNIV_APPLY_INFO.getMessage()); } @@ -99,7 +99,7 @@ class 대학_지원_정보_좋아요를_취소한다 { saveLikedUnivApplyInfo(user, 괌대학_A_지원_정보); // when - likedUnivApplyInfoService.cancelUnivApplyInfoLike(user, 괌대학_A_지원_정보.getId()); + likedUnivApplyInfoService.cancelUnivApplyInfoLike(user.getId(), 괌대학_A_지원_정보.getId()); // then assertThat( @@ -110,7 +110,7 @@ class 대학_지원_정보_좋아요를_취소한다 { @Test void 좋아요하지_않았으면_예외가_발생한다() { // when & then - assertThatCode(() -> likedUnivApplyInfoService.cancelUnivApplyInfoLike(user, 괌대학_A_지원_정보.getId())) + assertThatCode(() -> likedUnivApplyInfoService.cancelUnivApplyInfoLike(user.getId(), 괌대학_A_지원_정보.getId())) .isInstanceOf(CustomException.class) .hasMessage(NOT_LIKED_UNIV_APPLY_INFO.getMessage()); } @@ -122,7 +122,7 @@ class 대학_지원_정보_좋아요를_취소한다 { Long invalidUnivApplyInfoId = 9999L; // when & then - assertThatCode(() -> likedUnivApplyInfoService.addUnivApplyInfoLike(user, invalidUnivApplyInfoId)) + assertThatCode(() -> likedUnivApplyInfoService.addUnivApplyInfoLike(user.getId(), invalidUnivApplyInfoId)) .isInstanceOf(CustomException.class) .hasMessage(UNIV_APPLY_INFO_NOT_FOUND.getMessage()); } @@ -133,7 +133,7 @@ class 대학_지원_정보_좋아요를_취소한다 { saveLikedUnivApplyInfo(user, 괌대학_A_지원_정보); // when - IsLikeResponse response = likedUnivApplyInfoService.isUnivApplyInfoLiked(user, 괌대학_A_지원_정보.getId()); + IsLikeResponse response = likedUnivApplyInfoService.isUnivApplyInfoLiked(user.getId(), 괌대학_A_지원_정보.getId()); // then assertThat(response.isLike()).isTrue(); @@ -142,7 +142,7 @@ class 대학_지원_정보_좋아요를_취소한다 { @Test void 좋아요하지_않은_대학_지원_정보인지_확인한다() { // when - IsLikeResponse response = likedUnivApplyInfoService.isUnivApplyInfoLiked(user, 괌대학_A_지원_정보.getId()); + IsLikeResponse response = likedUnivApplyInfoService.isUnivApplyInfoLiked(user.getId(), 괌대학_A_지원_정보.getId()); // then assertThat(response.isLike()).isFalse(); @@ -154,7 +154,7 @@ class 대학_지원_정보_좋아요를_취소한다 { Long invalidUnivApplyInfoId = 9999L; // when & then - assertThatCode(() -> likedUnivApplyInfoService.isUnivApplyInfoLiked(user, invalidUnivApplyInfoId)) + assertThatCode(() -> likedUnivApplyInfoService.isUnivApplyInfoLiked(user.getId(), invalidUnivApplyInfoId)) .isInstanceOf(CustomException.class) .hasMessage(UNIV_APPLY_INFO_NOT_FOUND.getMessage()); } diff --git a/src/test/java/com/example/solidconnection/university/service/UnivApplyInfoRecommendServiceTest.java b/src/test/java/com/example/solidconnection/university/service/UnivApplyInfoRecommendServiceTest.java index 94ad7b9ee..2c8dd954e 100644 --- a/src/test/java/com/example/solidconnection/university/service/UnivApplyInfoRecommendServiceTest.java +++ b/src/test/java/com/example/solidconnection/university/service/UnivApplyInfoRecommendServiceTest.java @@ -80,7 +80,7 @@ void setUp() { interestedRegionRepository.save(new InterestedRegion(user, regionFixture.영미권())); // when - UnivApplyInfoRecommendsResponse response = univApplyInfoRecommendService.getPersonalRecommends(user); + UnivApplyInfoRecommendsResponse response = univApplyInfoRecommendService.getPersonalRecommends(user.getId()); // then assertThat(response.recommendedUniversities()) @@ -99,7 +99,7 @@ void setUp() { interestedCountryRepository.save(new InterestedCountry(user, countryFixture.덴마크())); // when - UnivApplyInfoRecommendsResponse response = univApplyInfoRecommendService.getPersonalRecommends(user); + UnivApplyInfoRecommendsResponse response = univApplyInfoRecommendService.getPersonalRecommends(user.getId()); // then assertThat(response.recommendedUniversities()) @@ -117,7 +117,7 @@ void setUp() { interestedCountryRepository.save(new InterestedCountry(user, countryFixture.덴마크())); // when - UnivApplyInfoRecommendsResponse response = univApplyInfoRecommendService.getPersonalRecommends(user); + UnivApplyInfoRecommendsResponse response = univApplyInfoRecommendService.getPersonalRecommends(user.getId()); // then assertThat(response.recommendedUniversities()) @@ -135,7 +135,7 @@ void setUp() { @Test void 관심사_미설정_사용자는_일반_추천_대학_지원_정보를_조회한다() { // when - UnivApplyInfoRecommendsResponse response = univApplyInfoRecommendService.getPersonalRecommends(user); + UnivApplyInfoRecommendsResponse response = univApplyInfoRecommendService.getPersonalRecommends(user.getId()); // then assertThat(response.recommendedUniversities())