diff --git a/CHANGELOG.md b/CHANGELOG.md index ac9df2e8..b28db8ee 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased + +### Added + +- Extended the data management of symbol profile data by countries (automated for stocks) + ## 1.42.0 - 22.08.2021 ### Added diff --git a/apps/api/src/services/data-gathering.service.ts b/apps/api/src/services/data-gathering.service.ts index fcf9c4eb..c4a3fd0e 100644 --- a/apps/api/src/services/data-gathering.service.ts +++ b/apps/api/src/services/data-gathering.service.ts @@ -136,13 +136,14 @@ export class DataGatheringService { for (const [ symbol, - { assetClass, assetSubClass, currency, dataSource, name } + { assetClass, assetSubClass, countries, currency, dataSource, name } ] of Object.entries(currentData)) { try { await this.prismaService.symbolProfile.upsert({ create: { assetClass, assetSubClass, + countries, currency, dataSource, name, @@ -151,6 +152,7 @@ export class DataGatheringService { update: { assetClass, assetSubClass, + countries, currency, name }, diff --git a/apps/api/src/services/data-provider/yahoo-finance/interfaces/interfaces.ts b/apps/api/src/services/data-provider/yahoo-finance/interfaces/interfaces.ts index 3594f7e0..d41a43d3 100644 --- a/apps/api/src/services/data-provider/yahoo-finance/interfaces/interfaces.ts +++ b/apps/api/src/services/data-provider/yahoo-finance/interfaces/interfaces.ts @@ -25,6 +25,7 @@ export interface IYahooFinancePrice { } export interface IYahooFinanceSummaryProfile { + country?: string; industry?: string; sector?: string; website?: string; diff --git a/apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts b/apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts index 3b59271a..418687b1 100644 --- a/apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts +++ b/apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts @@ -16,6 +16,7 @@ import { } from '@prisma/client'; import * as bent from 'bent'; import Big from 'big.js'; +import { countries } from 'countries-list'; import { format } from 'date-fns'; import * as yahooFinance from 'yahoo-finance'; @@ -92,6 +93,23 @@ export class YahooFinanceService implements DataProviderInterface { .toNumber(); } + // Add country if stock and available + if ( + assetSubClass === AssetSubClass.STOCK && + value.summaryProfile?.country + ) { + try { + const [code] = Object.entries(countries).find(([, country]) => { + return country.name === value.summaryProfile?.country; + }); + + if (code) { + response[symbol].countries = [{ code, weight: 1 }]; + } + } catch {} + } + + // Add url if available const url = value.summaryProfile?.website; if (url) { response[symbol].url = url; diff --git a/apps/api/src/services/interfaces/interfaces.ts b/apps/api/src/services/interfaces/interfaces.ts index fce1e94d..eef8d2dc 100644 --- a/apps/api/src/services/interfaces/interfaces.ts +++ b/apps/api/src/services/interfaces/interfaces.ts @@ -37,6 +37,7 @@ export interface IDataProviderHistoricalResponse { export interface IDataProviderResponse { assetClass?: AssetClass; assetSubClass?: AssetSubClass; + countries?: { code: string; weight: number }[]; currency: Currency; dataSource: DataSource; exchange?: string;