public StockPrice save(StockPrice stockPrice) {
if(stockPriceRepository.findByItmsNmAndBasDt(stockPrice.getItmsNm(), stockPrice.getBasDt()) != null) {
return null;
}
return stockPriceRepository.save(stockPrice);
}
저장을 할 때, 날짜와 종목코드로 중복을 확인하고 저장하도록 코드를 수정하였다.
public Page<StockPrice> findAll(int page) {
List<Sort.Order> sorts = new ArrayList<>();
sorts.add(Sort.Order.desc("basDt"));
Pageable pageable = PageRequest.of(page, 20, Sort.by(sorts));
return stockPriceRepository.findAll(pageable);
}
추가적으로 페이징을 구현하였다. 또한, 날짜를 기준으로 최신의 것이 더 먼저 출력하도록 하였다. 기존에 레포지터리에 findAll을 추가해야 작동했는데, 추가하지 않아도 작동한다. 이 부분을 공부해봐야겠다.
@GetMapping("/update/stockprice")
public String updateStockPricePage() {
return "update_stockprice";
}
@PostMapping("/update/stockprice")
public String updateStockPricePage(@RequestParam(name = "startDate") String startDate, @RequestParam(name = "endDate") String endDate, Model model) {
if(startDate == null || startDate.equals("")) {
model.addAttribute("error", "시작 날짜를 입력하세요.");
return "update_stockprice";
}
if(endDate == null || endDate.equals("")) {
model.addAttribute("error", "끝 날짜를 입력하세요.");
return "update_stockprice";
}
LocalDate startDates = LocalDate.parse(startDate, java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd"));
LocalDate endDates = LocalDate.parse(endDate, java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd"));
LocalDate today = LocalDate.now();
if (endDates.isAfter(today)) {
model.addAttribute("error", endDate + "는 미래의 날짜입니다.");
return "update_stockprice";
}
if(startDates.isAfter(endDates)) {
model.addAttribute("error", "시작 날짜가 끝 날짜보다 늦습니다.");
return "update_stockprice";
}
stockDataLoader.loadStockPriceByTerm(startDate.replaceAll("-", ""), endDate.replaceAll("-", ""));
return "redirect:/admin/stockprice";
}
전에 Stockinfo와 비슷하게 구현하였다. 날짜를 받는 부분의 경우 데이터가 두개이기 때문에 해당 부분에 대한 오류처리를 추가하였다.
데이터가 너무 많다..!