diff --git a/backend-board/build.gradle b/backend-board/build.gradle index 98c160b..229a299 100644 --- a/backend-board/build.gradle +++ b/backend-board/build.gradle @@ -49,6 +49,12 @@ dependencies { implementation 'io.jsonwebtoken:jjwt-api:0.12.3' implementation 'io.jsonwebtoken:jjwt-impl:0.12.3' implementation 'io.jsonwebtoken:jjwt-jackson:0.12.3' + + //Querydsl 추가 + implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' + annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta" + annotationProcessor "jakarta.annotation:jakarta.annotation-api" + annotationProcessor "jakarta.persistence:jakarta.persistence-api" } tasks.named('test') { @@ -62,3 +68,8 @@ test { jar { enabled = false } + +clean { + delete file('src/main/generated') +} + diff --git a/backend-board/src/main/java/com/backendboard/domain/comment/dto/CommentReadResponse.java b/backend-board/src/main/java/com/backendboard/domain/comment/dto/CommentReadResponse.java index 702d8da..fc79335 100644 --- a/backend-board/src/main/java/com/backendboard/domain/comment/dto/CommentReadResponse.java +++ b/backend-board/src/main/java/com/backendboard/domain/comment/dto/CommentReadResponse.java @@ -3,6 +3,7 @@ import java.time.LocalDateTime; import com.backendboard.domain.comment.entity.Comment; +import com.querydsl.core.annotations.QueryProjection; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Builder; @@ -30,9 +31,9 @@ public class CommentReadResponse { private final LocalDateTime lastModifiedDate; @Builder - private CommentReadResponse(Long id, Long postId, String author, String content, LocalDateTime createdDate, - LocalDateTime lastModifiedDate - ) { + @QueryProjection + public CommentReadResponse(Long id, Long postId, String author, String content, LocalDateTime createdDate, + LocalDateTime lastModifiedDate) { this.id = id; this.postId = postId; this.author = author; diff --git a/backend-board/src/main/java/com/backendboard/domain/comment/dto/CommentSliceResponse.java b/backend-board/src/main/java/com/backendboard/domain/comment/dto/CommentSliceResponse.java index 23650c9..78313af 100644 --- a/backend-board/src/main/java/com/backendboard/domain/comment/dto/CommentSliceResponse.java +++ b/backend-board/src/main/java/com/backendboard/domain/comment/dto/CommentSliceResponse.java @@ -3,6 +3,7 @@ import java.time.LocalDateTime; import com.backendboard.domain.comment.entity.Comment; +import com.querydsl.core.annotations.QueryProjection; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Builder; @@ -30,7 +31,8 @@ public class CommentSliceResponse { private final LocalDateTime lastModifiedDate; @Builder - private CommentSliceResponse(Long id, Long postId, String author, String content, LocalDateTime createdDate, + @QueryProjection + public CommentSliceResponse(Long id, Long postId, String author, String content, LocalDateTime createdDate, LocalDateTime lastModifiedDate) { this.id = id; this.postId = postId; diff --git a/backend-board/src/main/java/com/backendboard/domain/comment/entity/Comment.java b/backend-board/src/main/java/com/backendboard/domain/comment/entity/Comment.java index 1e0421a..a466741 100644 --- a/backend-board/src/main/java/com/backendboard/domain/comment/entity/Comment.java +++ b/backend-board/src/main/java/com/backendboard/domain/comment/entity/Comment.java @@ -7,6 +7,8 @@ import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; +import jakarta.persistence.Index; +import jakarta.persistence.Table; import lombok.AccessLevel; import lombok.Builder; import lombok.Getter; @@ -15,6 +17,11 @@ @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) +@Table( + indexes = { + @Index(name = "idx_created_date", columnList = "createdDate") + } +) public class Comment extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) diff --git a/backend-board/src/main/java/com/backendboard/domain/comment/repository/CommentQueryRepository.java b/backend-board/src/main/java/com/backendboard/domain/comment/repository/CommentQueryRepository.java new file mode 100644 index 0000000..19bebd5 --- /dev/null +++ b/backend-board/src/main/java/com/backendboard/domain/comment/repository/CommentQueryRepository.java @@ -0,0 +1,103 @@ +package com.backendboard.domain.comment.repository; + +import java.util.ArrayList; +import java.util.List; + +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Slice; +import org.springframework.data.domain.SliceImpl; +import org.springframework.data.domain.Sort; +import org.springframework.stereotype.Repository; + +import com.backendboard.domain.comment.dto.CommentReadResponse; +import com.backendboard.domain.comment.dto.CommentSliceResponse; +import com.backendboard.domain.comment.dto.QCommentReadResponse; +import com.backendboard.domain.comment.dto.QCommentSliceResponse; +import com.backendboard.domain.comment.entity.QComment; +import com.backendboard.domain.user.entity.QUser; +import com.backendboard.global.error.CustomError; +import com.backendboard.global.error.CustomException; +import com.querydsl.core.types.Order; +import com.querydsl.core.types.OrderSpecifier; +import com.querydsl.core.types.dsl.PathBuilder; +import com.querydsl.jpa.impl.JPAQueryFactory; + +import lombok.RequiredArgsConstructor; + +@Repository +@RequiredArgsConstructor +public class CommentQueryRepository { + private final JPAQueryFactory queryFactory; + + public CommentReadResponse findCommentReadResponse(Long commentId) { + QComment comment = QComment.comment; + QUser user = QUser.user; + + CommentReadResponse result = queryFactory + .select(new QCommentReadResponse( + comment.id, + comment.postId, + user.nickname, + comment.content, + comment.createdDate, + comment.lastModifiedDate + )) + .from(comment) + .join(user).on(comment.userId.eq(user.id)) + .where(comment.id.eq(commentId)) + .fetchOne(); + + if (result == null) { + throw new CustomException(CustomError.COMMENT_NOT_FOUND); + } + + return result; + } + + public Slice findCommentSliceResponse(Long postId, boolean deleted, Pageable pageable) { + QComment comment = QComment.comment; + QUser user = QUser.user; + boolean hasNext = false; + List> orderSpecifiers = getOrderSpecifiers(pageable, comment); + + List content = queryFactory + .select(new QCommentSliceResponse( + comment.id, + comment.postId, + user.nickname, + comment.content, + comment.createdDate, + comment.lastModifiedDate + )) + .from(comment) + .join(user).on(comment.userId.eq(user.id)) + .where( + comment.postId.eq(postId), + comment.deleted.eq(deleted) + ) + .orderBy(orderSpecifiers.toArray(new OrderSpecifier[0])) + .offset(pageable.getOffset()) + .limit(pageable.getPageSize() + 1) + .fetch(); + + if (content.size() > pageable.getPageSize()) { + content.remove(pageable.getPageSize()); + hasNext = true; + } + + return new SliceImpl<>(content, pageable, hasNext); + } + + private List> getOrderSpecifiers(Pageable pageable, QComment comment) { + List> orders = new ArrayList<>(); + + for (Sort.Order order : pageable.getSort()) { + PathBuilder entityPath = new PathBuilder<>(comment.getType(), comment.getMetadata()); + orders.add( + new OrderSpecifier(order.isAscending() ? Order.ASC : Order.DESC, entityPath.get(order.getProperty())) + ); + } + return orders; + } + +} diff --git a/backend-board/src/main/java/com/backendboard/domain/comment/service/CommentServiceImpl.java b/backend-board/src/main/java/com/backendboard/domain/comment/service/CommentServiceImpl.java index 13c0155..37ce954 100644 --- a/backend-board/src/main/java/com/backendboard/domain/comment/service/CommentServiceImpl.java +++ b/backend-board/src/main/java/com/backendboard/domain/comment/service/CommentServiceImpl.java @@ -1,10 +1,5 @@ package com.backendboard.domain.comment.service; -import java.util.Map; -import java.util.Set; -import java.util.function.Function; -import java.util.stream.Collectors; - import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; import org.springframework.stereotype.Service; @@ -17,6 +12,7 @@ import com.backendboard.domain.comment.dto.CommentUpdateRequest; import com.backendboard.domain.comment.dto.CommentUpdateResponse; import com.backendboard.domain.comment.entity.Comment; +import com.backendboard.domain.comment.repository.CommentQueryRepository; import com.backendboard.domain.comment.repository.CommentRepository; import com.backendboard.domain.user.entity.User; import com.backendboard.domain.user.repository.UserRepository; @@ -29,6 +25,7 @@ @Service @RequiredArgsConstructor public class CommentServiceImpl implements CommentService { + private final CommentQueryRepository commentQueryRepository; private final CommentRepository commentRepository; private final UserRepository userRepository; @@ -56,11 +53,7 @@ public CommentUpdateResponse updateComment(CommentUpdateRequest request, Long co @Override public CommentReadResponse getComment(Long commentId) { - Comment comment = commentRepository.findById(commentId) - .orElseThrow(() -> new CustomException(CustomError.COMMENT_NOT_FOUND)); - User author = userRepository.findById(comment.getUserId()) - .orElseThrow(() -> new CustomException(CustomError.USER_NOT_FOUND)); - return CommentReadResponse.toDto(comment, author.getNickname()); + return commentQueryRepository.findCommentReadResponse(commentId); } @Transactional @@ -77,17 +70,7 @@ public void deleteComment(Long commentId, Long authUserId) { @Override public Slice getCommetsSlice(Long postId, Pageable pageable) { - Slice comments = commentRepository.findByPostIdAndDeleted(postId, false, pageable); - - Set userIds = comments.stream().map(Comment::getUserId).collect(Collectors.toSet()); - - Map userMap = userRepository.findAllById(userIds) - .stream().collect(Collectors.toMap(User::getId, Function.identity())); - - return comments.map(comment -> { - User user = userMap.get(comment.getUserId()); - return CommentSliceResponse.toDto(comment, user.getNickname()); - }); + return commentQueryRepository.findCommentSliceResponse(postId, false, pageable); } public void validateAuthor(Comment comment, User user) { diff --git a/backend-board/src/main/java/com/backendboard/domain/post/dto/PostReadResponse.java b/backend-board/src/main/java/com/backendboard/domain/post/dto/PostReadResponse.java index 216a453..cfeb99b 100644 --- a/backend-board/src/main/java/com/backendboard/domain/post/dto/PostReadResponse.java +++ b/backend-board/src/main/java/com/backendboard/domain/post/dto/PostReadResponse.java @@ -56,15 +56,14 @@ private PostReadResponse(Long id, String author, String title, String content, L } @Builder - - public static PostReadResponse toDto(Post post, String author, List images, Long viewCount) { + public static PostReadResponse toDto(Post post, String author, List images) { return PostReadResponse.builder() .id(post.getId()) .author(author) .title(post.getTitle()) .content(post.getContent()) .likeCount(post.getLikeCount()) - .viewCount(viewCount) + .viewCount(post.getViewCount()) .images(images.stream().map(PostImageReadResponse::toDto).toList()) .createdDate(post.getCreatedDate()) .lastModifiedDate(post.getLastModifiedDate()) diff --git a/backend-board/src/main/java/com/backendboard/domain/post/dto/PostSliceResponse.java b/backend-board/src/main/java/com/backendboard/domain/post/dto/PostSliceResponse.java index 90ed87d..ff3b232 100644 --- a/backend-board/src/main/java/com/backendboard/domain/post/dto/PostSliceResponse.java +++ b/backend-board/src/main/java/com/backendboard/domain/post/dto/PostSliceResponse.java @@ -3,6 +3,7 @@ import java.time.LocalDateTime; import com.backendboard.domain.post.entity.Post; +import com.querydsl.core.annotations.QueryProjection; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Builder; @@ -36,7 +37,8 @@ public class PostSliceResponse { private final LocalDateTime lastModifiedDate; @Builder - private PostSliceResponse(Long id, String author, String title, String content, Long likeCount, Long viewCount, + @QueryProjection + public PostSliceResponse(Long id, String author, String title, String content, Long likeCount, Long viewCount, LocalDateTime createdDate, LocalDateTime lastModifiedDate) { this.id = id; this.author = author; diff --git a/backend-board/src/main/java/com/backendboard/domain/post/entity/Post.java b/backend-board/src/main/java/com/backendboard/domain/post/entity/Post.java index f1d72f5..d23a540 100644 --- a/backend-board/src/main/java/com/backendboard/domain/post/entity/Post.java +++ b/backend-board/src/main/java/com/backendboard/domain/post/entity/Post.java @@ -7,7 +7,9 @@ import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; +import jakarta.persistence.Index; import jakarta.persistence.Lob; +import jakarta.persistence.Table; import lombok.AccessLevel; import lombok.Builder; import lombok.Getter; @@ -16,6 +18,13 @@ @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) +@Table( + indexes = { + @Index(name = "idx_like_count", columnList = "likeCount"), + @Index(name = "idx_view_count", columnList = "viewCount"), + @Index(name = "idx_created_date", columnList = "createdDate") + } +) public class Post extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) diff --git a/backend-board/src/main/java/com/backendboard/domain/post/respository/PostQueryRepository.java b/backend-board/src/main/java/com/backendboard/domain/post/respository/PostQueryRepository.java new file mode 100644 index 0000000..6cd1df4 --- /dev/null +++ b/backend-board/src/main/java/com/backendboard/domain/post/respository/PostQueryRepository.java @@ -0,0 +1,71 @@ +package com.backendboard.domain.post.respository; + +import java.util.ArrayList; +import java.util.List; + +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Slice; +import org.springframework.data.domain.SliceImpl; +import org.springframework.data.domain.Sort; +import org.springframework.stereotype.Repository; + +import com.backendboard.domain.post.dto.PostSliceResponse; +import com.backendboard.domain.post.dto.QPostSliceResponse; +import com.backendboard.domain.post.entity.QPost; +import com.backendboard.domain.user.entity.QUser; +import com.querydsl.core.types.Order; +import com.querydsl.core.types.OrderSpecifier; +import com.querydsl.core.types.dsl.PathBuilder; +import com.querydsl.jpa.impl.JPAQueryFactory; + +import lombok.RequiredArgsConstructor; + +@Repository +@RequiredArgsConstructor +public class PostQueryRepository { + private final JPAQueryFactory queryFactory; + + public Slice findPostSliceResponse(boolean deleted, Pageable pageable) { + QPost post = QPost.post; + QUser user = QUser.user; + boolean hasNext = false; + List> orderSpecifiers = getOrderSpecifiers(pageable, post); + + List content = queryFactory + .select(new QPostSliceResponse( + post.id, + user.nickname, + post.title, + post.content, + post.likeCount, + post.viewCount, + post.createdDate, + post.lastModifiedDate + )) + .from(post) + .join(user).on(post.userId.eq(user.id)) + .where(post.deleted.eq(deleted)) + .orderBy(orderSpecifiers.toArray(new OrderSpecifier[0])) + .offset(pageable.getOffset()) + .limit(pageable.getPageSize() + 1) + .fetch(); + + if (content.size() > pageable.getPageSize()) { + content.remove(pageable.getPageSize()); + hasNext = true; + } + return new SliceImpl<>(content, pageable, hasNext); + } + + private List> getOrderSpecifiers(Pageable pageable, QPost post) { + List> orders = new ArrayList<>(); + + for (Sort.Order order : pageable.getSort()) { + PathBuilder entityPath = new PathBuilder<>(post.getType(), post.getMetadata()); + orders.add( + new OrderSpecifier(order.isAscending() ? Order.ASC : Order.DESC, entityPath.get(order.getProperty())) + ); + } + return orders; + } +} diff --git a/backend-board/src/main/java/com/backendboard/domain/post/respository/ViewCountRedisRepository.java b/backend-board/src/main/java/com/backendboard/domain/post/respository/ViewCountRedisRepository.java index f68e84c..b0d5566 100644 --- a/backend-board/src/main/java/com/backendboard/domain/post/respository/ViewCountRedisRepository.java +++ b/backend-board/src/main/java/com/backendboard/domain/post/respository/ViewCountRedisRepository.java @@ -8,6 +8,4 @@ public interface ViewCountRedisRepository { Map getEntries(); void incrementCount(String postId); - - Long getIncrementCount(String postId); } diff --git a/backend-board/src/main/java/com/backendboard/domain/post/respository/ViewCountRedisRepositoryImpl.java b/backend-board/src/main/java/com/backendboard/domain/post/respository/ViewCountRedisRepositoryImpl.java index 93303b0..0acb739 100644 --- a/backend-board/src/main/java/com/backendboard/domain/post/respository/ViewCountRedisRepositoryImpl.java +++ b/backend-board/src/main/java/com/backendboard/domain/post/respository/ViewCountRedisRepositoryImpl.java @@ -1,7 +1,6 @@ package com.backendboard.domain.post.respository; import java.util.Map; -import java.util.Optional; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Repository; @@ -29,11 +28,4 @@ public Map getEntries() { public void incrementCount(String postId) { redisTemplate.opsForHash().increment(KEY, postId, 1); } - - @Override - public Long getIncrementCount(String postId) { - return Optional.ofNullable(redisTemplate.opsForHash().get(KEY, postId)) - .map(value -> ((Number)value).longValue()) - .orElse(0L); - } } diff --git a/backend-board/src/main/java/com/backendboard/domain/post/scheduler/PostScheduler.java b/backend-board/src/main/java/com/backendboard/domain/post/scheduler/PostScheduler.java index b5114dd..54acd24 100644 --- a/backend-board/src/main/java/com/backendboard/domain/post/scheduler/PostScheduler.java +++ b/backend-board/src/main/java/com/backendboard/domain/post/scheduler/PostScheduler.java @@ -25,7 +25,7 @@ public class PostScheduler { private final ViewCountRedisRepository viewCountRedisRepository; private final JdbcTemplate jdbcTemplate; - @Scheduled(fixedDelay = 180_000) + @Scheduled(fixedDelay = 60_000) public void syncLikeCount() { Map entries = postLikeRedisRepository.getEntries(); List batchArgs = new ArrayList<>(); diff --git a/backend-board/src/main/java/com/backendboard/domain/post/service/PostServiceImpl.java b/backend-board/src/main/java/com/backendboard/domain/post/service/PostServiceImpl.java index 0d92b7b..e14c5df 100644 --- a/backend-board/src/main/java/com/backendboard/domain/post/service/PostServiceImpl.java +++ b/backend-board/src/main/java/com/backendboard/domain/post/service/PostServiceImpl.java @@ -1,10 +1,6 @@ package com.backendboard.domain.post.service; import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.function.Function; -import java.util.stream.Collectors; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; @@ -18,6 +14,7 @@ import com.backendboard.domain.post.dto.PostUpdateRequest; import com.backendboard.domain.post.dto.PostUpdateResponse; import com.backendboard.domain.post.entity.Post; +import com.backendboard.domain.post.respository.PostQueryRepository; import com.backendboard.domain.post.respository.PostRepository; import com.backendboard.domain.post.respository.ViewCountRedisRepository; import com.backendboard.domain.postimage.entity.PostImage; @@ -37,6 +34,7 @@ public class PostServiceImpl implements PostService { private final UserRepository userRepository; private final PostImageRepository postImageRepository; private final ViewCountRedisRepository viewCountRedisRepository; + private final PostQueryRepository postQueryRepository; @Transactional @Override @@ -84,9 +82,8 @@ public PostReadResponse getPost(Long postId, Long currentAuthUserId) { incrementViewCount(postId); } - Long viewCount = post.getViewCount() + viewCountRedisRepository.getIncrementCount(postId.toString()); List images = postImageRepository.findByPostId(postId); - return PostReadResponse.toDto(post, user.getNickname(), images, viewCount); + return PostReadResponse.toDto(post, user.getNickname(), images); } private void incrementViewCount(Long postId) { @@ -107,17 +104,7 @@ public void deletePost(Long postId, Long authUserId) { @Override public Slice getPostsSlice(Pageable pageable) { - Slice posts = postRepository.findByDeleted(false, pageable); - - Set userIds = posts.stream().map(Post::getUserId).collect(Collectors.toSet()); - - Map userMap = userRepository.findAllById(userIds) - .stream().collect(Collectors.toMap(User::getId, Function.identity())); - - return posts.map(post -> { - User user = userMap.get(post.getUserId()); - return PostSliceResponse.toDto(post, user.getNickname()); - }); + return postQueryRepository.findPostSliceResponse(false, pageable); } public void validateAuthor(Post post, User user) { diff --git a/backend-board/src/main/java/com/backendboard/domain/user/controller/UserController.java b/backend-board/src/main/java/com/backendboard/domain/user/controller/UserController.java index e7145e7..1566752 100644 --- a/backend-board/src/main/java/com/backendboard/domain/user/controller/UserController.java +++ b/backend-board/src/main/java/com/backendboard/domain/user/controller/UserController.java @@ -5,7 +5,6 @@ import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PatchMapping; -import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -62,10 +61,10 @@ public ResponseEntity getInfo(@AuthenticationPrincipal CustomU @ApiResponse(responseCode = "404", description = "유저를 찾을 수 없습니다.", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorResponse.class))), }) - @PatchMapping("/{userId}/nickname") - public ResponseEntity updateNickname(@PathVariable Long userId, + @PatchMapping("/nickname") + public ResponseEntity updateNickname( @AuthenticationPrincipal CustomUserDetails customUserDetails, UserNicknameUpdateRequest request) { - UserNicknameUpdateResponse response = userService.updateNickname(request, userId, customUserDetails.getId()); + UserNicknameUpdateResponse response = userService.updateNickname(request, customUserDetails.getId()); return ResponseEntity.status(HttpStatus.OK).body(response); } } diff --git a/backend-board/src/main/java/com/backendboard/domain/user/service/UserService.java b/backend-board/src/main/java/com/backendboard/domain/user/service/UserService.java index 45be138..90b1537 100644 --- a/backend-board/src/main/java/com/backendboard/domain/user/service/UserService.java +++ b/backend-board/src/main/java/com/backendboard/domain/user/service/UserService.java @@ -7,5 +7,5 @@ public interface UserService { UserInfoResponse getInfo(Long authUserId); - UserNicknameUpdateResponse updateNickname(UserNicknameUpdateRequest request, Long userId, Long authUserId); + UserNicknameUpdateResponse updateNickname(UserNicknameUpdateRequest request, Long authUserId); } diff --git a/backend-board/src/main/java/com/backendboard/domain/user/service/UserServiceImpl.java b/backend-board/src/main/java/com/backendboard/domain/user/service/UserServiceImpl.java index 19e1ac0..7c98f32 100644 --- a/backend-board/src/main/java/com/backendboard/domain/user/service/UserServiceImpl.java +++ b/backend-board/src/main/java/com/backendboard/domain/user/service/UserServiceImpl.java @@ -27,15 +27,13 @@ public UserInfoResponse getInfo(Long authUserId) { @Transactional @Override - public UserNicknameUpdateResponse updateNickname(UserNicknameUpdateRequest request, Long userId, Long authUserId) { - validateUser(userId, authUserId); - + public UserNicknameUpdateResponse updateNickname(UserNicknameUpdateRequest request, Long authUserId) { + User user = userRepository.getByAuthUserId(authUserId); //공백 제거 String updateNickname = request.getNickname().replaceAll("\\p{Z}", ""); validateDuplicationNickname(updateNickname); - User user = userRepository.findById(userId).orElseThrow(() -> new CustomException(CustomError.USER_NOT_FOUND)); user.updateNickname(updateNickname); return UserNicknameUpdateResponse.toDto(user); } @@ -45,10 +43,4 @@ private void validateDuplicationNickname(String nickname) { throw new CustomException(CustomError.USER_DUPLICATION_NICKNAME); } } - - public void validateUser(Long userId, Long authUserId) { - if (userId != authUserId) { - throw new CustomException(CustomError.AUTH_INVALID_USER); - } - } } diff --git a/backend-board/src/main/java/com/backendboard/global/config/QueryDslConfig.java b/backend-board/src/main/java/com/backendboard/global/config/QueryDslConfig.java new file mode 100644 index 0000000..b6c474c --- /dev/null +++ b/backend-board/src/main/java/com/backendboard/global/config/QueryDslConfig.java @@ -0,0 +1,20 @@ +package com.backendboard.global.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import com.querydsl.jpa.impl.JPAQueryFactory; + +import jakarta.persistence.EntityManager; +import lombok.RequiredArgsConstructor; + +@Configuration +@RequiredArgsConstructor +public class QueryDslConfig { + private final EntityManager entityManager; + + @Bean + public JPAQueryFactory jpaQueryFactory() { + return new JPAQueryFactory(entityManager); + } +}