Browse Source
Merge branch 'main' into feature/optimize-get-range-query-in-market-data-service
feature/optimize-get-range-query-in-market-data-service
Thomas Kaul
1 day ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
18 changed files with
79 additions and
8 deletions
-
CHANGELOG.md
-
apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts
-
apps/client/src/locales/messages.ca.xlf
-
apps/client/src/locales/messages.de.xlf
-
apps/client/src/locales/messages.es.xlf
-
apps/client/src/locales/messages.fr.xlf
-
apps/client/src/locales/messages.it.xlf
-
apps/client/src/locales/messages.nl.xlf
-
apps/client/src/locales/messages.pl.xlf
-
apps/client/src/locales/messages.pt.xlf
-
apps/client/src/locales/messages.tr.xlf
-
apps/client/src/locales/messages.uk.xlf
-
apps/client/src/locales/messages.xlf
-
apps/client/src/locales/messages.zh.xlf
-
libs/ui/src/lib/premium-indicator/premium-indicator.component.html
-
libs/ui/src/lib/premium-indicator/premium-indicator.component.ts
-
package-lock.json
-
package.json
|
|
@ -7,17 +7,28 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 |
|
|
|
|
|
|
|
## Unreleased |
|
|
|
|
|
|
|
### Changed |
|
|
|
|
|
|
|
- Optimized the query of the data range functionality (`getRange()`) in the market data service |
|
|
|
|
|
|
|
## 2.151.0 - 2025-04-11 |
|
|
|
|
|
|
|
### Added |
|
|
|
|
|
|
|
- Added the data gathering status column to the historical market data table of the admin control |
|
|
|
|
|
|
|
### Changed |
|
|
|
|
|
|
|
- Optimized the query of the data range functionality (`getRange()`) in the market data service |
|
|
|
- Set the maximum number of symbols per request in the _Financial Modeling Prep_ service |
|
|
|
- Migrated the get quotes functionality of the _Financial Modeling Prep_ service to its stable API version |
|
|
|
- Improved the language localization for Enlish (`en`) |
|
|
|
- Upgraded `eslint` dependencies |
|
|
|
- Upgraded `Nx` from version `20.6.4` to `20.7.1` |
|
|
|
|
|
|
|
### Fixed |
|
|
|
|
|
|
|
- Fixed the link to the pricing page in the premium indicator component |
|
|
|
|
|
|
|
## 2.150.0 - 2025-04-05 |
|
|
|
|
|
|
|
### Added |
|
|
|
|
|
@ -325,6 +325,10 @@ export class FinancialModelingPrepService implements DataProviderInterface { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public getMaxNumberOfSymbolsPerRequest() { |
|
|
|
return 20; |
|
|
|
} |
|
|
|
|
|
|
|
public getName(): DataSource { |
|
|
|
return DataSource.FINANCIAL_MODELING_PREP; |
|
|
|
} |
|
|
@ -341,7 +345,7 @@ export class FinancialModelingPrepService implements DataProviderInterface { |
|
|
|
|
|
|
|
try { |
|
|
|
const quotes = await fetch( |
|
|
|
`${this.URL}/quote/${symbols.join(',')}?apikey=${this.apiKey}`, |
|
|
|
`${this.getUrl({ version: 'stable' })}/batch-quote-short?symbols=${symbols.join(',')}&apikey=${this.apiKey}`, |
|
|
|
{ |
|
|
|
signal: AbortSignal.timeout(requestTimeout) |
|
|
|
} |
|
|
@ -451,8 +455,14 @@ export class FinancialModelingPrepService implements DataProviderInterface { |
|
|
|
return name; |
|
|
|
} |
|
|
|
|
|
|
|
private getUrl({ version }: { version: number }) { |
|
|
|
return `https://financialmodelingprep.com/api/v${version}`; |
|
|
|
private getUrl({ version }: { version: number | 'stable' }) { |
|
|
|
const baseUrl = 'https://financialmodelingprep.com'; |
|
|
|
|
|
|
|
if (version === 'stable') { |
|
|
|
return `${baseUrl}/stable`; |
|
|
|
} |
|
|
|
|
|
|
|
return `${baseUrl}/api/v${version}`; |
|
|
|
} |
|
|
|
|
|
|
|
private parseAssetClass(profile: any): { |
|
|
|
|
|
@ -719,6 +719,10 @@ |
|
|
|
<context context-type="sourcefile">libs/ui/src/lib/membership-card/membership-card.component.ts</context> |
|
|
|
<context context-type="linenumber">30</context> |
|
|
|
</context-group> |
|
|
|
<context-group purpose="location"> |
|
|
|
<context context-type="sourcefile">libs/ui/src/lib/premium-indicator/premium-indicator.component.ts</context> |
|
|
|
<context context-type="linenumber">21</context> |
|
|
|
</context-group> |
|
|
|
</trans-unit> |
|
|
|
<trans-unit id="5915338689523424386" datatype="html"> |
|
|
|
<source>register</source> |
|
|
|
|
|
@ -5535,6 +5535,10 @@ |
|
|
|
<context context-type="sourcefile">libs/ui/src/lib/membership-card/membership-card.component.ts</context> |
|
|
|
<context context-type="linenumber">30</context> |
|
|
|
</context-group> |
|
|
|
<context-group purpose="location"> |
|
|
|
<context context-type="sourcefile">libs/ui/src/lib/premium-indicator/premium-indicator.component.ts</context> |
|
|
|
<context context-type="linenumber">21</context> |
|
|
|
</context-group> |
|
|
|
</trans-unit> |
|
|
|
<trans-unit id="5915338689523424386" datatype="html"> |
|
|
|
<source>register</source> |
|
|
|
|
|
@ -5512,6 +5512,10 @@ |
|
|
|
<context context-type="sourcefile">libs/ui/src/lib/membership-card/membership-card.component.ts</context> |
|
|
|
<context context-type="linenumber">30</context> |
|
|
|
</context-group> |
|
|
|
<context-group purpose="location"> |
|
|
|
<context context-type="sourcefile">libs/ui/src/lib/premium-indicator/premium-indicator.component.ts</context> |
|
|
|
<context context-type="linenumber">21</context> |
|
|
|
</context-group> |
|
|
|
</trans-unit> |
|
|
|
<trans-unit id="5915338689523424386" datatype="html"> |
|
|
|
<source>register</source> |
|
|
|
|
|
@ -5511,6 +5511,10 @@ |
|
|
|
<context context-type="sourcefile">libs/ui/src/lib/membership-card/membership-card.component.ts</context> |
|
|
|
<context context-type="linenumber">30</context> |
|
|
|
</context-group> |
|
|
|
<context-group purpose="location"> |
|
|
|
<context context-type="sourcefile">libs/ui/src/lib/premium-indicator/premium-indicator.component.ts</context> |
|
|
|
<context context-type="linenumber">21</context> |
|
|
|
</context-group> |
|
|
|
</trans-unit> |
|
|
|
<trans-unit id="5915338689523424386" datatype="html"> |
|
|
|
<source>register</source> |
|
|
|
|
|
@ -5512,6 +5512,10 @@ |
|
|
|
<context context-type="sourcefile">libs/ui/src/lib/membership-card/membership-card.component.ts</context> |
|
|
|
<context context-type="linenumber">30</context> |
|
|
|
</context-group> |
|
|
|
<context-group purpose="location"> |
|
|
|
<context context-type="sourcefile">libs/ui/src/lib/premium-indicator/premium-indicator.component.ts</context> |
|
|
|
<context context-type="linenumber">21</context> |
|
|
|
</context-group> |
|
|
|
</trans-unit> |
|
|
|
<trans-unit id="5915338689523424386" datatype="html"> |
|
|
|
<source>register</source> |
|
|
|
|
|
@ -5511,6 +5511,10 @@ |
|
|
|
<context context-type="sourcefile">libs/ui/src/lib/membership-card/membership-card.component.ts</context> |
|
|
|
<context context-type="linenumber">30</context> |
|
|
|
</context-group> |
|
|
|
<context-group purpose="location"> |
|
|
|
<context context-type="sourcefile">libs/ui/src/lib/premium-indicator/premium-indicator.component.ts</context> |
|
|
|
<context context-type="linenumber">21</context> |
|
|
|
</context-group> |
|
|
|
</trans-unit> |
|
|
|
<trans-unit id="5915338689523424386" datatype="html"> |
|
|
|
<source>register</source> |
|
|
|
|
|
@ -338,6 +338,10 @@ |
|
|
|
<context context-type="sourcefile">libs/ui/src/lib/membership-card/membership-card.component.ts</context> |
|
|
|
<context context-type="linenumber">30</context> |
|
|
|
</context-group> |
|
|
|
<context-group purpose="location"> |
|
|
|
<context context-type="sourcefile">libs/ui/src/lib/premium-indicator/premium-indicator.component.ts</context> |
|
|
|
<context context-type="linenumber">21</context> |
|
|
|
</context-group> |
|
|
|
</trans-unit> |
|
|
|
<trans-unit id="6948811958230386934" datatype="html"> |
|
|
|
<source>privacy-policy</source> |
|
|
|
|
|
@ -5511,6 +5511,10 @@ |
|
|
|
<context context-type="sourcefile">libs/ui/src/lib/membership-card/membership-card.component.ts</context> |
|
|
|
<context context-type="linenumber">30</context> |
|
|
|
</context-group> |
|
|
|
<context-group purpose="location"> |
|
|
|
<context context-type="sourcefile">libs/ui/src/lib/premium-indicator/premium-indicator.component.ts</context> |
|
|
|
<context context-type="linenumber">21</context> |
|
|
|
</context-group> |
|
|
|
</trans-unit> |
|
|
|
<trans-unit id="5915338689523424386" datatype="html"> |
|
|
|
<source>register</source> |
|
|
|
|
|
@ -338,6 +338,10 @@ |
|
|
|
<context context-type="sourcefile">libs/ui/src/lib/membership-card/membership-card.component.ts</context> |
|
|
|
<context context-type="linenumber">30</context> |
|
|
|
</context-group> |
|
|
|
<context-group purpose="location"> |
|
|
|
<context context-type="sourcefile">libs/ui/src/lib/premium-indicator/premium-indicator.component.ts</context> |
|
|
|
<context context-type="linenumber">21</context> |
|
|
|
</context-group> |
|
|
|
</trans-unit> |
|
|
|
<trans-unit id="6948811958230386934" datatype="html"> |
|
|
|
<source>privacy-policy</source> |
|
|
|
|
|
@ -719,6 +719,10 @@ |
|
|
|
<context context-type="sourcefile">libs/ui/src/lib/membership-card/membership-card.component.ts</context> |
|
|
|
<context context-type="linenumber">30</context> |
|
|
|
</context-group> |
|
|
|
<context-group purpose="location"> |
|
|
|
<context context-type="sourcefile">libs/ui/src/lib/premium-indicator/premium-indicator.component.ts</context> |
|
|
|
<context context-type="linenumber">21</context> |
|
|
|
</context-group> |
|
|
|
</trans-unit> |
|
|
|
<trans-unit id="5915338689523424386" datatype="html"> |
|
|
|
<source>register</source> |
|
|
|
|
|
@ -333,6 +333,10 @@ |
|
|
|
<context context-type="sourcefile">libs/ui/src/lib/membership-card/membership-card.component.ts</context> |
|
|
|
<context context-type="linenumber">30</context> |
|
|
|
</context-group> |
|
|
|
<context-group purpose="location"> |
|
|
|
<context context-type="sourcefile">libs/ui/src/lib/premium-indicator/premium-indicator.component.ts</context> |
|
|
|
<context context-type="linenumber">21</context> |
|
|
|
</context-group> |
|
|
|
</trans-unit> |
|
|
|
<trans-unit id="6948811958230386934" datatype="html"> |
|
|
|
<source>privacy-policy</source> |
|
|
|
|
|
@ -339,6 +339,10 @@ |
|
|
|
<context context-type="sourcefile">libs/ui/src/lib/membership-card/membership-card.component.ts</context> |
|
|
|
<context context-type="linenumber">30</context> |
|
|
|
</context-group> |
|
|
|
<context-group purpose="location"> |
|
|
|
<context context-type="sourcefile">libs/ui/src/lib/premium-indicator/premium-indicator.component.ts</context> |
|
|
|
<context context-type="linenumber">21</context> |
|
|
|
</context-group> |
|
|
|
</trans-unit> |
|
|
|
<trans-unit id="6948811958230386934" datatype="html"> |
|
|
|
<source>privacy-policy</source> |
|
|
|
|
|
@ -2,6 +2,6 @@ |
|
|
|
class="align-items-center d-flex" |
|
|
|
title="Upgrade to Ghostfolio Premium" |
|
|
|
[ngStyle]="{ 'pointer-events': enableLink ? 'initial' : 'none' }" |
|
|
|
[routerLink]="['/pricing']" |
|
|
|
[routerLink]="routerLinkPricing" |
|
|
|
><ion-icon class="text-muted" name="diamond-outline" |
|
|
|
/></a> |
|
|
|
|
|
@ -17,4 +17,6 @@ import { RouterModule } from '@angular/router'; |
|
|
|
}) |
|
|
|
export class GfPremiumIndicatorComponent { |
|
|
|
@Input() enableLink = true; |
|
|
|
|
|
|
|
public routerLinkPricing = ['/' + $localize`:snake-case:pricing`]; |
|
|
|
} |
|
|
|
|
|
@ -1,12 +1,12 @@ |
|
|
|
{ |
|
|
|
"name": "ghostfolio", |
|
|
|
"version": "2.150.0", |
|
|
|
"version": "2.151.0", |
|
|
|
"lockfileVersion": 3, |
|
|
|
"requires": true, |
|
|
|
"packages": { |
|
|
|
"": { |
|
|
|
"name": "ghostfolio", |
|
|
|
"version": "2.150.0", |
|
|
|
"version": "2.151.0", |
|
|
|
"hasInstallScript": true, |
|
|
|
"license": "AGPL-3.0", |
|
|
|
"dependencies": { |
|
|
|
|
|
@ -1,6 +1,6 @@ |
|
|
|
{ |
|
|
|
"name": "ghostfolio", |
|
|
|
"version": "2.150.0", |
|
|
|
"version": "2.151.0", |
|
|
|
"homepage": "https://ghostfol.io", |
|
|
|
"license": "AGPL-3.0", |
|
|
|
"repository": "https://github.com/ghostfolio/ghostfolio", |
|
|
|