diff --git a/src/main/java/com/brainpix/post/controller/CollaborationHubQueryController.java b/src/main/java/com/brainpix/post/controller/CollaborationHubQueryController.java index 9aceb048..0efeaf95 100644 --- a/src/main/java/com/brainpix/post/controller/CollaborationHubQueryController.java +++ b/src/main/java/com/brainpix/post/controller/CollaborationHubQueryController.java @@ -26,6 +26,7 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; @RestController @@ -42,7 +43,7 @@ public class CollaborationHubQueryController { public ResponseEntity> applyCollaboration( @PathVariable("collaborationId") Long collaborationId, @RequestParam("userId") Long userId, - @RequestBody ApplyCollaborationDto.Request request) { + @RequestBody @Valid ApplyCollaborationDto.Request request) { ApplyCollaborationDto.Parameter parameter = ApplyCollaborationDtoConverter.toParameter(collaborationId, userId, request); ApplyCollaborationDto.Response response = collaborationHubService.applyCollaboration(parameter); diff --git a/src/main/java/com/brainpix/post/dto/ApplyCollaborationDto.java b/src/main/java/com/brainpix/post/dto/ApplyCollaborationDto.java index 3a9596da..695b2ce5 100644 --- a/src/main/java/com/brainpix/post/dto/ApplyCollaborationDto.java +++ b/src/main/java/com/brainpix/post/dto/ApplyCollaborationDto.java @@ -14,7 +14,6 @@ public static class Request { Long collaborationRecruitmentId; // 지원 분야 식별자 @NotNull(message = "자기소개 및 포트폴리오 공개 여부를 결정해주세요.") Boolean isOpenProfile; // 자기소개 및 포트폴리오 공개 여부 - @NotNull(message = "메시지에 null 값은 허용되지 않습니다.") String message; // 추가 메시지 } diff --git a/src/main/java/com/brainpix/post/dto/ApplyRequestTaskDto.java b/src/main/java/com/brainpix/post/dto/ApplyRequestTaskDto.java index 47261765..5c34cc3a 100644 --- a/src/main/java/com/brainpix/post/dto/ApplyRequestTaskDto.java +++ b/src/main/java/com/brainpix/post/dto/ApplyRequestTaskDto.java @@ -14,7 +14,6 @@ public static class Request { Long requestRecruitmentId; // 지원 분야 식별자 @NotNull(message = "자기소개 및 포트폴리오 공개 여부를 결정해주세요.") Boolean isOpenProfile; // 자기소개 및 포트폴리오 공개 여부 - @NotNull(message = "메시지에 null 값은 허용되지 않습니다.") String message; // 추가 메시지 } diff --git a/src/main/java/com/brainpix/post/repository/PostRepository.java b/src/main/java/com/brainpix/post/repository/PostRepository.java index 3ee02160..e188e701 100644 --- a/src/main/java/com/brainpix/post/repository/PostRepository.java +++ b/src/main/java/com/brainpix/post/repository/PostRepository.java @@ -3,6 +3,9 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import com.brainpix.post.entity.Post; import com.brainpix.user.entity.User; @@ -10,4 +13,8 @@ public interface PostRepository extends JpaRepository { Page findByWriter(User writer, Pageable pageable); + + @Modifying + @Query("update Post p set p.viewCount = p.viewCount + 1 where p.id = :id") + Integer increaseViewCount(@Param("id") Long postId); } \ No newline at end of file diff --git a/src/main/java/com/brainpix/post/service/CollaborationHubService.java b/src/main/java/com/brainpix/post/service/CollaborationHubService.java index 535e2001..8f5fd7ae 100644 --- a/src/main/java/com/brainpix/post/service/CollaborationHubService.java +++ b/src/main/java/com/brainpix/post/service/CollaborationHubService.java @@ -32,6 +32,7 @@ import com.brainpix.post.repository.CollaborationHubRepository; import com.brainpix.post.repository.CollaborationRecruitmentRepository; import com.brainpix.post.repository.IdeaMarketRepository; +import com.brainpix.post.repository.PostRepository; import com.brainpix.post.repository.SavedPostRepository; import com.brainpix.security.authority.BrainpixAuthority; import com.brainpix.user.entity.User; @@ -54,6 +55,7 @@ public class CollaborationHubService { private final IdeaMarketRepository ideaMarketRepository; private final RequestTaskPurchasingRepository requestTaskPurchasingRepository; private final AlarmEventService alarmEventService; + private final PostRepository postRepository; @Transactional public Long createCollaborationHub(Long userId, CollaborationHubCreateDto createDto) { @@ -108,7 +110,7 @@ public CommonPageResponse getCol return GetCollaborationHubListDtoConverter.toResponse(result); } - @Transactional(readOnly = true) + @Transactional public GetCollaborationHubDetailDto.Response getCollaborationHubDetail( GetCollaborationHubDetailDto.Parameter parameter) { @@ -126,6 +128,9 @@ public GetCollaborationHubDetailDto.Response getCollaborationHubDetail( throw new BrainPixException(RequestTaskErrorCode.FORBIDDEN_ACCESS); } + // 조회수 증가 + postRepository.increaseViewCount(collaborationHub.getId()); + // 작성자 조회 User writer = collaborationHub.getWriter(); diff --git a/src/main/java/com/brainpix/post/service/IdeaMarketService.java b/src/main/java/com/brainpix/post/service/IdeaMarketService.java index 0f56b6bb..8485a88e 100644 --- a/src/main/java/com/brainpix/post/service/IdeaMarketService.java +++ b/src/main/java/com/brainpix/post/service/IdeaMarketService.java @@ -25,6 +25,7 @@ import com.brainpix.post.entity.PostAuth; import com.brainpix.post.entity.idea_market.IdeaMarket; import com.brainpix.post.repository.IdeaMarketRepository; +import com.brainpix.post.repository.PostRepository; import com.brainpix.post.repository.SavedPostRepository; import com.brainpix.security.authority.BrainpixAuthority; import com.brainpix.user.entity.User; @@ -43,6 +44,7 @@ public class IdeaMarketService { private final PriceService priceService; private final CreateIdeaMarketConverter createIdeaMarketConverter; private final RequestTaskPurchasingRepository requestTaskPurchasingRepository; + private final PostRepository postRepository; @Transactional public Long createIdeaMarket(Long userId, IdeaMarketCreateDto createDto) { @@ -95,7 +97,7 @@ public CommonPageResponse getIdeaList(GetIdeaListDto. } // 아이디어 식별자 값을 입력받아 상세보기에 관한 내용을 반환합니다. - @Transactional(readOnly = true) + @Transactional public GetIdeaDetailDto.Response getIdeaDetail(GetIdeaDetailDto.Parameter parameter) { // 유저 조회 @@ -112,6 +114,9 @@ public GetIdeaDetailDto.Response getIdeaDetail(GetIdeaDetailDto.Parameter parame throw new BrainPixException(IdeaMarketErrorCode.FORBIDDEN_ACCESS); } + // 조회수 증가 + postRepository.increaseViewCount(ideaMarket.getId()); + // 작성자 조회 User writer = ideaMarket.getWriter(); diff --git a/src/main/java/com/brainpix/post/service/RequestTaskQueryService.java b/src/main/java/com/brainpix/post/service/RequestTaskQueryService.java index 92da1b28..7fb5dc5e 100644 --- a/src/main/java/com/brainpix/post/service/RequestTaskQueryService.java +++ b/src/main/java/com/brainpix/post/service/RequestTaskQueryService.java @@ -19,6 +19,7 @@ import com.brainpix.post.entity.PostAuth; import com.brainpix.post.entity.request_task.RequestTask; import com.brainpix.post.repository.IdeaMarketRepository; +import com.brainpix.post.repository.PostRepository; import com.brainpix.post.repository.RequestTaskRepository; import com.brainpix.post.repository.SavedPostRepository; import com.brainpix.security.authority.BrainpixAuthority; @@ -29,7 +30,6 @@ @Service @RequiredArgsConstructor -@Transactional(readOnly = true) public class RequestTaskQueryService { private final RequestTaskRepository requestTaskRepository; @@ -38,8 +38,10 @@ public class RequestTaskQueryService { private final CollectionGatheringRepository collectionGatheringRepository; private final UserRepository userRepository; private final RequestTaskPurchasingRepository requestTaskPurchasingRepository; + private final PostRepository postRepository; // 요청 과제 메인페이지에서 검색 조건을 적용하여 요청 과제 목록을 반환합니다. + @Transactional(readOnly = true) public CommonPageResponse getRequestTaskList( GetRequestTaskListDto.Parameter parameter) { @@ -53,6 +55,7 @@ public CommonPageResponse getRequestTas } // 저장순으로 요청 과제를 조회합니다. + @Transactional(readOnly = true) public CommonPageResponse getPopularRequestTaskList( GetPopularRequestTaskListDto.Parameter parameter) { @@ -65,6 +68,7 @@ public CommonPageResponse getPop } // 요청 과제 상세 페이지 내용을 조회합니다. + @Transactional public GetRequestTaskDetailDto.Response getRequestTaskDetail( GetRequestTaskDetailDto.Parameter parameter) { @@ -82,6 +86,9 @@ public GetRequestTaskDetailDto.Response getRequestTaskDetail( throw new BrainPixException(PostErrorCode.FORBIDDEN_ACCESS); } + // 조회수 증가 + postRepository.increaseViewCount(requestTask.getId()); + // 작성자 조회 User writer = requestTask.getWriter();