Feature/automate countries for stocks in symbol profile data (#314)

* Automate countries for stocks in symbol profile data

* Update changelog
This commit is contained in:
Thomas Kaul 2021-08-24 20:24:18 +02:00 committed by GitHub
parent e14f08a8fb
commit d8782b0d4c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 29 additions and 1 deletions

View File

@ -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/), 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). 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 ## 1.42.0 - 22.08.2021
### Added ### Added

View File

@ -136,13 +136,14 @@ export class DataGatheringService {
for (const [ for (const [
symbol, symbol,
{ assetClass, assetSubClass, currency, dataSource, name } { assetClass, assetSubClass, countries, currency, dataSource, name }
] of Object.entries(currentData)) { ] of Object.entries(currentData)) {
try { try {
await this.prismaService.symbolProfile.upsert({ await this.prismaService.symbolProfile.upsert({
create: { create: {
assetClass, assetClass,
assetSubClass, assetSubClass,
countries,
currency, currency,
dataSource, dataSource,
name, name,
@ -151,6 +152,7 @@ export class DataGatheringService {
update: { update: {
assetClass, assetClass,
assetSubClass, assetSubClass,
countries,
currency, currency,
name name
}, },

View File

@ -25,6 +25,7 @@ export interface IYahooFinancePrice {
} }
export interface IYahooFinanceSummaryProfile { export interface IYahooFinanceSummaryProfile {
country?: string;
industry?: string; industry?: string;
sector?: string; sector?: string;
website?: string; website?: string;

View File

@ -16,6 +16,7 @@ import {
} from '@prisma/client'; } from '@prisma/client';
import * as bent from 'bent'; import * as bent from 'bent';
import Big from 'big.js'; import Big from 'big.js';
import { countries } from 'countries-list';
import { format } from 'date-fns'; import { format } from 'date-fns';
import * as yahooFinance from 'yahoo-finance'; import * as yahooFinance from 'yahoo-finance';
@ -92,6 +93,23 @@ export class YahooFinanceService implements DataProviderInterface {
.toNumber(); .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; const url = value.summaryProfile?.website;
if (url) { if (url) {
response[symbol].url = url; response[symbol].url = url;

View File

@ -37,6 +37,7 @@ export interface IDataProviderHistoricalResponse {
export interface IDataProviderResponse { export interface IDataProviderResponse {
assetClass?: AssetClass; assetClass?: AssetClass;
assetSubClass?: AssetSubClass; assetSubClass?: AssetSubClass;
countries?: { code: string; weight: number }[];
currency: Currency; currency: Currency;
dataSource: DataSource; dataSource: DataSource;
exchange?: string; exchange?: string;