Skip to content

Commit 3bbda2d

Browse files
authored
Merge pull request #332 from GTable/feat/#331/N+1해결
fix(user,admin): n+1해결 및 getUser 로직 변경
2 parents fcdca61 + 8e79477 commit 3bbda2d

12 files changed

Lines changed: 110 additions & 88 deletions

File tree

nowait-app-admin-api/build.gradle

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ bootJar {
1212
group = 'com.nowait'
1313
version = '0.0.1-SNAPSHOT'
1414

15+
1516
repositories {
1617
mavenCentral()
1718
maven { url 'https://jitpack.io' }
@@ -29,11 +30,11 @@ dependencyManagement {
2930

3031
dependencies {
3132
implementation project(':nowait-common')
32-
implementation project(':nowait-infra')
33+
implementation project(':nowait-infra') // 사용자 관련 도메인
3334
implementation project(':nowait-domain:domain-admin-rdb')
3435
implementation project(':nowait-domain:domain-core-rdb')
3536
implementation project(':nowait-domain:domain-redis')
36-
implementation project(':nowait-event')
37+
implementation project(":nowait-event")
3738

3839
// Spring Boot Starter
3940
implementation 'org.springframework.boot:spring-boot-starter-web'
@@ -42,23 +43,27 @@ dependencies {
4243
// SPRING SECURITY
4344
implementation 'org.springframework.boot:spring-boot-starter-security'
4445
testImplementation 'org.springframework.boot:spring-boot-starter-test'
45-
implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
4646

4747
// jwt
4848
implementation 'io.jsonwebtoken:jjwt-api:0.12.3'
4949
implementation 'io.jsonwebtoken:jjwt-impl:0.12.3'
5050
implementation 'io.jsonwebtoken:jjwt-jackson:0.12.3'
5151

52-
// redis
53-
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
54-
55-
// SWAGGER
56-
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.6.0'
52+
// OAUTH2
53+
implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
54+
implementation 'org.springframework.boot:spring-boot-starter-oauth2-resource-server'
55+
implementation 'jakarta.servlet:jakarta.servlet-api:6.0.0'
5756

5857
// DB
5958
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
6059
runtimeOnly 'com.mysql:mysql-connector-j'
6160

61+
// SWAGGER
62+
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.6.0'
63+
64+
// Redis
65+
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
66+
6267
// 디스코드 웹훅
6368
implementation 'com.github.napstr:logback-discord-appender:1.0.0'
6469

@@ -78,12 +83,14 @@ dependencies {
7883

7984
// test
8085
testImplementation 'org.springframework.boot:spring-boot-starter-test'
81-
testImplementation platform("org.testcontainers:testcontainers-bom:1.20.1")
82-
testImplementation "org.testcontainers:junit-jupiter"
83-
testImplementation "org.testcontainers:testcontainers"
84-
86+
testImplementation 'org.junit.jupiter:junit-jupiter-api'
87+
testImplementation 'org.junit.jupiter:junit-jupiter-engine'
88+
testImplementation 'org.mockito:mockito-core'
89+
testImplementation 'org.mockito:mockito-junit-jupiter'
90+
testImplementation 'org.testcontainers:junit-jupiter'
91+
testImplementation 'com.redis:testcontainers-redis:2.2.4'
8592
}
8693

8794
test {
8895
useJUnitPlatform()
89-
}
96+
}

nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/menu/service/MenuService.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public class MenuService {
4747
@Transactional
4848
public MenuCreateResponse createMenu(MenuCreateRequest request, MemberDetails memberDetails) {
4949
// 사용자 정보 가져오기
50-
User user = getUser(memberDetails);
50+
User user = memberDetails.getUser();
5151
// 사용자 역할이 SUPER_ADMIN이거나, storeId가 일치하는지 확인
5252
validateViewAuthorization(user, request.getStoreId());
5353

@@ -61,7 +61,7 @@ public MenuCreateResponse createMenu(MenuCreateRequest request, MemberDetails me
6161
@Transactional(readOnly = true)
6262
public MenuReadResponse getAllMenusByStoreId(Long storeId, MemberDetails memberDetails) {
6363
// 사용자 정보 가져오기
64-
User user = getUser(memberDetails);
64+
User user = memberDetails.getUser();
6565
// 사용자 역할이 SUPER_ADMIN이거나, storeId가 일치하는지 확인
6666
validateViewAuthorization(user, storeId);
6767

@@ -86,7 +86,7 @@ public MenuReadDto getMenuById(Long storeId, Long menuId, MemberDetails memberDe
8686
throw new MenuParamEmptyException();
8787
}
8888
// 사용자 정보 가져오기
89-
User user = getUser(memberDetails);
89+
User user = memberDetails.getUser();
9090
Menu menu = getMenu(menuId);
9191
// 사용자 역할이 SUPER_ADMIN이거나, storeId가 일치하는지 확인
9292
validateViewAuthorization(user, menu.getStoreId());
@@ -102,7 +102,7 @@ public MenuReadDto getMenuById(Long storeId, Long menuId, MemberDetails memberDe
102102

103103
@Transactional
104104
public MenuReadDto updateMenu(Long menuId, MenuUpdateRequest request, MemberDetails memberDetails) {
105-
User user = getUser(memberDetails);
105+
User user = memberDetails.getUser();
106106
Menu menu = getMenu(menuId);
107107

108108
validateUpdateAuthorization(user, menu.getStoreId());
@@ -168,7 +168,7 @@ public String updateMenuSortOrder(List<MenuSortUpdateRequest> requests, MemberDe
168168

169169
@Transactional
170170
public String deleteMenu(Long menuId, MemberDetails memberDetails) {
171-
User user = getUser(memberDetails);
171+
User user = memberDetails.getUser();
172172
Menu menu = getMenu(menuId);
173173

174174
validateDeleteAuthorization(user, menu.getStoreId());
@@ -210,9 +210,9 @@ private void validateDeleteAuthorization(User user, Long storeId) {
210210
}
211211
}
212212

213-
private User getUser(MemberDetails memberDetails) {
214-
return userRepository.findById(memberDetails.getId()).orElseThrow(UserNotFoundException::new);
215-
}
213+
// private User getUser(MemberDetails memberDetails) {
214+
// return userRepository.findById(memberDetails.getId()).orElseThrow(UserNotFoundException::new);
215+
// }
216216

217217
private Menu getMenu(Long menuId) {
218218
return menuRepository.findByIdAndDeletedFalse(menuId)

nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/order/service/OrderService.java

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,11 @@
3434
import com.nowait.nowaitevent.order.event.OrderCancelledEvent;
3535

3636
import lombok.RequiredArgsConstructor;
37+
import lombok.extern.slf4j.Slf4j;
3738

3839
@Service
3940
@RequiredArgsConstructor
41+
@Slf4j
4042
public class OrderService {
4143
private final OrderRepository orderRepository;
4244
private final StatisticCustomRepository statisticCustomRepository;
@@ -46,24 +48,29 @@ public class OrderService {
4648

4749
@Transactional(readOnly = true)
4850
public List<OrderResponseDto> findAllOrders(Long storeId, MemberDetails memberDetails) {
49-
User user = getUser(memberDetails);
51+
log.info("getUser 호출 전");
52+
User user = memberDetails.getUser();
53+
log.info("getUser 호출 완료");
5054
storeRepository.findByStoreIdAndDeletedFalse(storeId).orElseThrow(StoreNotFoundException::new);
55+
log.info("Store 조회 완료");
5156

5257
validateViewAuthorization(user, storeId);
5358

5459
LocalDate today = LocalDate.now(ZoneId.of("Asia/Seoul"));
5560
LocalDateTime startDateTime = today.atStartOfDay();
5661
LocalDateTime endDateTime = today.plusDays(1).atStartOfDay();
57-
return orderRepository.findAllByStore_StoreIdAndCreatedAtBetween(storeId, startDateTime, endDateTime)
62+
List<OrderResponseDto> order = orderRepository.findAllByStore_StoreIdAndCreatedAtBetween(storeId, startDateTime, endDateTime)
5863
.stream()
5964
.map(OrderResponseDto::fromEntity)
6065
.collect(Collectors.toList());
66+
log.info("Order 조회 완료");
67+
return order;
6168
}
6269

6370
@Transactional
6471
public OrderStatusUpdateResponseDto updateOrderStatus(Long orderId, OrderStatus newStatus,
6572
MemberDetails memberDetails) {
66-
User user = getUser(memberDetails);
73+
User user = memberDetails.getUser();
6774
UserOrder userOrder = orderRepository.findById(orderId).orElseThrow(OrderNotFoundException::new);
6875
Long storeId = userOrder.getStore().getStoreId();
6976

@@ -92,7 +99,7 @@ public OrderStatusUpdateResponseDto updateOrderStatus(Long orderId, OrderStatus
9299

93100
@Transactional
94101
public OrderStatusUpdateResponseDto cancelOrder(Long orderId, CancelOrderRequest cancelOrderRequest, MemberDetails memberDetails) {
95-
User user = getUser(memberDetails);
102+
User user = memberDetails.getUser();
96103
UserOrder userOrder = orderRepository.findById(orderId).orElseThrow(OrderNotFoundException::new);
97104

98105
validateUpdateAuthorization(user, userOrder.getStore().getStoreId());
@@ -113,7 +120,7 @@ public OrderStatusUpdateResponseDto cancelOrder(Long orderId, CancelOrderRequest
113120

114121
@Transactional(readOnly = true)
115122
public OrderSalesSumDetail getSaleSumByStoreId(MemberDetails memberDetails, LocalDate date) {
116-
User user = getUser(memberDetails);
123+
User user = memberDetails.getUser();
117124
Long storeId = user.getStoreId();
118125

119126
validateViewAuthorization(user, storeId);
@@ -124,7 +131,7 @@ public OrderSalesSumDetail getSaleSumByStoreId(MemberDetails memberDetails, Loca
124131
// 현재는 사용하지 않음. 향후 관리자 통계 페이지 확장 시 활용 가능
125132
@Transactional(readOnly = true)
126133
public List<TopSalesStoresDetail> getTop5StoresBySalesToday(MemberDetails memberDetails) {
127-
User user = getUser(memberDetails);
134+
User user = memberDetails.getUser();
128135
Long storeId = user.getStoreId();
129136

130137
validateUpdateAuthorization(user, storeId);
@@ -146,10 +153,11 @@ private void validateUpdateAuthorization(User user, Long storeId) {
146153
}
147154
}
148155

149-
private User getUser(MemberDetails memberDetails) {
150-
if (memberDetails == null) {
151-
throw new OrderViewUnauthorizedException();
152-
}
153-
return userRepository.findById(memberDetails.getId()).orElseThrow(UserNotFoundException::new);
154-
}
156+
// private User getUser(MemberDetails memberDetails) {
157+
// if (memberDetails == null) {
158+
// throw new OrderViewUnauthorizedException();
159+
// }
160+
// // findById로 Select 쿼리 나가는 것을 getReferenceById로 변경하여 방지
161+
// return userRepository.getReferenceById(memberDetails.getId());
162+
// }
155163
}

nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/reservation/service/ReservationService.java

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ public class ReservationService {
6161
//TODO 성능 비교를 위해 남겨둔 로직
6262
@Transactional(readOnly = true)
6363
public ReservationStatusSummaryDto getReservationListByStoreId(Long storeId, MemberDetails memberDetails) {
64-
User user = getUser(memberDetails);
64+
User user = memberDetails.getUser();
6565
validateViewAuthorization(user, storeId);
6666
List<Reservation> reservations = reservationRepository.findAllByStore_StoreIdOrderByRequestedAtAsc(storeId);
6767

@@ -96,7 +96,7 @@ public ReservationStatusSummaryDto getReservationListByStoreId(Long storeId, Mem
9696
@Transactional
9797
public CallGetResponseDto updateReservationStatus(Long reservationId, ReservationStatusUpdateRequestDto requestDto,
9898
MemberDetails memberDetails) {
99-
User user = getUser(memberDetails);
99+
User user = memberDetails.getUser();
100100
Reservation reservation = reservationRepository.findById(reservationId)
101101
.orElseThrow(ReservationNotFoundException::new);
102102
validateUpdateAuthorization(user, reservation.getStore().getStoreId());
@@ -195,7 +195,7 @@ public List<WaitingUserResponse> getAllWaitingUserDetails(Long storeId) {
195195
// 완료 or 취소 처리된 대기 리스트 조회
196196
@Transactional(readOnly = true)
197197
public List<WaitingUserResponse> getCompletedWaitingUserDetails(Long storeId, MemberDetails memberDetails) {
198-
User user = getUser(memberDetails);
198+
User user = memberDetails.getUser();
199199
validateViewAuthorization(user, storeId);
200200
List<Reservation> reservations = findTodayWaiting(storeId);
201201

@@ -214,7 +214,7 @@ public List<WaitingUserResponse> getCompletedWaitingUserDetails(Long storeId, Me
214214
public EntryStatusResponseDto processEntryStatus(Long storeId, String userId, MemberDetails member,
215215
ReservationStatus newStatus) {
216216

217-
User user = getUser(member);
217+
User user = member.getUser();
218218
validateUpdateAuthorization(user, storeId);
219219

220220
if (userId == null || userId.isBlank()) {
@@ -364,7 +364,7 @@ public EntryStatusResponseDto processEntryStatus(Long storeId, String userId, Me
364364
public EntryStatusResponseDto processEntryStatusByReservationNumber(Long storeId, String reservationNumber,
365365
MemberDetails member, ReservationStatus newStatus) {
366366

367-
User user = getUser(member);
367+
User user = member.getUser();
368368
validateUpdateAuthorization(user, storeId);
369369

370370
if (reservationNumber == null || reservationNumber.isBlank()) {
@@ -542,11 +542,11 @@ private void validateUpdateAuthorization(User user, Long storeId) {
542542
}
543543
}
544544

545-
private User getUser(MemberDetails memberDetails) {
546-
if (memberDetails == null) {
547-
throw new ReservationViewUnauthorizedException();
548-
}
549-
return userRepository.findById(memberDetails.getId()).orElseThrow(UserNotFoundException::new);
550-
}
545+
// private User getUser(MemberDetails memberDetails) {
546+
// if (memberDetails == null) {
547+
// throw new ReservationViewUnauthorizedException();
548+
// }
549+
// return userRepository.findById(memberDetails.getId()).orElseThrow(UserNotFoundException::new);
550+
// }
551551
}
552552

nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/store/service/StoreServiceImpl.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ public StoreCreateResponse createStore(StoreCreateRequest request) {
5959
@Transactional(readOnly = true)
6060
public StoreDetailReadResponse getStoreByStoreId(Long storeId, MemberDetails memberDetails) {
6161
if (storeId == null) throw new StoreParamEmptyException();
62-
User user = getUser(memberDetails);
62+
User user = memberDetails.getUser();
6363
validateViewAuthorization(user, storeId);
6464

6565
Store store = storeRepository.findByStoreIdAndDeletedFalse(storeId)
@@ -82,7 +82,7 @@ public StoreDetailReadResponse getStoreByStoreId(Long storeId, MemberDetails mem
8282
public StoreReadDto updateStore(Long storeId, StoreUpdateRequest request, MemberDetails memberDetails) {
8383
if (storeId == null || request == null) throw new StoreParamEmptyException();
8484

85-
User user = getUser(memberDetails);
85+
User user = memberDetails.getUser();
8686
validateUpdateAuthorization(user, storeId);
8787

8888
Store store = storeRepository.findByStoreIdAndDeletedFalse(storeId)
@@ -115,7 +115,7 @@ public String deleteStore(Long storeId, MemberDetails memberDetails) {
115115
throw new StoreParamEmptyException();
116116
}
117117

118-
User user = getUser(memberDetails);
118+
User user = memberDetails.getUser();
119119
validateUpdateAuthorization(user, storeId);
120120

121121
Store store = storeRepository.findByStoreIdAndDeletedFalse(storeId)
@@ -150,10 +150,10 @@ private void validateUpdateAuthorization(User user, Long storeId) {
150150
}
151151
}
152152

153-
private User getUser(MemberDetails memberDetails) {
154-
if (memberDetails == null) {
155-
throw new StoreViewUnauthorizedException();
156-
}
157-
return userRepository.findById(memberDetails.getId()).orElseThrow(UserNotFoundException::new);
158-
}
153+
// private User getUser(MemberDetails memberDetails) {
154+
// if (memberDetails == null) {
155+
// throw new StoreViewUnauthorizedException();
156+
// }
157+
// return userRepository.findById(memberDetails.getId()).orElseThrow(UserNotFoundException::new);
158+
// }
159159
}

nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/storePayment/controller/StorePaymentController.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,18 @@
55
import org.springframework.http.HttpStatus;
66
import org.springframework.http.ResponseEntity;
77
import org.springframework.security.core.annotation.AuthenticationPrincipal;
8-
import org.springframework.web.bind.annotation.DeleteMapping;
98
import org.springframework.web.bind.annotation.GetMapping;
109
import org.springframework.web.bind.annotation.PatchMapping;
1110
import org.springframework.web.bind.annotation.PostMapping;
1211
import org.springframework.web.bind.annotation.RequestBody;
1312
import org.springframework.web.bind.annotation.RequestMapping;
1413
import org.springframework.web.bind.annotation.RestController;
1514

15+
import com.nowait.applicationadmin.storePayment.service.StorePaymentService;
1616
import com.nowait.applicationadmin.storepayment.dto.StorePaymentCreateRequest;
1717
import com.nowait.applicationadmin.storepayment.dto.StorePaymentCreateResponse;
1818
import com.nowait.applicationadmin.storepayment.dto.StorePaymentReadDto;
1919
import com.nowait.applicationadmin.storepayment.dto.StorePaymentUpdateRequest;
20-
import com.nowait.applicationadmin.storepayment.service.StorePaymentService;
2120
import com.nowait.common.api.ApiUtils;
2221
import com.nowait.domaincorerdb.user.entity.MemberDetails;
2322

nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/storePayment/service/StorePaymentService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.nowait.applicationadmin.storepayment.service;
1+
package com.nowait.applicationadmin.storePayment.service;
22

33
import java.util.Optional;
44

0 commit comments

Comments
 (0)