From 16574f9a7b6c70d134fa154ee2c63928a64cbaa0 Mon Sep 17 00:00:00 2001 From: yongho9064 Date: Tue, 14 Oct 2025 10:18:09 +0900 Subject: [PATCH] =?UTF-8?q?feat[home]:=20=ED=8C=90=EB=A1=80=20=EB=B2=95?= =?UTF-8?q?=EB=A0=B9=20=EB=93=B1=EB=93=B1=20=EA=B0=AF=EC=88=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../home/controller/HomeController.java | 29 ++++++++++++++ .../ai/lawyer/domain/home/dto/FullData.java | 26 +++++++++++++ .../domain/home/service/HomeService.java | 39 +++++++++++++++++++ .../global/security/SecurityConfig.java | 1 + .../global/springDoc/SpringDocConfig.java | 12 +++++- 5 files changed, 106 insertions(+), 1 deletion(-) create mode 100644 backend/src/main/java/com/ai/lawyer/domain/home/controller/HomeController.java create mode 100644 backend/src/main/java/com/ai/lawyer/domain/home/dto/FullData.java create mode 100644 backend/src/main/java/com/ai/lawyer/domain/home/service/HomeService.java diff --git a/backend/src/main/java/com/ai/lawyer/domain/home/controller/HomeController.java b/backend/src/main/java/com/ai/lawyer/domain/home/controller/HomeController.java new file mode 100644 index 00000000..ad9b89d3 --- /dev/null +++ b/backend/src/main/java/com/ai/lawyer/domain/home/controller/HomeController.java @@ -0,0 +1,29 @@ +package com.ai.lawyer.domain.home.controller; + +import com.ai.lawyer.domain.home.dto.FullData; +import com.ai.lawyer.domain.home.service.HomeService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@Slf4j +@RestController +@RequestMapping("/api/home") +@RequiredArgsConstructor +@Tag(name = "홈", description = "홈 화면 API") +public class HomeController { + + private final HomeService homeService; + + @Operation(summary = "데이터 수", description = "판례 법령 채팅 투표 수 조회") + @PostMapping("/data-count") + public ResponseEntity getDataCount() { + return ResponseEntity.ok(homeService.getDataCount()); + } + +} diff --git a/backend/src/main/java/com/ai/lawyer/domain/home/dto/FullData.java b/backend/src/main/java/com/ai/lawyer/domain/home/dto/FullData.java new file mode 100644 index 00000000..d7ed37a1 --- /dev/null +++ b/backend/src/main/java/com/ai/lawyer/domain/home/dto/FullData.java @@ -0,0 +1,26 @@ +package com.ai.lawyer.domain.home.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; + +@Getter +@Setter +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Schema(description = "판례수 법령수 채팅수 투표수 DTO") +public class FullData { + + @Schema(description = "판례 수", example = "1000") + private Long precedentCount; + + @Schema(description = "법령 수", example = "500") + private Long lawCount; + + @Schema(description = "채팅 수", example = "2000") + private Long chatCount; + + @Schema(description = "투표 수", example = "300") + private Long voteCount; + +} diff --git a/backend/src/main/java/com/ai/lawyer/domain/home/service/HomeService.java b/backend/src/main/java/com/ai/lawyer/domain/home/service/HomeService.java new file mode 100644 index 00000000..c31a4011 --- /dev/null +++ b/backend/src/main/java/com/ai/lawyer/domain/home/service/HomeService.java @@ -0,0 +1,39 @@ +package com.ai.lawyer.domain.home.service; + +import com.ai.lawyer.domain.chatbot.repository.ChatRepository; +import com.ai.lawyer.domain.home.dto.FullData; +import com.ai.lawyer.domain.law.repository.LawRepository; +import com.ai.lawyer.domain.poll.repository.PollRepository; +import com.ai.lawyer.domain.precedent.repository.PrecedentRepository; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +@Slf4j +@Service +@RequiredArgsConstructor +public class HomeService { + + private final PrecedentRepository precedentRepository; + private final LawRepository lawRepository; + private final ChatRepository chatRepository; + private final PollRepository pollRepository; + + + public FullData getDataCount() { + + Long precedentCount = precedentRepository.count(); + Long lawCount = lawRepository.count(); + Long chatCount = chatRepository.count(); + Long voteCount = pollRepository.count(); + + return FullData.builder() + .precedentCount(precedentCount) + .lawCount(lawCount) + .chatCount(chatCount) + .voteCount(voteCount) + .build(); + + } + +} diff --git a/backend/src/main/java/com/ai/lawyer/global/security/SecurityConfig.java b/backend/src/main/java/com/ai/lawyer/global/security/SecurityConfig.java index e9650a13..e1e06724 100644 --- a/backend/src/main/java/com/ai/lawyer/global/security/SecurityConfig.java +++ b/backend/src/main/java/com/ai/lawyer/global/security/SecurityConfig.java @@ -57,6 +57,7 @@ public class SecurityConfig { "/api/law/**", // 법령 (공개) "/api/law-word/**", // 법률 용어 (공개) "/api/chat/**", // 챗봇 (공개) + "/api/home/**", // 홈 (공개) "/h2-console/**", // H2 콘솔 (개발용) "/actuator/health", "/actuator/health/**", "/actuator/info", // Spring Actuator "/api/actuator/health", "/api/actuator/health/**", "/api/actuator/info" diff --git a/backend/src/main/java/com/ai/lawyer/global/springDoc/SpringDocConfig.java b/backend/src/main/java/com/ai/lawyer/global/springDoc/SpringDocConfig.java index 52b9a768..48a9033a 100644 --- a/backend/src/main/java/com/ai/lawyer/global/springDoc/SpringDocConfig.java +++ b/backend/src/main/java/com/ai/lawyer/global/springDoc/SpringDocConfig.java @@ -68,7 +68,8 @@ public GroupedOpenApi allApi() { .build(); } - @Bean GroupedOpenApi chatApi() { + @Bean + GroupedOpenApi chatApi() { return GroupedOpenApi.builder() .group("챗봇과 관련된 API") .pathsToMatch("/api/chat/**") @@ -76,6 +77,15 @@ public GroupedOpenApi allApi() { .build(); } + @Bean + GroupedOpenApi homeApi() { + return GroupedOpenApi.builder() + .group("Home API") + .pathsToMatch("/api/home/**") + .packagesToScan("com.ai.lawyer.domain.home.controller") + .build(); + } + @Bean public OpenAPI customOpenAPI() { return new OpenAPI()