생각한 것

  • 지금 주식 가격정보 데이터의 양이 너무 많다. 또한, 앞으로 매우 크게 증가할 예정이다. 따라서, 검색기능이 필요하다.
  • 종목명과 종목코드로 검색하는 기능을 추가하자.
  • 날짜로 검색하는 기능은 추후 구현하도록 하자

StockPriceService에 종목명 또는 종목코드로 검색 추가하기

    public Page<StockPrice> findAllByItmsNmOrSrtnCd(String query, int page) {
        List<Sort.Order> sorts = new ArrayList<>();
        sorts.add(Sort.Order.desc("basDt"));
        Pageable pageable = PageRequest.of(page, 20, Sort.by(sorts));

        if(query.charAt(0) <= '9' && query.charAt(0) >= '0') {
            return stockPriceRepository.findAllBySrtnCd(query, pageable);
        }else{
            return stockPriceRepository.findAllByItmsNm(query, pageable);
        }
    }
    

입력받은 query를 바탕으로 종목명 또는 종목 코드로 검색하는 기능을 추가하였다.

Controller

    @GetMapping("/stockprice")
    public String showStockPricePage(Model model, @RequestParam(value="page", defaultValue="0") int page, @RequestParam(required=false) String query) {
        if(query != null && !query.equals("")) {
            Page<StockPrice> pagingStocks = stockPriceService.findAllByItmsNmOrSrtnCd(query, page);
            model.addAttribute("paging", pagingStocks);
            model.addAttribute("totalStocks", pagingStocks.getTotalElements());

            return "stockprice";
        }


        Page<StockPrice> pagingStocks = stockPriceService.findAll(page);

        model.addAttribute("paging", pagingStocks);
        model.addAttribute("totalStocks", pagingStocks.getTotalElements());

        return "stockprice";
    }
    

query를 parameter로 받아 null이 아닐 때, 종목명 혹은 종목코드로 검색해온다.

오름차순, 내림차순 필터 추가하기

    public Page<StockPrice> findAll(int page, boolean isDesc) {
        if(isDesc) {
            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);
        }else {
            Pageable pageable = PageRequest.of(page, 20);
            return stockPriceRepository.findAll(pageable);
        }
    }
    
    @GetMapping("/stockprice")
    public String showStockPricePage(Model model, @RequestParam(value="page", defaultValue="0") int page, @RequestParam(required=false) String query , @RequestParam(defaultValue = "desc") String filter) {
        if(query != null && !query.equals("")) {
            Page<StockPrice> pagingStocks = stockPriceService.findAllByItmsNmOrSrtnCd(query, page, filter.equals("desc"));
            model.addAttribute("paging", pagingStocks);
            model.addAttribute("totalStocks", pagingStocks.getTotalElements());
            model.addAttribute("query", query);
            return "stockprice";
        }

        Page<StockPrice> pagingStocks = stockPriceService.findAll(page, filter.equals("desc"));
        model.addAttribute("paging", pagingStocks);
        model.addAttribute("totalStocks", pagingStocks.getTotalElements());

        return "stockprice";
    }
    

데이터가 어느 날짜를 기준으로 저장했는지 아는 것이 중요하기 때문에 추가적으로 필터를 구현하였다.

결과화면



다음에 할일

  • 이제 진짜 포트폴리오를 구성하고 수익률을 계산하는 부분을 시작해보자.
  • 우선 메인페이지를 만들어보자!
  • (추후) Spring Security을 통해 관리자 페이지에 대한 접근을 제한하자.
profile
백엔드 개발자가 꿈인 컴공과

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN