Browse Source

Merge branch 'main' into feature/extend-emergency-fund-to-support-assets

pull/4485/head
Thomas Kaul 3 weeks ago
committed by GitHub
parent
commit
4cdceade5f
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 12
      CHANGELOG.md
  2. 4
      apps/api/src/app/admin/admin.controller.ts
  3. 2
      apps/api/src/app/import/import.service.ts
  4. 2
      apps/api/src/services/cron.service.ts
  5. 21
      apps/api/src/services/queues/data-gathering/data-gathering.service.ts
  6. 71
      apps/api/src/services/symbol-profile/symbol-profile.service.ts
  7. 20
      apps/client/src/locales/messages.ca.xlf
  8. 20
      apps/client/src/locales/messages.de.xlf
  9. 20
      apps/client/src/locales/messages.es.xlf
  10. 20
      apps/client/src/locales/messages.fr.xlf
  11. 20
      apps/client/src/locales/messages.it.xlf
  12. 20
      apps/client/src/locales/messages.nl.xlf
  13. 20
      apps/client/src/locales/messages.pl.xlf
  14. 20
      apps/client/src/locales/messages.pt.xlf
  15. 20
      apps/client/src/locales/messages.tr.xlf
  16. 20
      apps/client/src/locales/messages.uk.xlf
  17. 19
      apps/client/src/locales/messages.xlf
  18. 20
      apps/client/src/locales/messages.zh.xlf
  19. 17
      libs/common/src/lib/personal-finance-tools.ts
  20. 1
      libs/ui/src/lib/i18n.ts
  21. 16
      package-lock.json
  22. 4
      package.json
  23. 5
      prisma/migrations/20250324072407_added_is_active_to_symbol_profile/migration.sql
  24. 2
      prisma/schema.prisma

12
CHANGELOG.md

@ -10,6 +10,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Changed
- Improved the static portfolio analysis rule: Emergency fund setup by supporting assets
- Restricted the historical market data gathering to active asset profiles
## 2.148.0 - 2025-03-24
### Added
- Added the `isActive` flag to the asset profile model
### Changed
- Improved the language localization for German (`de`)
- Upgraded `ngx-skeleton-loader` from version `9.0.0` to `10.0.0`
## 2.147.0 - 2025-03-22

4
apps/api/src/app/admin/admin.controller.ts

@ -83,7 +83,7 @@ export class AdminController {
@UseGuards(AuthGuard('jwt'), HasPermissionGuard)
public async gatherMax(): Promise<void> {
const assetProfileIdentifiers =
await this.dataGatheringService.getAllAssetProfileIdentifiers();
await this.dataGatheringService.getAllActiveAssetProfileIdentifiers();
await this.dataGatheringService.addJobsToQueue(
assetProfileIdentifiers.map(({ dataSource, symbol }) => {
@ -110,7 +110,7 @@ export class AdminController {
@UseGuards(AuthGuard('jwt'), HasPermissionGuard)
public async gatherProfileData(): Promise<void> {
const assetProfileIdentifiers =
await this.dataGatheringService.getAllAssetProfileIdentifiers();
await this.dataGatheringService.getAllActiveAssetProfileIdentifiers();
await this.dataGatheringService.addJobsToQueue(
assetProfileIdentifiers.map(({ dataSource, symbol }) => {

2
apps/api/src/app/import/import.service.ts

@ -300,6 +300,7 @@ export class ImportService {
figiShareClass,
holdings,
id,
isActive,
isin,
name,
scraperConfiguration,
@ -375,6 +376,7 @@ export class ImportService {
figiShareClass,
holdings,
id,
isActive,
isin,
name,
scraperConfiguration,

2
apps/api/src/services/cron.service.ts

@ -57,7 +57,7 @@ export class CronService {
public async runEverySundayAtTwelvePm() {
if (await this.isDataGatheringEnabled()) {
const assetProfileIdentifiers =
await this.dataGatheringService.getAllAssetProfileIdentifiers();
await this.dataGatheringService.getAllActiveAssetProfileIdentifiers();
await this.dataGatheringService.addJobsToQueue(
assetProfileIdentifiers.map(({ dataSource, symbol }) => {

21
apps/api/src/services/queues/data-gathering/data-gathering.service.ts

@ -159,7 +159,8 @@ export class DataGatheringService {
);
if (!assetProfileIdentifiers) {
assetProfileIdentifiers = await this.getAllAssetProfileIdentifiers();
assetProfileIdentifiers =
await this.getAllActiveAssetProfileIdentifiers();
}
if (assetProfileIdentifiers.length <= 0) {
@ -296,11 +297,14 @@ export class DataGatheringService {
);
}
public async getAllAssetProfileIdentifiers(): Promise<
public async getAllActiveAssetProfileIdentifiers(): Promise<
AssetProfileIdentifier[]
> {
const symbolProfiles = await this.prismaService.symbolProfile.findMany({
orderBy: [{ symbol: 'asc' }]
orderBy: [{ symbol: 'asc' }],
where: {
isActive: true
}
});
return symbolProfiles
@ -370,9 +374,11 @@ export class DataGatheringService {
withUserSubscription?: boolean;
}): Promise<IDataGatheringItem[]> {
const symbolProfiles =
await this.symbolProfileService.getSymbolProfilesByUserSubscription({
withUserSubscription
});
await this.symbolProfileService.getActiveSymbolProfilesByUserSubscription(
{
withUserSubscription
}
);
const assetProfileIdentifiersWithCompleteMarketData =
await this.getAssetProfileIdentifiersWithCompleteMarketData();
@ -436,6 +442,9 @@ export class DataGatheringService {
},
scraperConfiguration: true,
symbol: true
},
where: {
isActive: true
}
})
)

71
apps/api/src/services/symbol-profile/symbol-profile.service.ts

@ -35,6 +35,41 @@ export class SymbolProfileService {
});
}
public async getActiveSymbolProfilesByUserSubscription({
withUserSubscription = false
}: {
withUserSubscription?: boolean;
}) {
return this.prismaService.symbolProfile.findMany({
include: {
Order: {
include: {
User: true
}
}
},
orderBy: [{ symbol: 'asc' }],
where: {
isActive: true,
Order: withUserSubscription
? {
some: {
User: {
Subscription: { some: { expiresAt: { gt: new Date() } } }
}
}
}
: {
every: {
User: {
Subscription: { none: { expiresAt: { gt: new Date() } } }
}
}
}
}
});
}
public async getSymbolProfiles(
aAssetProfileIdentifiers: AssetProfileIdentifier[]
): Promise<EnhancedSymbolProfile[]> {
@ -91,40 +126,6 @@ export class SymbolProfileService {
});
}
public async getSymbolProfilesByUserSubscription({
withUserSubscription = false
}: {
withUserSubscription?: boolean;
}) {
return this.prismaService.symbolProfile.findMany({
include: {
Order: {
include: {
User: true
}
}
},
orderBy: [{ symbol: 'asc' }],
where: {
Order: withUserSubscription
? {
some: {
User: {
Subscription: { some: { expiresAt: { gt: new Date() } } }
}
}
}
: {
every: {
User: {
Subscription: { none: { expiresAt: { gt: new Date() } } }
}
}
}
}
});
}
public updateSymbolProfile({
assetClass,
assetSubClass,
@ -133,6 +134,7 @@ export class SymbolProfileService {
currency,
dataSource,
holdings,
isActive,
name,
scraperConfiguration,
sectors,
@ -149,6 +151,7 @@ export class SymbolProfileService {
countries,
currency,
holdings,
isActive,
name,
scraperConfiguration,
sectors,

20
apps/client/src/locales/messages.ca.xlf

@ -2651,7 +2651,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">101</context>
<context context-type="linenumber">102</context>
</context-group>
</trans-unit>
<trans-unit id="6844699413925472826" datatype="html">
@ -2663,7 +2663,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">102</context>
<context context-type="linenumber">103</context>
</context-group>
</trans-unit>
<trans-unit id="ce718ababbce63d776cf8b1f91412beb4c0a6e04" datatype="html">
@ -6651,7 +6651,7 @@
<target state="new">Extreme Fear</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">99</context>
<context context-type="linenumber">100</context>
</context-group>
</trans-unit>
<trans-unit id="2634398159221205491" datatype="html">
@ -6659,7 +6659,7 @@
<target state="new">Extreme Greed</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">100</context>
<context context-type="linenumber">101</context>
</context-group>
</trans-unit>
<trans-unit id="3511545370905854666" datatype="html">
@ -6667,7 +6667,7 @@
<target state="new">Neutral</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">103</context>
<context context-type="linenumber">104</context>
</context-group>
</trans-unit>
<trans-unit id="3c33a66194384cf8c14e25170416767efa56fd98" datatype="html">
@ -6971,7 +6971,7 @@
<target state="new">United States</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">96</context>
<context context-type="linenumber">97</context>
</context-group>
</trans-unit>
<trans-unit id="1519954996184640001" datatype="html">
@ -7828,6 +7828,14 @@
<context context-type="linenumber">249</context>
</context-group>
</trans-unit>
<trans-unit id="7303091661854783304" datatype="html">
<source>United Kingdom</source>
<target state="new">United Kingdom</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">96</context>
</context-group>
</trans-unit>
</body>
</file>
</xliff>

20
apps/client/src/locales/messages.de.xlf

@ -2818,7 +2818,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">101</context>
<context context-type="linenumber">102</context>
</context-group>
</trans-unit>
<trans-unit id="6844699413925472826" datatype="html">
@ -2830,7 +2830,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">102</context>
<context context-type="linenumber">103</context>
</context-group>
</trans-unit>
<trans-unit id="4550487415324294802" datatype="html">
@ -6079,7 +6079,7 @@
<target state="translated">Extreme Angst</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">99</context>
<context context-type="linenumber">100</context>
</context-group>
</trans-unit>
<trans-unit id="2634398159221205491" datatype="html">
@ -6087,7 +6087,7 @@
<target state="translated">Extreme Gier</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">100</context>
<context context-type="linenumber">101</context>
</context-group>
</trans-unit>
<trans-unit id="3511545370905854666" datatype="html">
@ -6095,7 +6095,7 @@
<target state="translated">Neutral</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">103</context>
<context context-type="linenumber">104</context>
</context-group>
</trans-unit>
<trans-unit id="7183719827884539616" datatype="html">
@ -6971,7 +6971,7 @@
<target state="translated">USA</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">96</context>
<context context-type="linenumber">97</context>
</context-group>
</trans-unit>
<trans-unit id="1519954996184640001" datatype="html">
@ -7828,6 +7828,14 @@
<context context-type="linenumber">249</context>
</context-group>
</trans-unit>
<trans-unit id="7303091661854783304" datatype="html">
<source>United Kingdom</source>
<target state="translated">Vereinigtes Königreich</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">96</context>
</context-group>
</trans-unit>
</body>
</file>
</xliff>

20
apps/client/src/locales/messages.es.xlf

@ -2819,7 +2819,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">101</context>
<context context-type="linenumber">102</context>
</context-group>
</trans-unit>
<trans-unit id="6844699413925472826" datatype="html">
@ -2831,7 +2831,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">102</context>
<context context-type="linenumber">103</context>
</context-group>
</trans-unit>
<trans-unit id="4550487415324294802" datatype="html">
@ -6080,7 +6080,7 @@
<target state="new">Extreme Fear</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">99</context>
<context context-type="linenumber">100</context>
</context-group>
</trans-unit>
<trans-unit id="2634398159221205491" datatype="html">
@ -6088,7 +6088,7 @@
<target state="new">Extreme Greed</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">100</context>
<context context-type="linenumber">101</context>
</context-group>
</trans-unit>
<trans-unit id="3511545370905854666" datatype="html">
@ -6096,7 +6096,7 @@
<target state="new">Neutral</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">103</context>
<context context-type="linenumber">104</context>
</context-group>
</trans-unit>
<trans-unit id="7183719827884539616" datatype="html">
@ -6972,7 +6972,7 @@
<target state="new">United States</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">96</context>
<context context-type="linenumber">97</context>
</context-group>
</trans-unit>
<trans-unit id="1519954996184640001" datatype="html">
@ -7829,6 +7829,14 @@
<context context-type="linenumber">249</context>
</context-group>
</trans-unit>
<trans-unit id="7303091661854783304" datatype="html">
<source>United Kingdom</source>
<target state="new">United Kingdom</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">96</context>
</context-group>
</trans-unit>
</body>
</file>
</xliff>

20
apps/client/src/locales/messages.fr.xlf

@ -1354,7 +1354,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">101</context>
<context context-type="linenumber">102</context>
</context-group>
</trans-unit>
<trans-unit id="6844699413925472826" datatype="html">
@ -1366,7 +1366,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">102</context>
<context context-type="linenumber">103</context>
</context-group>
</trans-unit>
<trans-unit id="ce718ababbce63d776cf8b1f91412beb4c0a6e04" datatype="html">
@ -6079,7 +6079,7 @@
<target state="translated">Extreme Peur</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">99</context>
<context context-type="linenumber">100</context>
</context-group>
</trans-unit>
<trans-unit id="2634398159221205491" datatype="html">
@ -6087,7 +6087,7 @@
<target state="translated">Extreme Cupidité</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">100</context>
<context context-type="linenumber">101</context>
</context-group>
</trans-unit>
<trans-unit id="3511545370905854666" datatype="html">
@ -6095,7 +6095,7 @@
<target state="translated">Neutre</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">103</context>
<context context-type="linenumber">104</context>
</context-group>
</trans-unit>
<trans-unit id="7183719827884539616" datatype="html">
@ -6971,7 +6971,7 @@
<target state="translated">Etats-Unis</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">96</context>
<context context-type="linenumber">97</context>
</context-group>
</trans-unit>
<trans-unit id="1519954996184640001" datatype="html">
@ -7828,6 +7828,14 @@
<context context-type="linenumber">249</context>
</context-group>
</trans-unit>
<trans-unit id="7303091661854783304" datatype="html">
<source>United Kingdom</source>
<target state="new">United Kingdom</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">96</context>
</context-group>
</trans-unit>
</body>
</file>
</xliff>

20
apps/client/src/locales/messages.it.xlf

@ -2819,7 +2819,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">101</context>
<context context-type="linenumber">102</context>
</context-group>
</trans-unit>
<trans-unit id="6844699413925472826" datatype="html">
@ -2831,7 +2831,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">102</context>
<context context-type="linenumber">103</context>
</context-group>
</trans-unit>
<trans-unit id="4550487415324294802" datatype="html">
@ -6080,7 +6080,7 @@
<target state="translated">Paura estrema</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">99</context>
<context context-type="linenumber">100</context>
</context-group>
</trans-unit>
<trans-unit id="2634398159221205491" datatype="html">
@ -6088,7 +6088,7 @@
<target state="translated">Avidità estrema</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">100</context>
<context context-type="linenumber">101</context>
</context-group>
</trans-unit>
<trans-unit id="3511545370905854666" datatype="html">
@ -6096,7 +6096,7 @@
<target state="translated">Neutrale</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">103</context>
<context context-type="linenumber">104</context>
</context-group>
</trans-unit>
<trans-unit id="7183719827884539616" datatype="html">
@ -6972,7 +6972,7 @@
<target state="translated">Stati Uniti</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">96</context>
<context context-type="linenumber">97</context>
</context-group>
</trans-unit>
<trans-unit id="1519954996184640001" datatype="html">
@ -7829,6 +7829,14 @@
<context context-type="linenumber">249</context>
</context-group>
</trans-unit>
<trans-unit id="7303091661854783304" datatype="html">
<source>United Kingdom</source>
<target state="new">United Kingdom</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">96</context>
</context-group>
</trans-unit>
</body>
</file>
</xliff>

20
apps/client/src/locales/messages.nl.xlf

@ -2818,7 +2818,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">101</context>
<context context-type="linenumber">102</context>
</context-group>
</trans-unit>
<trans-unit id="6844699413925472826" datatype="html">
@ -2830,7 +2830,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">102</context>
<context context-type="linenumber">103</context>
</context-group>
</trans-unit>
<trans-unit id="4550487415324294802" datatype="html">
@ -6079,7 +6079,7 @@
<target state="new">Extreme Fear</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">99</context>
<context context-type="linenumber">100</context>
</context-group>
</trans-unit>
<trans-unit id="2634398159221205491" datatype="html">
@ -6087,7 +6087,7 @@
<target state="new">Extreme Greed</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">100</context>
<context context-type="linenumber">101</context>
</context-group>
</trans-unit>
<trans-unit id="3511545370905854666" datatype="html">
@ -6095,7 +6095,7 @@
<target state="new">Neutral</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">103</context>
<context context-type="linenumber">104</context>
</context-group>
</trans-unit>
<trans-unit id="7183719827884539616" datatype="html">
@ -6971,7 +6971,7 @@
<target state="new">United States</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">96</context>
<context context-type="linenumber">97</context>
</context-group>
</trans-unit>
<trans-unit id="1519954996184640001" datatype="html">
@ -7828,6 +7828,14 @@
<context context-type="linenumber">249</context>
</context-group>
</trans-unit>
<trans-unit id="7303091661854783304" datatype="html">
<source>United Kingdom</source>
<target state="new">United Kingdom</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">96</context>
</context-group>
</trans-unit>
</body>
</file>
</xliff>

20
apps/client/src/locales/messages.pl.xlf

@ -2307,7 +2307,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">101</context>
<context context-type="linenumber">102</context>
</context-group>
</trans-unit>
<trans-unit id="6844699413925472826" datatype="html">
@ -2319,7 +2319,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">102</context>
<context context-type="linenumber">103</context>
</context-group>
</trans-unit>
<trans-unit id="ce718ababbce63d776cf8b1f91412beb4c0a6e04" datatype="html">
@ -6055,7 +6055,7 @@
<target state="translated">Skrajny Strach</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">99</context>
<context context-type="linenumber">100</context>
</context-group>
</trans-unit>
<trans-unit id="2634398159221205491" datatype="html">
@ -6063,7 +6063,7 @@
<target state="translated">Skrajna Zachłanność</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">100</context>
<context context-type="linenumber">101</context>
</context-group>
</trans-unit>
<trans-unit id="3511545370905854666" datatype="html">
@ -6071,7 +6071,7 @@
<target state="translated">Neutralny</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">103</context>
<context context-type="linenumber">104</context>
</context-group>
</trans-unit>
<trans-unit id="3c33a66194384cf8c14e25170416767efa56fd98" datatype="html">
@ -6971,7 +6971,7 @@
<target state="translated">Stany Zjednoczone</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">96</context>
<context context-type="linenumber">97</context>
</context-group>
</trans-unit>
<trans-unit id="1519954996184640001" datatype="html">
@ -7828,6 +7828,14 @@
<context context-type="linenumber">249</context>
</context-group>
</trans-unit>
<trans-unit id="7303091661854783304" datatype="html">
<source>United Kingdom</source>
<target state="new">United Kingdom</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">96</context>
</context-group>
</trans-unit>
</body>
</file>
</xliff>

20
apps/client/src/locales/messages.pt.xlf

@ -1226,7 +1226,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">101</context>
<context context-type="linenumber">102</context>
</context-group>
</trans-unit>
<trans-unit id="6844699413925472826" datatype="html">
@ -1238,7 +1238,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">102</context>
<context context-type="linenumber">103</context>
</context-group>
</trans-unit>
<trans-unit id="ce718ababbce63d776cf8b1f91412beb4c0a6e04" datatype="html">
@ -6079,7 +6079,7 @@
<target state="new">Extreme Fear</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">99</context>
<context context-type="linenumber">100</context>
</context-group>
</trans-unit>
<trans-unit id="2634398159221205491" datatype="html">
@ -6087,7 +6087,7 @@
<target state="new">Extreme Greed</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">100</context>
<context context-type="linenumber">101</context>
</context-group>
</trans-unit>
<trans-unit id="3511545370905854666" datatype="html">
@ -6095,7 +6095,7 @@
<target state="new">Neutral</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">103</context>
<context context-type="linenumber">104</context>
</context-group>
</trans-unit>
<trans-unit id="7183719827884539616" datatype="html">
@ -6971,7 +6971,7 @@
<target state="new">United States</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">96</context>
<context context-type="linenumber">97</context>
</context-group>
</trans-unit>
<trans-unit id="1519954996184640001" datatype="html">
@ -7828,6 +7828,14 @@
<context context-type="linenumber">249</context>
</context-group>
</trans-unit>
<trans-unit id="7303091661854783304" datatype="html">
<source>United Kingdom</source>
<target state="new">United Kingdom</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">96</context>
</context-group>
</trans-unit>
</body>
</file>
</xliff>

20
apps/client/src/locales/messages.tr.xlf

@ -2155,7 +2155,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">101</context>
<context context-type="linenumber">102</context>
</context-group>
</trans-unit>
<trans-unit id="6844699413925472826" datatype="html">
@ -2167,7 +2167,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">102</context>
<context context-type="linenumber">103</context>
</context-group>
</trans-unit>
<trans-unit id="ce718ababbce63d776cf8b1f91412beb4c0a6e04" datatype="html">
@ -6079,7 +6079,7 @@
<target state="translated">Aşırı Korku</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">99</context>
<context context-type="linenumber">100</context>
</context-group>
</trans-unit>
<trans-unit id="2634398159221205491" datatype="html">
@ -6087,7 +6087,7 @@
<target state="translated">Aşırı Açgözlülük</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">100</context>
<context context-type="linenumber">101</context>
</context-group>
</trans-unit>
<trans-unit id="3511545370905854666" datatype="html">
@ -6095,7 +6095,7 @@
<target state="translated">Nötr</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">103</context>
<context context-type="linenumber">104</context>
</context-group>
</trans-unit>
<trans-unit id="7183719827884539616" datatype="html">
@ -6971,7 +6971,7 @@
<target state="new">United States</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">96</context>
<context context-type="linenumber">97</context>
</context-group>
</trans-unit>
<trans-unit id="1519954996184640001" datatype="html">
@ -7828,6 +7828,14 @@
<context context-type="linenumber">249</context>
</context-group>
</trans-unit>
<trans-unit id="7303091661854783304" datatype="html">
<source>United Kingdom</source>
<target state="new">United Kingdom</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">96</context>
</context-group>
</trans-unit>
</body>
</file>
</xliff>

20
apps/client/src/locales/messages.uk.xlf

@ -2779,7 +2779,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">101</context>
<context context-type="linenumber">102</context>
</context-group>
</trans-unit>
<trans-unit id="6844699413925472826" datatype="html">
@ -2791,7 +2791,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">102</context>
<context context-type="linenumber">103</context>
</context-group>
</trans-unit>
<trans-unit id="ce718ababbce63d776cf8b1f91412beb4c0a6e04" datatype="html">
@ -7505,7 +7505,7 @@
<target state="translated">Сполучені Штати</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">96</context>
<context context-type="linenumber">97</context>
</context-group>
</trans-unit>
<trans-unit id="1189482335778578193" datatype="html">
@ -7513,7 +7513,7 @@
<target state="translated">Екстремальний страх</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">99</context>
<context context-type="linenumber">100</context>
</context-group>
</trans-unit>
<trans-unit id="2634398159221205491" datatype="html">
@ -7521,7 +7521,7 @@
<target state="translated">Екстремальна жадібність</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">100</context>
<context context-type="linenumber">101</context>
</context-group>
</trans-unit>
<trans-unit id="3511545370905854666" datatype="html">
@ -7529,7 +7529,7 @@
<target state="translated">Нейтрально</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">103</context>
<context context-type="linenumber">104</context>
</context-group>
</trans-unit>
<trans-unit id="258c041e93862316871096965e2d70579282fb1a" datatype="html">
@ -7828,6 +7828,14 @@
<context context-type="linenumber">249</context>
</context-group>
</trans-unit>
<trans-unit id="7303091661854783304" datatype="html">
<source>United Kingdom</source>
<target state="new">United Kingdom</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">96</context>
</context-group>
</trans-unit>
</body>
</file>
</xliff>

19
apps/client/src/locales/messages.xlf

@ -2170,7 +2170,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">101</context>
<context context-type="linenumber">102</context>
</context-group>
</trans-unit>
<trans-unit id="6844699413925472826" datatype="html">
@ -2181,7 +2181,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">102</context>
<context context-type="linenumber">103</context>
</context-group>
</trans-unit>
<trans-unit id="ce718ababbce63d776cf8b1f91412beb4c0a6e04" datatype="html">
@ -5566,21 +5566,21 @@
<source>Extreme Fear</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">99</context>
<context context-type="linenumber">100</context>
</context-group>
</trans-unit>
<trans-unit id="2634398159221205491" datatype="html">
<source>Extreme Greed</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">100</context>
<context context-type="linenumber">101</context>
</context-group>
</trans-unit>
<trans-unit id="3511545370905854666" datatype="html">
<source>Neutral</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">103</context>
<context context-type="linenumber">104</context>
</context-group>
</trans-unit>
<trans-unit id="3c33a66194384cf8c14e25170416767efa56fd98" datatype="html">
@ -6254,7 +6254,7 @@
<source>United States</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">96</context>
<context context-type="linenumber">97</context>
</context-group>
</trans-unit>
<trans-unit id="647668541461749965" datatype="html">
@ -7077,6 +7077,13 @@
<context context-type="linenumber">249</context>
</context-group>
</trans-unit>
<trans-unit id="7303091661854783304" datatype="html">
<source>United Kingdom</source>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">96</context>
</context-group>
</trans-unit>
</body>
</file>
</xliff>

20
apps/client/src/locales/messages.zh.xlf

@ -2316,7 +2316,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">101</context>
<context context-type="linenumber">102</context>
</context-group>
</trans-unit>
<trans-unit id="6844699413925472826" datatype="html">
@ -2328,7 +2328,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">102</context>
<context context-type="linenumber">103</context>
</context-group>
</trans-unit>
<trans-unit id="ce718ababbce63d776cf8b1f91412beb4c0a6e04" datatype="html">
@ -6112,7 +6112,7 @@
<target state="translated">极度恐惧</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">99</context>
<context context-type="linenumber">100</context>
</context-group>
</trans-unit>
<trans-unit id="2634398159221205491" datatype="html">
@ -6120,7 +6120,7 @@
<target state="translated">极度贪婪</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">100</context>
<context context-type="linenumber">101</context>
</context-group>
</trans-unit>
<trans-unit id="3511545370905854666" datatype="html">
@ -6128,7 +6128,7 @@
<target state="translated">中性的</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">103</context>
<context context-type="linenumber">104</context>
</context-group>
</trans-unit>
<trans-unit id="3c33a66194384cf8c14e25170416767efa56fd98" datatype="html">
@ -6972,7 +6972,7 @@
<target state="new">United States</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">96</context>
<context context-type="linenumber">97</context>
</context-group>
</trans-unit>
<trans-unit id="1519954996184640001" datatype="html">
@ -7829,6 +7829,14 @@
<context context-type="linenumber">249</context>
</context-group>
</trans-unit>
<trans-unit id="7303091661854783304" datatype="html">
<source>United Kingdom</source>
<target state="new">United Kingdom</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">96</context>
</context-group>
</trans-unit>
</body>
</file>
</xliff>

17
libs/common/src/lib/personal-finance-tools.ts

@ -44,6 +44,15 @@ export const personalFinanceTools: Product[] = [
pricingPerYear: '$120',
slogan: 'Analyze and track your portfolio.'
},
{
founded: 2022,
hasFreePlan: false,
key: 'asseta',
languages: ['English'],
name: 'Asseta',
origin: 'United States',
slogan: 'The Intelligent Family Office Suite'
},
{
hasFreePlan: false,
hasSelfHostingAbility: true,
@ -149,6 +158,14 @@ export const personalFinanceTools: Product[] = [
pricingPerYear: '$70',
slogan: 'Do money better with Copilot'
},
{
founded: 2023,
hasFreePlan: false,
key: 'danti',
name: 'Danti',
origin: 'United Kingdom',
slogan: 'Digitising Generational Wealth'
},
{
founded: 2020,
key: 'de.fi',

1
libs/ui/src/lib/i18n.ts

@ -93,6 +93,7 @@ const locales = {
Switzerland: $localize`Switzerland`,
Thailand: $localize`Thailand`,
Ukraine: $localize`Ukraine`,
'United Kingdom': $localize`United Kingdom`,
'United States': $localize`United States`,
// Fear and Greed Index

16
package-lock.json

@ -1,12 +1,12 @@
{
"name": "ghostfolio",
"version": "2.147.0",
"version": "2.148.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "ghostfolio",
"version": "2.147.0",
"version": "2.148.0",
"hasInstallScript": true,
"license": "AGPL-3.0",
"dependencies": {
@ -76,7 +76,7 @@
"ng-extract-i18n-merge": "2.14.1",
"ngx-device-detector": "9.0.0",
"ngx-markdown": "19.0.0",
"ngx-skeleton-loader": "9.0.0",
"ngx-skeleton-loader": "10.0.0",
"ngx-stripe": "19.0.0",
"open-color": "1.9.1",
"papaparse": "5.3.1",
@ -25625,16 +25625,16 @@
}
},
"node_modules/ngx-skeleton-loader": {
"version": "9.0.0",
"resolved": "https://registry.npmjs.org/ngx-skeleton-loader/-/ngx-skeleton-loader-9.0.0.tgz",
"integrity": "sha512-aO4/V6oGdZGNcTjasTg/fwzJJYl/ZmNKgCukOEQdUK3GSFOZtB/3GGULMJuZ939hk3Hzqh1OBiLfIM1SqTfhqg==",
"version": "10.0.0",
"resolved": "https://registry.npmjs.org/ngx-skeleton-loader/-/ngx-skeleton-loader-10.0.0.tgz",
"integrity": "sha512-TYrWLrdRtzoZoPzurNDUJdAbdyplqgyDztCefEi+clHl5MSumwG4NrGxZC1OVxz7RitomhnF7wTM8T/j+tdwXw==",
"license": "MIT",
"dependencies": {
"tslib": "^2.0.0"
},
"peerDependencies": {
"@angular/common": ">=16.0.0",
"@angular/core": ">=16.0.0"
"@angular/common": ">=18.0.0",
"@angular/core": ">=18.0.0"
}
},
"node_modules/ngx-stripe": {

4
package.json

@ -1,6 +1,6 @@
{
"name": "ghostfolio",
"version": "2.147.0",
"version": "2.148.0",
"homepage": "https://ghostfol.io",
"license": "AGPL-3.0",
"repository": "https://github.com/ghostfolio/ghostfolio",
@ -122,7 +122,7 @@
"ng-extract-i18n-merge": "2.14.1",
"ngx-device-detector": "9.0.0",
"ngx-markdown": "19.0.0",
"ngx-skeleton-loader": "9.0.0",
"ngx-skeleton-loader": "10.0.0",
"ngx-stripe": "19.0.0",
"open-color": "1.9.1",
"papaparse": "5.3.1",

5
prisma/migrations/20250324072407_added_is_active_to_symbol_profile/migration.sql

@ -0,0 +1,5 @@
-- AlterTable
ALTER TABLE "SymbolProfile" ADD COLUMN "isActive" BOOLEAN NOT NULL DEFAULT true;
-- CreateIndex
CREATE INDEX "SymbolProfile_isActive_idx" ON "SymbolProfile"("isActive");

2
prisma/schema.prisma

@ -181,6 +181,7 @@ model SymbolProfile {
figiShareClass String?
holdings Json? @default("[]")
id String @id @default(uuid())
isActive Boolean @default(true)
isin String?
name String?
updatedAt DateTime @updatedAt
@ -199,6 +200,7 @@ model SymbolProfile {
@@index([currency])
@@index([cusip])
@@index([dataSource])
@@index([isActive])
@@index([isin])
@@index([name])
@@index([symbol])

Loading…
Cancel
Save