본문 바로가기
Project

[stock] 회사 배당금 조회

by sangyunpark 2023. 9. 15.

배당금 조회는 FinanceController로 제작

package com.example.stock.controller;

import com.example.stock.model.ScrapedResult;
import com.example.stock.service.FinanceService;
import lombok.AllArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/finance")
@AllArgsConstructor
public class FinanceController {

    private final FinanceService financeService;

    @GetMapping("/dividend/{companyName}")
    public ResponseEntity<?> searchFinance(@PathVariable String companyName){
        ScrapedResult scrapedResult = financeService.getDividendByCompanyName(companyName);

        return ResponseEntity.ok(scrapedResult);
    }


}

회사 이름으로 배당금 정보를 가져온다.

 

 

FinanceService

package com.example.stock.service;

import com.example.stock.entity.CompanyEntity;
import com.example.stock.entity.DividenEntity;
import com.example.stock.model.Company;
import com.example.stock.model.Dividend;
import com.example.stock.model.ScrapedResult;
import com.example.stock.repository.CompanyRepository;
import com.example.stock.repository.DividenRepository;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.stream.Collectors;

@Service
@AllArgsConstructor
public class FinanceService {

    private final DividenRepository dividenRepository;
    private final CompanyRepository companyRepository;

    public ScrapedResult getDividendByCompanyName(String companyName){


        // 1. 회사명을 기준으로 회사 정보를 조회
        CompanyEntity company = companyRepository.findByName(companyName)
                .orElseThrow(() -> new RuntimeException("존재하지 않는 회사명입니다."));

        // 2. 조회된 회사 아이디로 배당금 정보를 조회
        List<DividenEntity> dividenEntities = dividenRepository.findAllByCompany(company.getId());


        // 3. 회사 정보 + 배당금 정보 반환

        return new ScrapedResult(
                Company.builder()
                .name(companyName).ticker(company.getTicker()).build(),
                dividenEntities.stream().map(dividenEntity -> Dividend.builder().date(dividenEntity.getLocalDateTime()).dividen(dividenEntity.getDividen()).build()).collect(Collectors.toList()));
    }
}

findByName 메소드는 Optional로 값을 반환하므로 orElseThrow를 사용해서 값이 존재하는지 유무에 대해 파악해주어야 한다.

존재하지 않는 경우에는 error를 보낸다.

 

DividenRepository

package com.example.stock.repository;

import com.example.stock.entity.DividenEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface DividenRepository extends JpaRepository<DividenEntity,Long> {

    List<DividenEntity> findAllByCompany(Long id);
}

 

CompanyRepository

package com.example.stock.repository;

import com.example.stock.entity.CompanyEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import java.util.Optional;

@Repository
public interface CompanyRepository extends JpaRepository<CompanyEntity,Long> {
    boolean existsByTicker(String ticker);

    Optional<CompanyEntity> findByName(String name);
}

이런식을 값이 잘 넘어오는 것을 확인할 수 있다.

'Project' 카테고리의 다른 글

[stock] 스케줄링  (0) 2023.09.18
[stock] 자동완성  (0) 2023.09.18
[stock] 회사 조회  (0) 2023.09.15
[stock] 배당금 저장  (0) 2023.09.15
[stock] 배당금 저장하기(1)  (0) 2023.09.11