Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -42,7 +43,7 @@ public class CollaborationHubQueryController {
public ResponseEntity<ApiResponse<ApplyCollaborationDto.Response>> 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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ public static class Request {
Long collaborationRecruitmentId; // 지원 분야 식별자
@NotNull(message = "자기소개 및 포트폴리오 공개 여부를 결정해주세요.")
Boolean isOpenProfile; // 자기소개 및 포트폴리오 공개 여부
@NotNull(message = "메시지에 null 값은 허용되지 않습니다.")
String message; // 추가 메시지
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ public static class Request {
Long requestRecruitmentId; // 지원 분야 식별자
@NotNull(message = "자기소개 및 포트폴리오 공개 여부를 결정해주세요.")
Boolean isOpenProfile; // 자기소개 및 포트폴리오 공개 여부
@NotNull(message = "메시지에 null 값은 허용되지 않습니다.")
String message; // 추가 메시지
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,18 @@
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;

public interface PostRepository extends JpaRepository<Post, Long> {

Page<Post> findByWriter(User writer, Pageable pageable);

@Modifying
Copy link
Contributor

@redblackblossom redblackblossom Feb 6, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이 부분 JPA 엔티티 수정으로 하시지 않고 직접 쿼리 날리신 이유가 있으신가요?

https://everydayyy.tistory.com/157

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

두 명이 동시에 조회하는 경우 조회수가 올라가지 않을 수도 있을 거 같아, db에서 직접 +1을 하도록 했습니다!

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

그런 경우는 쿼리를 날리는 것이 아니라 데이터베이스 락 같은 방법을 사용하셔야 합니다.

@Query("update Post p set p.viewCount = p.viewCount + 1 where p.id = :id")
Integer increaseViewCount(@Param("id") Long postId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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) {
Expand Down Expand Up @@ -108,7 +110,7 @@ public CommonPageResponse<GetCollaborationHubListDto.CollaborationDetail> getCol
return GetCollaborationHubListDtoConverter.toResponse(result);
}

@Transactional(readOnly = true)
@Transactional
public GetCollaborationHubDetailDto.Response getCollaborationHubDetail(
GetCollaborationHubDetailDto.Parameter parameter) {

Expand All @@ -126,6 +128,9 @@ public GetCollaborationHubDetailDto.Response getCollaborationHubDetail(
throw new BrainPixException(RequestTaskErrorCode.FORBIDDEN_ACCESS);
}

// 조회수 증가
postRepository.increaseViewCount(collaborationHub.getId());

// 작성자 조회
User writer = collaborationHub.getWriter();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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) {
Expand Down Expand Up @@ -95,7 +97,7 @@ public CommonPageResponse<GetIdeaListDto.IdeaDetail> getIdeaList(GetIdeaListDto.
}

// 아이디어 식별자 값을 입력받아 상세보기에 관한 내용을 반환합니다.
@Transactional(readOnly = true)
@Transactional
public GetIdeaDetailDto.Response getIdeaDetail(GetIdeaDetailDto.Parameter parameter) {

// 유저 조회
Expand All @@ -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();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -29,7 +30,6 @@

@Service
@RequiredArgsConstructor
@Transactional(readOnly = true)
public class RequestTaskQueryService {

private final RequestTaskRepository requestTaskRepository;
Expand All @@ -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<GetRequestTaskListDto.RequestTaskDetail> getRequestTaskList(
GetRequestTaskListDto.Parameter parameter) {

Expand All @@ -53,6 +55,7 @@ public CommonPageResponse<GetRequestTaskListDto.RequestTaskDetail> getRequestTas
}

// 저장순으로 요청 과제를 조회합니다.
@Transactional(readOnly = true)
public CommonPageResponse<GetPopularRequestTaskListDto.RequestTaskDetail> getPopularRequestTaskList(
GetPopularRequestTaskListDto.Parameter parameter) {

Expand All @@ -65,6 +68,7 @@ public CommonPageResponse<GetPopularRequestTaskListDto.RequestTaskDetail> getPop
}

// 요청 과제 상세 페이지 내용을 조회합니다.
@Transactional
public GetRequestTaskDetailDto.Response getRequestTaskDetail(
GetRequestTaskDetailDto.Parameter parameter) {

Expand All @@ -82,6 +86,9 @@ public GetRequestTaskDetailDto.Response getRequestTaskDetail(
throw new BrainPixException(PostErrorCode.FORBIDDEN_ACCESS);
}

// 조회수 증가
postRepository.increaseViewCount(requestTask.getId());

// 작성자 조회
User writer = requestTask.getWriter();

Expand Down