Skip to content

Commit 253940a

Browse files
Merge pull request #413 from Podo-Store/develop
[FEAT] 어드민 통계
2 parents 1029990 + 709b908 commit 253940a

File tree

4 files changed

+87
-4
lines changed

4 files changed

+87
-4
lines changed

src/main/java/PodoeMarket/podoemarket/admin/controller/AdminController.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import PodoeMarket.podoemarket.admin.dto.request.UpdateTitleRequestDTO;
66
import PodoeMarket.podoemarket.admin.dto.request.UpdateWriterRequestDTO;
77
import PodoeMarket.podoemarket.admin.dto.response.OrderManagementResponseDTO;
8+
import PodoeMarket.podoemarket.admin.dto.response.StatisticsResponseDTO;
89
import PodoeMarket.podoemarket.admin.service.AdminService;
910
import PodoeMarket.podoemarket.admin.dto.response.ProductManagementResponseDTO;
1011
import PodoeMarket.podoemarket.common.entity.OrdersEntity;
@@ -189,4 +190,18 @@ public ResponseEntity<?> updateWriter(@AuthenticationPrincipal UserEntity userIn
189190
return ResponseEntity.badRequest().body(resDTO);
190191
}
191192
}
193+
194+
@GetMapping("/statistics")
195+
public ResponseEntity<?> getStatistics(@AuthenticationPrincipal UserEntity userInfo) {
196+
try {
197+
adminService.checkAuth(userInfo);
198+
199+
final StatisticsResponseDTO resDTO = adminService.getStatistics();
200+
201+
return ResponseEntity.ok().body(resDTO);
202+
} catch(Exception e) {
203+
ResponseDTO resDTO = ResponseDTO.builder().error(e.getMessage()).build();
204+
return ResponseEntity.badRequest().body(resDTO);
205+
}
206+
}
192207
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package PodoeMarket.podoemarket.admin.dto.response;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Builder;
5+
import lombok.Data;
6+
import lombok.NoArgsConstructor;
7+
8+
@Data
9+
@Builder
10+
@NoArgsConstructor
11+
@AllArgsConstructor
12+
public class StatisticsResponseDTO {
13+
private Long userCnt;
14+
private Long scriptCnt;
15+
private Long viewCnt;
16+
private Long reviewCnt;
17+
}

src/main/java/PodoeMarket/podoemarket/admin/service/AdminService.java

Lines changed: 51 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,15 @@
33
import PodoeMarket.podoemarket.admin.dto.request.PlayTypeRequestDTO;
44
import PodoeMarket.podoemarket.admin.dto.response.OrderManagementResponseDTO;
55
import PodoeMarket.podoemarket.admin.dto.response.ProductManagementResponseDTO;
6+
import PodoeMarket.podoemarket.admin.dto.response.StatisticsResponseDTO;
67
import PodoeMarket.podoemarket.common.entity.OrderItemEntity;
78
import PodoeMarket.podoemarket.common.entity.OrdersEntity;
89
import PodoeMarket.podoemarket.common.entity.ProductEntity;
910
import PodoeMarket.podoemarket.common.entity.UserEntity;
1011
import PodoeMarket.podoemarket.common.entity.type.OrderStatus;
1112
import PodoeMarket.podoemarket.common.entity.type.ProductStatus;
1213
import PodoeMarket.podoemarket.common.entity.type.StageType;
13-
import PodoeMarket.podoemarket.common.repository.OrderItemRepository;
14-
import PodoeMarket.podoemarket.common.repository.OrderRepository;
15-
import PodoeMarket.podoemarket.common.repository.ProductRepository;
14+
import PodoeMarket.podoemarket.common.repository.*;
1615
import PodoeMarket.podoemarket.service.MailSendService;
1716
import com.amazonaws.services.s3.AmazonS3;
1817
import com.amazonaws.services.s3.model.AmazonS3Exception;
@@ -45,6 +44,8 @@ public class AdminService {
4544
private final ProductRepository productRepo;
4645
private final OrderRepository orderRepo;
4746
private final OrderItemRepository orderItemRepo;
47+
private final UserRepository userRepo;
48+
private final ReviewRepository reviewRepo;
4849
private final AmazonS3 amazonS3;
4950
private final MailSendService mailSendService;
5051

@@ -302,4 +303,51 @@ public void updateWriter(UUID productId, String writer) {
302303
throw new RuntimeException("상품 제목 업데이트 실패", e);
303304
}
304305
}
306+
307+
public StatisticsResponseDTO getStatistics() {
308+
try {
309+
return StatisticsResponseDTO.builder()
310+
.userCnt(getUserCount())
311+
.scriptCnt(getScriptCount())
312+
.viewCnt(getViewCount())
313+
.reviewCnt(getReviewCount())
314+
.build();
315+
} catch (Exception e) {
316+
throw new RuntimeException("통계 조회 실패", e);
317+
}
318+
}
319+
320+
// ================= private method =================
321+
322+
private Long getUserCount() {
323+
try {
324+
return userRepo.count();
325+
} catch (Exception e) {
326+
throw new RuntimeException("유저 카운트 조회 실패", e);
327+
}
328+
}
329+
330+
private Long getScriptCount() {
331+
try {
332+
return productRepo.count();
333+
} catch (Exception e) {
334+
throw new RuntimeException("작품 카운트 조회 실패", e);
335+
}
336+
}
337+
338+
private Long getViewCount() {
339+
try {
340+
return productRepo.sumViewCount();
341+
} catch (Exception e) {
342+
throw new RuntimeException("조회수 카운트 조회 실패", e);
343+
}
344+
}
345+
346+
private Long getReviewCount() {
347+
try {
348+
return reviewRepo.count();
349+
} catch (Exception e) {
350+
throw new RuntimeException("후기 카운트 조회 실패", e);
351+
}
352+
}
305353
}

src/main/java/PodoeMarket/podoemarket/common/repository/ProductRepository.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,9 @@ List<ProductEntity> findAllValidPlays(
5353
void decrementLikeCount(@Param("productId") UUID productId);
5454

5555
@Modifying
56-
@Query("update ProductEntity p set p.viewCount = COALESCE(p.viewCount,0) + :delta where p.id = :id")
56+
@Query("UPDATE ProductEntity p SET p.viewCount = COALESCE(p.viewCount,0) + :delta WHERE p.id = :id")
5757
void incrementViewCount(@Param("id") UUID id, @Param("delta") long delta);
58+
59+
@Query("SELECT SUM(p.viewCount) FROM ProductEntity p")
60+
long sumViewCount();
5861
}

0 commit comments

Comments
 (0)