포트폴리오 서비스(주식 가격 정보 조회 및 추가 페이지)

·2023년 12월 17일
0

Portfolio Backtest

목록 보기
9/31

생각한 것

  • 기존에 만든 조회 페이지와 비슷한 모양으로 구현한다.
  • 중복 저장을 방지하기 위해서 Service에 저장하는 부분에 체크하는 것을 추가한다.

StockPriceService 수정

    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을 추가해야 작동했는데, 추가하지 않아도 작동한다. 이 부분을 공부해봐야겠다.

Controller

    @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와 비슷하게 구현하였다. 날짜를 받는 부분의 경우 데이터가 두개이기 때문에 해당 부분에 대한 오류처리를 추가하였다.

구현 페이지


데이터가 너무 많다..!

다음에 할일

  • 주식가격에서 날짜로 검색하는 기능과 종목으로 검색하는 기능이 필요해 보인다!
profile
백엔드 개발자가 꿈인 컴공과

0개의 댓글

관련 채용 정보