From 67bd0d825c03147092d157cc21f1440d055e7c73 Mon Sep 17 00:00:00 2001 From: hgg Date: Sun, 6 Apr 2025 15:53:02 +0900 Subject: [PATCH] =?UTF-8?q?=EC=B0=A8=ED=8A=B8=20=EC=BB=A8=ED=8A=B8?= =?UTF-8?q?=EB=A1=A4=EB=9F=AC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ChartController.java | 108 +++++++++--------- .../controller/ChartDataController.java | 7 +- .../esginsightboard/dto/ChartDataDto.java | 10 +- .../esginsightboard/dto/EsgChartDataDto.java | 1 + .../repository/GriDataItemRepository.java | 24 +--- .../service/ChartDataService.java | 2 +- 6 files changed, 63 insertions(+), 89 deletions(-) diff --git a/src/main/java/dev/gyeoul/esginsightboard/controller/ChartController.java b/src/main/java/dev/gyeoul/esginsightboard/controller/ChartController.java index a3dcfb1..c7cb104 100644 --- a/src/main/java/dev/gyeoul/esginsightboard/controller/ChartController.java +++ b/src/main/java/dev/gyeoul/esginsightboard/controller/ChartController.java @@ -1,55 +1,55 @@ -package dev.gyeoul.esginsightboard.controller; - -import dev.gyeoul.esginsightboard.dto.EsgChartDataDto; -import dev.gyeoul.esginsightboard.dto.UserDto; -import dev.gyeoul.esginsightboard.service.ChartService; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.validation.Valid; -import lombok.RequiredArgsConstructor; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; - -@RestController -@RequestMapping("/api/charts") // 기본 URL: /api/charts -@RequiredArgsConstructor -public class ChartController { - - private final ChartService chartService; - - /** - * ESG 차트 데이터를 저장하는 POST API - * URL: /api/charts - * - * @param chartDto - 클라이언트에서 전송된 차트 데이터 - * @param request - 인증 정보를 담고 있는 HttpServletRequest 객체 - * @return ResponseEntity - 저장 성공 또는 실패 메시지 반환 - */ - @PostMapping - public ResponseEntity saveChart( - // JSON 요청 본문울 DTO로 매핑하고 유효성 검사 수행 - @Valid @RequestBody EsgChartDataDto chartDto, - HttpServletRequest request) { - - // 인증 필터 또는 인터셉터에서 저장한 사용자 정보를 request에서 추출 - UserDto user = (UserDto) request.getAttribute("user"); - - // 인증되지 않은 사용자일 경우, 401 Unauthorized 응답 반환 - if (user == null) { - return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("인증된 사용자가 아닙니다."); - } - - // 인증된 사용자와 차트 데이터를 서비스에 전달하여 저장 처리 - chartService.saveChartData(chartDto, user); - - // 저장 성공 시 200 ok 응답 반환 - return ResponseEntity.ok("차트 데이터가 성공적으로 저장되었습니다."); - } - -// @GetMapping("/{companyId}/{indicatorCode}") -// public ResponseEntity> getChartData( -// @PathVariable Long companyId, -// @PathVariable String indicatorCode) { -// return ResponseEntity.ok(chartService.getChartData(companyId, indicatorCode)); +//package dev.gyeoul.esginsightboard.controller; +// +//import dev.gyeoul.esginsightboard.dto.EsgChartDataDto; +//import dev.gyeoul.esginsightboard.dto.UserDto; +//import dev.gyeoul.esginsightboard.service.ChartService; +//import jakarta.servlet.http.HttpServletRequest; +//import jakarta.validation.Valid; +//import lombok.RequiredArgsConstructor; +//import org.springframework.http.HttpStatus; +//import org.springframework.http.ResponseEntity; +//import org.springframework.web.bind.annotation.*; +// +//@RestController +//@RequestMapping("/api/charts") // 기본 URL: /api/charts +//@RequiredArgsConstructor +//public class ChartController { +// +// private final ChartService chartService; +// +// /** +// * ESG 차트 데이터를 저장하는 POST API +// * URL: /api/charts +// * +// * @param chartDto - 클라이언트에서 전송된 차트 데이터 +// * @param request - 인증 정보를 담고 있는 HttpServletRequest 객체 +// * @return ResponseEntity - 저장 성공 또는 실패 메시지 반환 +// */ +// @PostMapping +// public ResponseEntity saveChart( +// // JSON 요청 본문울 DTO로 매핑하고 유효성 검사 수행 +// @Valid @RequestBody EsgChartDataDto chartDto, +// HttpServletRequest request) { +// +// // 인증 필터 또는 인터셉터에서 저장한 사용자 정보를 request에서 추출 +// UserDto user = (UserDto) request.getAttribute("user"); +// +// // 인증되지 않은 사용자일 경우, 401 Unauthorized 응답 반환 +// if (user == null) { +// return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("인증된 사용자가 아닙니다."); +// } +// +// // 인증된 사용자와 차트 데이터를 서비스에 전달하여 저장 처리 +// chartService.saveChartData(chartDto, user); +// +// // 저장 성공 시 200 ok 응답 반환 +// return ResponseEntity.ok("차트 데이터가 성공적으로 저장되었습니다."); // } -} +// +//// @GetMapping("/{companyId}/{indicatorCode}") +//// public ResponseEntity> getChartData( +//// @PathVariable Long companyId, +//// @PathVariable String indicatorCode) { +//// return ResponseEntity.ok(chartService.getChartData(companyId, indicatorCode)); +//// } +//} diff --git a/src/main/java/dev/gyeoul/esginsightboard/controller/ChartDataController.java b/src/main/java/dev/gyeoul/esginsightboard/controller/ChartDataController.java index 45b7b02..0e0538e 100644 --- a/src/main/java/dev/gyeoul/esginsightboard/controller/ChartDataController.java +++ b/src/main/java/dev/gyeoul/esginsightboard/controller/ChartDataController.java @@ -6,6 +6,7 @@ import dev.gyeoul.esginsightboard.service.ChartDataService; import dev.gyeoul.esginsightboard.repository.UserRepository; import jakarta.servlet.http.HttpServletRequest; +import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @@ -22,16 +23,12 @@ public class ChartDataController { // ✅ 현재 로그인한 사용자의 차트 데이터 저장 @PostMapping - public ResponseEntity saveChart(HttpServletRequest request, @RequestBody ChartDataDto dto) { + public ResponseEntity saveChart(HttpServletRequest request, @Valid @RequestBody ChartDataDto dto) { UserDto userDto = (UserDto) request.getAttribute("user"); if (userDto == null) { return ResponseEntity.status(401).build(); } - // ✅ UserRepository를 직접 사용해 User 조회 - User user = userRepository.findById(userDto.getId()) - .orElseThrow(() -> new IllegalArgumentException("User not found with id: " + userDto.getId())); - ChartDataDto savedChart = chartDataService.saveChartData(dto, userDto); // ✅ User 객체 전달 return ResponseEntity.ok(savedChart); } diff --git a/src/main/java/dev/gyeoul/esginsightboard/dto/ChartDataDto.java b/src/main/java/dev/gyeoul/esginsightboard/dto/ChartDataDto.java index 55278f2..a0fb5bc 100644 --- a/src/main/java/dev/gyeoul/esginsightboard/dto/ChartDataDto.java +++ b/src/main/java/dev/gyeoul/esginsightboard/dto/ChartDataDto.java @@ -15,13 +15,12 @@ @Setter @NoArgsConstructor public class ChartDataDto { - private Long userId; // ✅ User 객체 X → userId (Long)만 저장 private String title; private String description; private String category; private String indicator; private Integer chartGrid; - private List> data; + private List> dataSets; private String chartType; private static final ObjectMapper objectMapper = new ObjectMapper(); @@ -29,7 +28,6 @@ public class ChartDataDto { // ✅ 엔티티 → DTO 변환 public static ChartDataDto fromEntity(ChartData chartData) { ChartDataDto dto = new ChartDataDto(); - dto.setUserId(chartData.getUser().getId()); // ✅ User → userId로 변환 dto.setTitle(chartData.getTitle()); dto.setDescription(chartData.getDescription()); dto.setCategory(chartData.getCategory()); @@ -38,9 +36,9 @@ public static ChartDataDto fromEntity(ChartData chartData) { dto.setChartType(chartData.getChartType()); try { - dto.setData(objectMapper.readValue(chartData.getData(), new TypeReference<>() {})); + dto.setDataSets(objectMapper.readValue(chartData.getData(), new TypeReference<>() {})); } catch (Exception e) { - dto.setData(null); + dto.setDataSets(null); } return dto; @@ -50,7 +48,7 @@ public static ChartDataDto fromEntity(ChartData chartData) { public ChartData toEntity(User user) { // ✅ User 객체를 직접 받음 String jsonData; try { - jsonData = objectMapper.writeValueAsString(this.data); + jsonData = objectMapper.writeValueAsString(this.dataSets); } catch (Exception e) { jsonData = "[]"; // Default empty array } diff --git a/src/main/java/dev/gyeoul/esginsightboard/dto/EsgChartDataDto.java b/src/main/java/dev/gyeoul/esginsightboard/dto/EsgChartDataDto.java index c3c4047..ef55e07 100644 --- a/src/main/java/dev/gyeoul/esginsightboard/dto/EsgChartDataDto.java +++ b/src/main/java/dev/gyeoul/esginsightboard/dto/EsgChartDataDto.java @@ -47,6 +47,7 @@ public static EsgChartDataDto fromEntity(EsgInputValue entity) { .build(); } + // 생성자 // public EsgChartDataDto(String category, String chartTitle, String indicatorCode, Map indicatorInputs, Long companyId) { // String trimmedCode = category.trim().toUpperCase(); diff --git a/src/main/java/dev/gyeoul/esginsightboard/repository/GriDataItemRepository.java b/src/main/java/dev/gyeoul/esginsightboard/repository/GriDataItemRepository.java index def37a6..72ed78d 100644 --- a/src/main/java/dev/gyeoul/esginsightboard/repository/GriDataItemRepository.java +++ b/src/main/java/dev/gyeoul/esginsightboard/repository/GriDataItemRepository.java @@ -47,29 +47,7 @@ public interface GriDataItemRepository extends JpaRepository * 사용 예시: repository.findByDisclosureCode("302-1") - 조직 내 에너지 소비량 데이터 조회 */ List findByDisclosureCode(String disclosureCode); - - /** - * 표준 코드와 공시 코드 조합으로 GRI 데이터 항목을 조회 - * - * @param standardCode GRI 표준 코드 (예: GRI 302) - * @param disclosureCode 공시 코드 (예: 302-1) - * @return 조건에 해당하는 데이터 항목 목록 - * - * 사용 예시: repository.findByStandardCodeAndDisclosureCode("GRI 302", "302-1") - */ - List findByStandardCodeAndDisclosureCode(String standardCode, String disclosureCode); - - /** - * 최근 생성된 GRI 데이터 항목을 조회 - * - * @param limit 조회할 항목 수 - * @return 최근 생성된 데이터 항목 목록 - * - * 사용 예시: repository.findRecentItems(10) - 최근 생성된 10개 항목 조회 - */ - @Query(value = "SELECT g FROM GriDataItem g ORDER BY g.createdAt DESC") - List findRecentItems(@Param("limit") int limit); - + /** * 검증 상태별 GRI 데이터 항목을 조회 * diff --git a/src/main/java/dev/gyeoul/esginsightboard/service/ChartDataService.java b/src/main/java/dev/gyeoul/esginsightboard/service/ChartDataService.java index 4226127..6da1ff2 100644 --- a/src/main/java/dev/gyeoul/esginsightboard/service/ChartDataService.java +++ b/src/main/java/dev/gyeoul/esginsightboard/service/ChartDataService.java @@ -116,7 +116,7 @@ public ChartDataDto updateChartData(Long id, ChartDataDto dto, UserDto userDto) dto.getIndicator(), dto.getChartType(), dto.getChartGrid(), - dto.getData().toString() + dto.getDataSets().toString() ); // ✅ 트랜잭션이 끝나면 JPA가 자동으로 변경 사항을 반영 (save() 필요 없음)