Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -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<String> - 저장 성공 또는 실패 메시지 반환
*/
@PostMapping
public ResponseEntity<String> 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<List<EsgInputValueDto>> 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<String> - 저장 성공 또는 실패 메시지 반환
// */
// @PostMapping
// public ResponseEntity<String> 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<List<EsgInputValueDto>> getChartData(
//// @PathVariable Long companyId,
//// @PathVariable String indicatorCode) {
//// return ResponseEntity.ok(chartService.getChartData(companyId, indicatorCode));
//// }
//}
Original file line number Diff line number Diff line change
Expand Up @@ -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.*;
Expand All @@ -22,16 +23,12 @@ public class ChartDataController {

// ✅ 현재 로그인한 사용자의 차트 데이터 저장
@PostMapping
public ResponseEntity<ChartDataDto> saveChart(HttpServletRequest request, @RequestBody ChartDataDto dto) {
public ResponseEntity<ChartDataDto> 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);
}
Expand Down
10 changes: 4 additions & 6 deletions src/main/java/dev/gyeoul/esginsightboard/dto/ChartDataDto.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,21 +15,19 @@
@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<Map<String, Object>> data;
private List<Map<String, Object>> dataSets;
private String chartType;

private static final ObjectMapper objectMapper = new ObjectMapper();

// ✅ 엔티티 → 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());
Expand All @@ -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;
Expand All @@ -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
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ public static EsgChartDataDto fromEntity(EsgInputValue entity) {
.build();
}


// 생성자
// public EsgChartDataDto(String category, String chartTitle, String indicatorCode, Map<String, String> indicatorInputs, Long companyId) {
// String trimmedCode = category.trim().toUpperCase();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,29 +47,7 @@ public interface GriDataItemRepository extends JpaRepository<GriDataItem, Long>
* 사용 예시: repository.findByDisclosureCode("302-1") - 조직 내 에너지 소비량 데이터 조회
*/
List<GriDataItem> findByDisclosureCode(String disclosureCode);

/**
* 표준 코드와 공시 코드 조합으로 GRI 데이터 항목을 조회
*
* @param standardCode GRI 표준 코드 (예: GRI 302)
* @param disclosureCode 공시 코드 (예: 302-1)
* @return 조건에 해당하는 데이터 항목 목록
*
* 사용 예시: repository.findByStandardCodeAndDisclosureCode("GRI 302", "302-1")
*/
List<GriDataItem> 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<GriDataItem> findRecentItems(@Param("limit") int limit);


/**
* 검증 상태별 GRI 데이터 항목을 조회
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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() 필요 없음)
Expand Down