|
|
@ -4,7 +4,12 @@ import { UNKNOWN_KEY } from '@ghostfolio/common/config';
|
|
|
|
import { Country } from '@ghostfolio/common/interfaces/country.interface';
|
|
|
|
import { Country } from '@ghostfolio/common/interfaces/country.interface';
|
|
|
|
import { Sector } from '@ghostfolio/common/interfaces/sector.interface';
|
|
|
|
import { Sector } from '@ghostfolio/common/interfaces/sector.interface';
|
|
|
|
import { Injectable } from '@nestjs/common';
|
|
|
|
import { Injectable } from '@nestjs/common';
|
|
|
|
import { DataSource, Prisma, SymbolProfile } from '@prisma/client';
|
|
|
|
import {
|
|
|
|
|
|
|
|
DataSource,
|
|
|
|
|
|
|
|
Prisma,
|
|
|
|
|
|
|
|
SymbolProfile,
|
|
|
|
|
|
|
|
SymbolProfileOverrides
|
|
|
|
|
|
|
|
} from '@prisma/client';
|
|
|
|
import { continents, countries } from 'countries-list';
|
|
|
|
import { continents, countries } from 'countries-list';
|
|
|
|
|
|
|
|
|
|
|
|
import { ScraperConfiguration } from './data-provider/ghostfolio-scraper-api/interfaces/scraper-configuration.interface';
|
|
|
|
import { ScraperConfiguration } from './data-provider/ghostfolio-scraper-api/interfaces/scraper-configuration.interface';
|
|
|
@ -36,6 +41,7 @@ export class SymbolProfileService {
|
|
|
|
): Promise<EnhancedSymbolProfile[]> {
|
|
|
|
): Promise<EnhancedSymbolProfile[]> {
|
|
|
|
return this.prismaService.symbolProfile
|
|
|
|
return this.prismaService.symbolProfile
|
|
|
|
.findMany({
|
|
|
|
.findMany({
|
|
|
|
|
|
|
|
include: { SymbolProfileOverrides: true },
|
|
|
|
where: {
|
|
|
|
where: {
|
|
|
|
symbol: {
|
|
|
|
symbol: {
|
|
|
|
in: symbols
|
|
|
|
in: symbols
|
|
|
@ -45,14 +51,38 @@ export class SymbolProfileService {
|
|
|
|
.then((symbolProfiles) => this.getSymbols(symbolProfiles));
|
|
|
|
.then((symbolProfiles) => this.getSymbols(symbolProfiles));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private getSymbols(symbolProfiles: SymbolProfile[]): EnhancedSymbolProfile[] {
|
|
|
|
private getSymbols(
|
|
|
|
return symbolProfiles.map((symbolProfile) => ({
|
|
|
|
symbolProfiles: (SymbolProfile & {
|
|
|
|
...symbolProfile,
|
|
|
|
SymbolProfileOverrides: SymbolProfileOverrides;
|
|
|
|
countries: this.getCountries(symbolProfile),
|
|
|
|
})[]
|
|
|
|
scraperConfiguration: this.getScraperConfiguration(symbolProfile),
|
|
|
|
): EnhancedSymbolProfile[] {
|
|
|
|
sectors: this.getSectors(symbolProfile),
|
|
|
|
return symbolProfiles.map((symbolProfile) => {
|
|
|
|
symbolMapping: this.getSymbolMapping(symbolProfile)
|
|
|
|
const item = {
|
|
|
|
}));
|
|
|
|
...symbolProfile,
|
|
|
|
|
|
|
|
countries: this.getCountries(symbolProfile),
|
|
|
|
|
|
|
|
scraperConfiguration: this.getScraperConfiguration(symbolProfile),
|
|
|
|
|
|
|
|
sectors: this.getSectors(symbolProfile),
|
|
|
|
|
|
|
|
symbolMapping: this.getSymbolMapping(symbolProfile)
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (item.SymbolProfileOverrides) {
|
|
|
|
|
|
|
|
item.assetClass =
|
|
|
|
|
|
|
|
item.SymbolProfileOverrides.assetClass ?? item.assetClass;
|
|
|
|
|
|
|
|
item.assetSubClass =
|
|
|
|
|
|
|
|
item.SymbolProfileOverrides.assetSubClass ?? item.assetSubClass;
|
|
|
|
|
|
|
|
item.countries =
|
|
|
|
|
|
|
|
(item.SymbolProfileOverrides.sectors as unknown as Country[]) ??
|
|
|
|
|
|
|
|
item.countries;
|
|
|
|
|
|
|
|
item.name = item.SymbolProfileOverrides?.name ?? item.name;
|
|
|
|
|
|
|
|
item.sectors =
|
|
|
|
|
|
|
|
(item.SymbolProfileOverrides.sectors as unknown as Sector[]) ??
|
|
|
|
|
|
|
|
item.sectors;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
delete item.SymbolProfileOverrides;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return item;
|
|
|
|
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private getCountries(symbolProfile: SymbolProfile): Country[] {
|
|
|
|
private getCountries(symbolProfile: SymbolProfile): Country[] {
|
|
|
|