배당금 조회는 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 |