-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Feature/#240] 팝업 관련 api 구현 #241
Open
sss4920
wants to merge
5
commits into
develop
Choose a base branch
from
feature/#240
base: develop
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
5 commits
Select commit
Hold shift + click to select a range
0db4e02
merge: 충돌해결
sss4920 42f8fb7
[#240] feature: 팝업 관련 기능 구현
sss4920 8634a22
[#240] chore: build.gradle 충돌흔적 제거
sss4920 027e8d3
[#240] refactor: 컨트롤러 수정 후 토큰 테스트 완료
sss4920 78b036d
[#240] feature: user 회원탈퇴 시 manager도 비우도록 설정
sss4920 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
34 changes: 17 additions & 17 deletions
34
linkmind/src/main/java/com/app/toaster/config/JpaQueryFactoryConfig.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,17 +1,17 @@ | ||
package com.app.toaster.config; | ||
|
||
import org.springframework.context.annotation.Bean; | ||
import org.springframework.context.annotation.Configuration; | ||
|
||
import com.querydsl.jpa.impl.JPAQueryFactory; | ||
|
||
import jakarta.persistence.EntityManager; | ||
|
||
@Configuration | ||
public class JpaQueryFactoryConfig { | ||
|
||
@Bean | ||
JPAQueryFactory jpaQueryFactory(EntityManager em) { | ||
return new JPAQueryFactory(em); | ||
} | ||
} | ||
// package com.app.toaster.config; | ||
// | ||
// import org.springframework.context.annotation.Bean; | ||
// import org.springframework.context.annotation.Configuration; | ||
// | ||
// import com.querydsl.jpa.impl.JPAQueryFactory; | ||
// | ||
// import jakarta.persistence.EntityManager; | ||
// | ||
// @Configuration | ||
// public class JpaQueryFactoryConfig { | ||
// | ||
// @Bean | ||
// JPAQueryFactory jpaQueryFactory(EntityManager em) { | ||
// return new JPAQueryFactory(em); | ||
// } | ||
// } |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
154 changes: 154 additions & 0 deletions
154
linkmind/src/main/java/com/app/toaster/infrastructure/querydsl/CustomToastRepository.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,154 @@ | ||
// package com.app.toaster.infrastructure.querydsl; | ||
// | ||
// import static com.app.toaster.domain.QToast.*; | ||
// import static com.app.toaster.domain.QUser.*; | ||
// | ||
// import java.time.LocalDateTime; | ||
// import java.util.ArrayList; | ||
// import java.util.List; | ||
// import org.springframework.data.jpa.repository.Modifying; | ||
// import org.springframework.data.jpa.repository.Query; | ||
// import org.springframework.data.repository.query.Param; | ||
// import org.springframework.stereotype.Repository; | ||
// | ||
// import com.app.toaster.domain.Category; | ||
// import com.app.toaster.domain.QToast; | ||
// import com.app.toaster.domain.QUser; | ||
// import com.app.toaster.domain.Toast; | ||
// import com.app.toaster.domain.User; | ||
// import com.querydsl.core.types.Path; | ||
// import com.querydsl.core.types.dsl.BooleanExpression; | ||
// import com.querydsl.jpa.impl.JPAQueryFactory; | ||
// | ||
// import jakarta.persistence.EntityManager; | ||
// import lombok.RequiredArgsConstructor; | ||
// | ||
// @Repository | ||
// @RequiredArgsConstructor | ||
// public class CustomToastRepository { | ||
// private final JPAQueryFactory queryFactory; | ||
// // private final EntityManager em; | ||
// public List<Toast> getAllByCategory(Category category){ | ||
// return queryFactory.select(toast) | ||
// .from(toast) | ||
// .where(eqCategoryId(category.getCategoryId())) | ||
// .fetch(); | ||
// } | ||
// | ||
// private BooleanExpression eqCategoryId(Long id){ | ||
// if (id == null){ | ||
// return null; | ||
// } | ||
// return toast.category.categoryId.eq(id); | ||
// } | ||
// | ||
// ArrayList<Toast> findByIsReadAndCategory(Boolean isRead, Category category){ | ||
// return null; | ||
// }; | ||
// | ||
// ArrayList<Toast> getAllByUser(User user){ | ||
// return null; | ||
// } | ||
// | ||
// List<Toast> getAllByUserOrderByCreatedAtDesc(User user){ | ||
// return null; | ||
// } | ||
// | ||
// | ||
// ArrayList<Toast> getAllByUserAndIsReadIsTrue(User user){ | ||
// return null; | ||
// } | ||
// | ||
// | ||
// // @Modifying | ||
// // @Query("UPDATE Toast t SET t.category = null WHERE t.category.categoryId IN :categoryIds") | ||
// // void updateCategoryIdsToNull(@Param("categoryIds") List<Long> categoryIds){ | ||
// // } | ||
// | ||
// //querydsl의 수정은 bulkupdate라 영속성컨텍스트를 안거치기 때문에 무조건 flush,clear해주자. | ||
// void updateCategoryIdsToNull(List<Long> categoryIds){ | ||
// queryFactory.update(toast) | ||
// .set(toast.category, (Category)null) | ||
// .where(toast.category.categoryId.in(categoryIds)) | ||
// .execute(); | ||
// // em.flush(); //test 코드에서는 따로 em을 주입하는 중이므로 테스트 후 넣자. | ||
// // em.clear(); | ||
// } | ||
// | ||
// | ||
// List<Toast> searchToastsByQuery(Long userId, String query){ | ||
// return queryFactory.select(toast) | ||
// .from(toast) | ||
// .leftJoin(toast.user, user).fetchJoin() | ||
// .where(eqToastOwner(userId), containToastTitle(query)) | ||
// .fetch(); | ||
// } | ||
// private BooleanExpression eqToastOwner(Long userId){ | ||
// return userId != null?toast.user.userId.eq(userId):null; | ||
// } | ||
// | ||
// private BooleanExpression containToastTitle(String query){ | ||
// if (query == null || query.isEmpty() || query.isBlank()){ | ||
// return null; | ||
// } | ||
// return toast.title.containsIgnoreCase(query); | ||
// } | ||
// | ||
// | ||
// | ||
// Long countAllByUser(User user){ | ||
// return null; | ||
// } | ||
// | ||
// | ||
// Long countALLByUserAndIsReadTrue(User user){ | ||
// return null; | ||
// } | ||
// | ||
// | ||
// Long countALLByUserAndIsReadFalse(User user){ | ||
// return null; | ||
// } | ||
// | ||
// | ||
// Long countAllByCategory(Category category){ | ||
// return null; | ||
// } | ||
// | ||
// | ||
// Long countAllByCategoryAndIsReadTrue(Category category){ | ||
// return null; | ||
// } | ||
// | ||
// | ||
// Long countAllByCategoryAndIsReadFalse(Category category){ | ||
// return null; | ||
// } | ||
// | ||
// | ||
// Integer getUnReadToastNumber(Long userId){ | ||
// | ||
// Integer count = queryFactory.select(toast.count().intValue()) | ||
// .from(toast) | ||
// .where(eqToastOwner(userId).and(toast.isRead.isFalse())) | ||
// .fetchOne(); | ||
// return (count!=null)?count:0; | ||
// } | ||
// | ||
// | ||
// @Query("SELECT COUNT(t) FROM Toast t WHERE t.user=:user AND t.createdAt >= :startOfWeek AND t.createdAt <= :endOfWeek") | ||
// Long countAllByCreatedAtThisWeek(@Param("startOfWeek") LocalDateTime startOfWeek, | ||
// @Param("endOfWeek") LocalDateTime endOfWeek, @Param("user") User user){ | ||
// return null; | ||
// } | ||
// | ||
// | ||
// @Query("SELECT COUNT(t) FROM Toast t WHERE t.user=:user AND t.isRead = true AND t.updateAt >= :startOfWeek AND t.updateAt <= :endOfWeek") | ||
// Long countAllByUpdateAtThisWeek(@Param("startOfWeek") LocalDateTime startOfWeek, | ||
// @Param("endOfWeek") LocalDateTime endOfWeek, | ||
// @Param("user") User user){ | ||
// return null; | ||
// } | ||
// | ||
// | ||
// } |
38 changes: 38 additions & 0 deletions
38
linkmind/src/main/java/com/app/toaster/popup/controller/PopupController.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
package com.app.toaster.popup.controller; | ||
|
||
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.RequestBody; | ||
import org.springframework.web.bind.annotation.RequestMapping; | ||
import org.springframework.web.bind.annotation.RequestParam; | ||
import org.springframework.web.bind.annotation.RestController; | ||
|
||
import com.app.toaster.popup.controller.request.PopUpRequestDto; | ||
import com.app.toaster.popup.controller.response.InvisibleResponseDto; | ||
import com.app.toaster.popup.controller.response.PopupResponseDto; | ||
import com.app.toaster.popup.service.PopupService; | ||
import com.app.toaster.common.dto.ApiResponse; | ||
import com.app.toaster.config.UserId; | ||
import com.app.toaster.exception.Success; | ||
|
||
import lombok.RequiredArgsConstructor; | ||
|
||
@RestController | ||
@RequiredArgsConstructor | ||
@RequestMapping("/api/v2/popup") | ||
public class PopupController { | ||
private final PopupService popupService; | ||
|
||
|
||
@PatchMapping | ||
public ApiResponse<InvisibleResponseDto> updateInvisible(@UserId Long userId, @RequestBody PopUpRequestDto popUpRequestDto){ | ||
return ApiResponse.success(Success.UPDATE_POPUP_SUCCESS, popupService.updatePopupInvisible(userId,popUpRequestDto)); | ||
} | ||
|
||
@GetMapping | ||
public ApiResponse<PopupResponseDto> getPopUpInformation(@UserId Long userId){ | ||
return ApiResponse.success(Success.GET_POPUP_SUCCESS, popupService.findPopupInformation(userId)); | ||
} | ||
|
||
} |
11 changes: 11 additions & 0 deletions
11
linkmind/src/main/java/com/app/toaster/popup/controller/request/PopUpRequestDto.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
package com.app.toaster.popup.controller.request; | ||
|
||
import jakarta.validation.Valid; | ||
|
||
public record PopUpRequestDto( | ||
@Valid | ||
Long popupId, | ||
@Valid | ||
boolean invisible | ||
) { | ||
} |
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
RequestDto를 그대로 service에 넘겨주면 controller과 service가 분리되기보다 의존성이 높아진다고 controller -> service에 넘길때도 따로 dto를 만든다고해서 이런식으로 리펙토링 진행해보려고하는데 어떠신가요??
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
오 이해했습니다. 좋은 생각인 것 같아요.! 덕분에 저도 요런 링크를 찾았습니당
https://ksh-coding.tistory.com/102
약간 이해한대로 요약해보면 현재 저희는 여기서 설명하는 1번 방법인
service레이어에서 requestDto를 컨트롤러에서 받은 그대로 사용하고 있는데, 2번 방법인 requestCommandDto라는 service레이어에서 사용할 때 service와 controller의 결합을 약하게 만들 수 있다는 것이라고 이해했습니다!
혹시 그러면 이 리팩토링을 어느정도 사용하시는 걸 생각하고 계시나욤? 일단 리팩토링을 적용하는 것이 저도 좋다고 생각하는데
전체적으로 사용한다고 하면 dto 관리측면이 많이 늘어날 수 있다는 단점이 있을 수 있을 것 같습니당
위 링크의 필자분은 처음에 들어온 requestDto와 컨트롤러에서 외부 api등을 호출해야해서 service와 controller레이어에서 원하는 requestDto 포멧이 바뀌는 경우에만 적용하는 것이 좋아보인다고 해요!
물론 의존성을 분리한다는 장점이 있는 것은 맞지만 단점과 비교했을 때 많은 이득을 볼 수 있을지 사실 체감이 잘 되지는 않는 것 같아서 여쭤봅니당..! (근데 시도 자체는 좋은 것 같아서 좋은 고민인 것 같아요!☺️ )
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
음 일단 기존꺼보다 새로운거 개발할때 적용해보려고 생각했는데 기존꺼는 어떻게 해야할지 잘 모르겠네용...
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
기존꺼 리팩토링.. 어디부터 손대야할지 빡세긴하네용 ㅜ