Skip to content

Commit e624bfb

Browse files
authored
Merge pull request #106 from GTable/feature/#103-Store-SalesSum
Feat : Admin 통계 기능 추가
2 parents b1c6485 + e745550 commit e624bfb

File tree

22 files changed

+573
-63
lines changed

22 files changed

+573
-63
lines changed

nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/order/controller/OrderController.java

Lines changed: 62 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
import com.nowait.applicationadmin.order.dto.OrderStatusUpdateResponseDto;
1818
import com.nowait.applicationadmin.order.service.OrderService;
1919
import com.nowait.common.api.ApiUtils;
20+
import com.nowait.domaincorerdb.order.dto.OrderSalesSumDetail;
21+
import com.nowait.domaincorerdb.order.dto.TopSalesStoresDetail;
2022
import com.nowait.domaincorerdb.user.entity.MemberDetails;
2123

2224
import io.swagger.v3.oas.annotations.Operation;
@@ -31,36 +33,66 @@
3133
@RequiredArgsConstructor
3234
public class OrderController {
3335

34-
private final OrderService orderService;
36+
private final OrderService orderService;
3537

36-
@GetMapping("/{storeId}")
37-
@Operation(summary = "주점별 주문리스트 조회", description = "특정 주점에 대한 예약리스트 조회")
38-
@ApiResponse(responseCode = "200", description = "주리스트 조회")
39-
public ResponseEntity<?> getOrderListByStoreId(@PathVariable Long storeId,
40-
@AuthenticationPrincipal MemberDetails memberDetails) {
41-
List<OrderResponseDto> response = orderService.findAllOrders(storeId,memberDetails);
42-
return ResponseEntity
43-
.status(HttpStatus.OK)
44-
.body(
45-
ApiUtils.success(
46-
response
47-
)
48-
);
49-
}
38+
@GetMapping("/{storeId}")
39+
@Operation(summary = "주점별 주문리스트 조회", description = "특정 주점에 대한 예약리스트 조회")
40+
@ApiResponse(responseCode = "200", description = "주리스트 조회")
41+
public ResponseEntity<?> getOrderListByStoreId(@PathVariable Long storeId,
42+
@AuthenticationPrincipal MemberDetails memberDetails) {
43+
List<OrderResponseDto> response = orderService.findAllOrders(storeId, memberDetails);
44+
return ResponseEntity
45+
.status(HttpStatus.OK)
46+
.body(
47+
ApiUtils.success(
48+
response
49+
)
50+
);
51+
}
5052

51-
@PatchMapping("/status/{orderId}")
52-
@Operation(summary = "주문 상태 변경", description = "특정 주문의 상태를 변경.")
53-
@ApiResponse(responseCode = "200", description = "주문 상태 변경 성공")
54-
@ApiResponse(responseCode = "400", description = "주문을 찾을 수 없음")
55-
public ResponseEntity<?> updateOrderStatus(
56-
@PathVariable Long orderId,
57-
@RequestBody@Valid OrderStatusUpdateRequestDto requestDto,
58-
@AuthenticationPrincipal MemberDetails memberDetails
59-
) {
60-
OrderStatusUpdateResponseDto response = orderService.updateOrderStatus(
61-
orderId,requestDto.getOrderStatus(),memberDetails);
62-
return ResponseEntity
63-
.status(HttpStatus.OK)
64-
.body(ApiUtils.success(response));
65-
}
53+
@PatchMapping("/status/{orderId}")
54+
@Operation(summary = "주문 상태 변경", description = "특정 주문의 상태를 변경.")
55+
@ApiResponse(responseCode = "200", description = "주문 상태 변경 성공")
56+
@ApiResponse(responseCode = "400", description = "주문을 찾을 수 없음")
57+
public ResponseEntity<?> updateOrderStatus(
58+
@PathVariable Long orderId,
59+
@RequestBody @Valid OrderStatusUpdateRequestDto requestDto,
60+
@AuthenticationPrincipal MemberDetails memberDetails
61+
) {
62+
OrderStatusUpdateResponseDto response = orderService.updateOrderStatus(
63+
orderId, requestDto.getOrderStatus(), memberDetails);
64+
return ResponseEntity
65+
.status(HttpStatus.OK)
66+
.body(ApiUtils.success(response));
67+
}
68+
69+
@GetMapping("/sales")
70+
@Operation(summary = "오늘의 매출 조회", description = "오늘의 매출을 조회합니다.")
71+
@ApiResponse(responseCode = "200", description = "오늘의 매출 조회 성공")
72+
public ResponseEntity<?> getTodaySales(@AuthenticationPrincipal MemberDetails memberDetails) {
73+
OrderSalesSumDetail sales = orderService.getSaleSumByStoreId(memberDetails);
74+
75+
return ResponseEntity
76+
.status(HttpStatus.OK)
77+
.body(
78+
ApiUtils.success(
79+
sales
80+
)
81+
);
82+
}
83+
84+
@GetMapping("/top-sales")
85+
@Operation(summary = "오늘의 매출 상위 5개 주점 조회", description = "오늘의 매출이 가장 높은 상위 5개 주점을 조회합니다.")
86+
@ApiResponse(responseCode = "200", description = "오늘의 매출 상위 5개 주점 조회 성공")
87+
public ResponseEntity<?> getTopSalesStores(@AuthenticationPrincipal MemberDetails memberDetails) {
88+
List<TopSalesStoresDetail> topSalesStoresDetail = orderService.getTop5StoresBySalesToday(memberDetails);
89+
90+
return ResponseEntity
91+
.status(HttpStatus.OK)
92+
.body(
93+
ApiUtils.success(
94+
topSalesStoresDetail
95+
)
96+
);
97+
}
6698
}

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

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
import com.nowait.applicationadmin.order.dto.OrderResponseDto;
1010
import com.nowait.applicationadmin.order.dto.OrderStatusUpdateResponseDto;
1111
import com.nowait.common.enums.Role;
12+
import com.nowait.domaincorerdb.order.dto.OrderSalesSumDetail;
13+
import com.nowait.domaincorerdb.order.dto.TopSalesStoresDetail;
1214
import com.nowait.domaincorerdb.order.entity.OrderStatus;
1315
import com.nowait.domaincorerdb.order.entity.UserOrder;
1416
import com.nowait.domaincorerdb.order.exception.OrderNotFoundException;
@@ -33,27 +35,50 @@ public class OrderService {
3335

3436
@Transactional(readOnly = true)
3537
public List<OrderResponseDto> findAllOrders(Long storeId, MemberDetails memberDetails) {
36-
User user = userRepository.findById(memberDetails.getId()).orElseThrow(UserNotFoundException::new);
37-
storeRepository.findByStoreIdAndDeletedFalse(storeId)
38-
.orElseThrow(StoreNotFoundException::new);
38+
User user = userRepository.findById(memberDetails.getId()).orElseThrow(UserNotFoundException::new);
39+
storeRepository.findByStoreIdAndDeletedFalse(storeId).orElseThrow(StoreNotFoundException::new);
3940
if (!Role.SUPER_ADMIN.equals(user.getRole()) && !user.getStoreId().equals(storeId)) {
4041
throw new OrderViewUnauthorizedException();
4142
}
42-
return orderRepository.findAllByStore_StoreId(storeId).stream()
43+
return orderRepository.findAllByStore_StoreId(storeId)
44+
.stream()
4345
.map(OrderResponseDto::fromEntity)
4446
.collect(Collectors.toList());
4547
}
4648

4749
@Transactional
4850
public OrderStatusUpdateResponseDto updateOrderStatus(Long orderId, OrderStatus newStatus,
4951
MemberDetails memberDetails) {
50-
User user = userRepository.findById(memberDetails.getId()).orElseThrow(UserNotFoundException::new);
51-
UserOrder userOrder = orderRepository.findById(orderId)
52-
.orElseThrow(OrderNotFoundException::new);
52+
User user = userRepository.findById(memberDetails.getId()).orElseThrow(UserNotFoundException::new);
53+
UserOrder userOrder = orderRepository.findById(orderId).orElseThrow(OrderNotFoundException::new);
5354
if (!Role.SUPER_ADMIN.equals(user.getRole()) && !user.getStoreId().equals(userOrder.getStore().getStoreId())) {
5455
throw new OrderUpdateUnauthorizedException();
5556
}
5657
userOrder.updateStatus(newStatus);
5758
return OrderStatusUpdateResponseDto.fromEntity(userOrder);
5859
}
60+
61+
@Transactional(readOnly = true)
62+
public OrderSalesSumDetail getSaleSumByStoreId(MemberDetails memberDetails) {
63+
User user = userRepository.findById(memberDetails.getId()).orElseThrow(UserNotFoundException::new);
64+
Long storeId = user.getStoreId();
65+
66+
if (!Role.SUPER_ADMIN.equals(user.getRole()) && !user.getStoreId().equals(storeId)) {
67+
throw new OrderViewUnauthorizedException();
68+
}
69+
70+
return orderRepository.findSalesSumByStoreId(storeId);
71+
}
72+
73+
@Transactional(readOnly = true)
74+
public List<TopSalesStoresDetail> getTop5StoresBySalesToday(MemberDetails memberDetails) {
75+
User user = userRepository.findById(memberDetails.getId()).orElseThrow(UserNotFoundException::new);
76+
Long storeId = user.getStoreId();
77+
78+
if (!Role.SUPER_ADMIN.equals(user.getRole()) && !user.getStoreId().equals(storeId)) {
79+
throw new OrderViewUnauthorizedException();
80+
}
81+
82+
return orderRepository.getTop4PlusMine(storeId);
83+
}
5984
}

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.nowait.applicationadmin.storePayment.controller;
1+
package com.nowait.applicationadmin.storepayment.controller;
22

33
import org.springframework.http.HttpStatus;
44
import org.springframework.http.ResponseEntity;
@@ -10,10 +10,10 @@
1010
import org.springframework.web.bind.annotation.RequestMapping;
1111
import org.springframework.web.bind.annotation.RestController;
1212

13-
import com.nowait.applicationadmin.storePayment.dto.StorePaymentCreateRequest;
14-
import com.nowait.applicationadmin.storePayment.dto.StorePaymentCreateResponse;
15-
import com.nowait.applicationadmin.storePayment.dto.StorePaymentUpdateRequest;
16-
import com.nowait.applicationadmin.storePayment.service.StorePaymentService;
13+
import com.nowait.applicationadmin.storepayment.dto.StorePaymentCreateRequest;
14+
import com.nowait.applicationadmin.storepayment.dto.StorePaymentCreateResponse;
15+
import com.nowait.applicationadmin.storepayment.dto.StorePaymentUpdateRequest;
16+
import com.nowait.applicationadmin.storepayment.service.StorePaymentService;
1717
import com.nowait.common.api.ApiUtils;
1818
import com.nowait.domaincorerdb.user.entity.MemberDetails;
1919

nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/storePayment/dto/StorePaymentCreateRequest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
package com.nowait.applicationadmin.storePayment.dto;
1+
package com.nowait.applicationadmin.storepayment.dto;
2+
23

34
import com.nowait.domaincorerdb.storepayment.entity.StorePayment;
45

nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/storePayment/dto/StorePaymentCreateResponse.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.dto;
1+
package com.nowait.applicationadmin.storepayment.dto;
22

33
import java.time.LocalDateTime;
44

nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/storePayment/dto/StorePaymentReadDto.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.dto;
1+
package com.nowait.applicationadmin.storepayment.dto;
22

33
import java.time.LocalDateTime;
44

nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/storePayment/dto/StorePaymentUpdateRequest.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.dto;
1+
package com.nowait.applicationadmin.storepayment.dto;
22

33
import lombok.AllArgsConstructor;
44
import lombok.Builder;

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
package com.nowait.applicationadmin.storePayment.service;
1+
package com.nowait.applicationadmin.storepayment.service;
22

3-
import com.nowait.applicationadmin.storePayment.dto.StorePaymentCreateRequest;
4-
import com.nowait.applicationadmin.storePayment.dto.StorePaymentCreateResponse;
5-
import com.nowait.applicationadmin.storePayment.dto.StorePaymentReadDto;
6-
import com.nowait.applicationadmin.storePayment.dto.StorePaymentUpdateRequest;
3+
import com.nowait.applicationadmin.storepayment.dto.StorePaymentCreateRequest;
4+
import com.nowait.applicationadmin.storepayment.dto.StorePaymentCreateResponse;
5+
import com.nowait.applicationadmin.storepayment.dto.StorePaymentReadDto;
6+
import com.nowait.applicationadmin.storepayment.dto.StorePaymentUpdateRequest;
77
import com.nowait.domaincorerdb.user.entity.MemberDetails;
88

99
public interface StorePaymentService {

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
package com.nowait.applicationadmin.storePayment.service;
1+
package com.nowait.applicationadmin.storepayment.service;
22

33
import org.springframework.stereotype.Service;
44
import org.springframework.transaction.annotation.Transactional;
55

6-
import com.nowait.applicationadmin.storePayment.dto.StorePaymentCreateRequest;
7-
import com.nowait.applicationadmin.storePayment.dto.StorePaymentCreateResponse;
8-
import com.nowait.applicationadmin.storePayment.dto.StorePaymentReadDto;
9-
import com.nowait.applicationadmin.storePayment.dto.StorePaymentUpdateRequest;
6+
import com.nowait.applicationadmin.storepayment.dto.StorePaymentCreateRequest;
7+
import com.nowait.applicationadmin.storepayment.dto.StorePaymentCreateResponse;
8+
import com.nowait.applicationadmin.storepayment.dto.StorePaymentReadDto;
9+
import com.nowait.applicationadmin.storepayment.dto.StorePaymentUpdateRequest;
1010
import com.nowait.common.enums.Role;
1111
import com.nowait.domaincorerdb.storepayment.entity.StorePayment;
1212
import com.nowait.domaincorerdb.storepayment.exception.StorePaymentAlreadyExistsException;

nowait-common/src/main/java/com/nowait/common/api/ApiResult.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,5 @@ public T getResponse() {
1919
return response;
2020
}
2121

22-
public ApiError getError() {
23-
return error;
24-
}
22+
// public ApiError getError() { return success ? null : error; }
2523
}

0 commit comments

Comments
 (0)