Merge branch 'main' of github.com:ghostfolio/ghostfolio
Some checks failed
Docker image CD / build_and_push (push) Failing after 1h11m20s

This commit is contained in:
2025-07-05 10:42:00 -07:00
12 changed files with 94 additions and 62 deletions

View File

@@ -5,6 +5,20 @@ 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
### Changed
- Increased the width of the markets overview
- Increased the width of the watchlist
- Renamed `Access` to `accessesGet` in the `User` database schema
- Improved the language localization for Italian (`it`)
- Upgraded `prisma` from version `6.10.1` to `6.11.1`
### Fixed
- Set the name column to sticky in the table of the benchmark component
## 2.177.0 - 2025-07-03
### Added

View File

@@ -180,7 +180,7 @@ export class UserService {
userWhereUniqueInput: Prisma.UserWhereUniqueInput
): Promise<UserWithSettings | null> {
const {
Access,
accessesGet,
accessToken,
accounts,
analytics,
@@ -195,7 +195,7 @@ export class UserService {
updatedAt
} = await this.prismaService.user.findUnique({
include: {
Access: true,
accessesGet: true,
accounts: {
include: { platform: true }
},
@@ -207,7 +207,7 @@ export class UserService {
});
const user: UserWithSettings = {
Access,
accessesGet,
accessToken,
accounts,
authChallenge,

View File

@@ -2,7 +2,7 @@
<h1 class="d-none d-sm-block h3 mb-4 text-center" i18n>Markets</h1>
@if (hasPermissionToAccessFearAndGreedIndex) {
<div class="mb-5 row">
<div class="col-xs-12 col-md-8 offset-md-2">
<div class="col-xs-12 col-md-10 offset-md-1">
<div class="mb-2 text-center text-muted">
<small i18n>Last {{ numberOfDays }} Days</small>
</div>
@@ -29,7 +29,7 @@
}
<div class="mb-3 row">
<div class="col-xs-12 col-md-8 offset-md-2">
<div class="col-xs-12 col-md-10 offset-md-1">
<gf-benchmark
[benchmarks]="benchmarks"
[deviceType]="deviceType"

View File

@@ -8,7 +8,7 @@
</span>
</h1>
<div class="row">
<div class="col-xs-12 col-md-8 offset-md-2">
<div class="col-xs-12 col-md-10 offset-md-1">
<gf-benchmark
[benchmarks]="watchlist"
[deviceType]="deviceType"

View File

@@ -7715,7 +7715,7 @@
</trans-unit>
<trans-unit id="440264111109852789" datatype="html">
<source>Live Demo</source>
<target state="new">Live Demo</target>
<target state="translated">Dimostrazione dal vivo</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/common/src/lib/routes/routes.ts</context>
<context context-type="linenumber">231</context>
@@ -7731,7 +7731,7 @@
</trans-unit>
<trans-unit id="rule.accountClusterRiskSingleAccount" datatype="html">
<source>Single Account</source>
<target state="new">Single Account</target>
<target state="translated">Conto unico</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/i18n/i18n-page.html</context>
<context context-type="linenumber">24</context>
@@ -7739,7 +7739,7 @@
</trans-unit>
<trans-unit id="rule.accountClusterRiskSingleAccount.false" datatype="html">
<source> Your net worth is managed by a single account </source>
<target state="new"> Your net worth is managed by a single account </target>
<target state="translated"> Il tuo patrimonio netto è gestito da un unico account </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/i18n/i18n-page.html</context>
<context context-type="linenumber">25</context>
@@ -7747,7 +7747,7 @@
</trans-unit>
<trans-unit id="rule.accountClusterRiskSingleAccount.true" datatype="html">
<source> Your net worth is managed by ${accountsLength} accounts </source>
<target state="new"> Your net worth is managed by ${accountsLength} accounts </target>
<target state="translated"> Il tuo patrimonio netto è gestito da account ${accountsLength} </target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/i18n/i18n-page.html</context>
<context context-type="linenumber">28</context>
@@ -7755,7 +7755,7 @@
</trans-unit>
<trans-unit id="0a1fd4a1825c34244edae54609c766dc27593e2c" datatype="html">
<source> Holdings </source>
<target state="new"> Holdings </target>
<target state="translated"> Partecipazioni </target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.html</context>
<context context-type="linenumber">69</context>
@@ -7763,7 +7763,7 @@
</trans-unit>
<trans-unit id="routes.resources.personalFinanceTools" datatype="html">
<source>personal-finance-tools</source>
<target state="new">personal-finance-tools</target>
<target state="translated">strumenti-di-finanza-personale</target>
<note priority="1" from="description">kebab-case</note>
<context-group purpose="location">
<context context-type="sourcefile">libs/common/src/lib/routes/routes.ts</context>
@@ -7780,7 +7780,7 @@
</trans-unit>
<trans-unit id="routes.resources.markets" datatype="html">
<source>markets</source>
<target state="new">markets</target>
<target state="translated">mercati</target>
<note priority="1" from="description">kebab-case</note>
<context-group purpose="location">
<context context-type="sourcefile">libs/common/src/lib/routes/routes.ts</context>
@@ -7801,7 +7801,7 @@
</trans-unit>
<trans-unit id="101d5e861e35b1aacb9a620938c2b886dbbb515a" datatype="html">
<source>Get Access</source>
<target state="new">Get Access</target>
<target state="translated">Ottieni laccesso</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
<context context-type="linenumber">27</context>
@@ -7809,7 +7809,7 @@
</trans-unit>
<trans-unit id="e2dcf27db9c6a5e249960c576014aa40b3883360" datatype="html">
<source>Learn more</source>
<target state="new">Learn more</target>
<target state="translated">Saperne di più</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
<context context-type="linenumber">38</context>
@@ -7817,7 +7817,7 @@
</trans-unit>
<trans-unit id="50b3e721b5c4731ab004595b348ce2a7737e81b3" datatype="html">
<source>new</source>
<target state="new">new</target>
<target state="translated">nuovo</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-settings/admin-settings.component.html</context>
<context context-type="linenumber">67</context>
@@ -7825,7 +7825,7 @@
</trans-unit>
<trans-unit id="2b3030c13e8ffdfbfcaf6d487dbe23e4f9b8f4d7" datatype="html">
<source>Limited Offer!</source>
<target state="new">Limited Offer!</target>
<target state="translated">Offerta limitata!</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">311</context>
@@ -7841,7 +7841,7 @@
</trans-unit>
<trans-unit id="b7da3e3505cc80f9bf3cffc8444c53e8a9ec70a5" datatype="html">
<source>Available</source>
<target state="new">Available</target>
<target state="translated">Disponibile</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/data-provider-status/data-provider-status.component.html</context>
<context context-type="linenumber">3</context>
@@ -7849,7 +7849,7 @@
</trans-unit>
<trans-unit id="15c02cb6b6c3be53477e502d3e1ee26955b23af0" datatype="html">
<source>Unavailable</source>
<target state="new">Unavailable</target>
<target state="translated">Non disponibile</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/data-provider-status/data-provider-status.component.html</context>
<context context-type="linenumber">5</context>
@@ -7857,7 +7857,7 @@
</trans-unit>
<trans-unit id="7387635272539030076" datatype="html">
<source>new</source>
<target state="new">new</target>
<target state="translated">nuovo</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/admin/admin-page.component.ts</context>
<context context-type="linenumber">37</context>

View File

@@ -185,7 +185,7 @@ export function hasReadRestrictedAccessPermission({
return false;
}
const access = user.Access?.find(({ id }) => {
const access = user.accessesGet?.find(({ id }) => {
return id === impersonationId;
});

View File

@@ -5,7 +5,7 @@ import { Access, Account, Settings, User } from '@prisma/client';
// TODO: Compare with User interface
export type UserWithSettings = User & {
Access: Access[];
accessesGet: Access[];
accounts: Account[];
activityCount: number;
dataProviderGhostfolioDailyRequests: number;

View File

@@ -7,7 +7,7 @@
matSortDirection="asc"
[dataSource]="dataSource"
>
<ng-container matColumnDef="name">
<ng-container matColumnDef="name" sticky>
<th *matHeaderCellDef class="px-2" i18n mat-header-cell mat-sort-header>
Name
</th>

72
package-lock.json generated
View File

@@ -43,7 +43,7 @@
"@nestjs/schedule": "6.0.0",
"@nestjs/serve-static": "5.0.3",
"@openrouter/ai-sdk-provider": "0.7.2",
"@prisma/client": "6.10.1",
"@prisma/client": "6.11.1",
"@simplewebauthn/browser": "13.1.0",
"@simplewebauthn/server": "13.1.1",
"@stripe/stripe-js": "7.3.1",
@@ -151,7 +151,7 @@
"nx": "21.1.2",
"prettier": "3.6.2",
"prettier-plugin-organize-attributes": "1.0.0",
"prisma": "6.10.1",
"prisma": "6.11.1",
"react": "18.2.0",
"react-dom": "18.2.0",
"replace-in-file": "8.3.0",
@@ -9895,9 +9895,9 @@
"license": "MIT"
},
"node_modules/@prisma/client": {
"version": "6.10.1",
"resolved": "https://registry.npmjs.org/@prisma/client/-/client-6.10.1.tgz",
"integrity": "sha512-Re4pMlcUsQsUTAYMK7EJ4Bw2kg3WfZAAlr8GjORJaK4VOP6LxRQUQ1TuLnxcF42XqGkWQ36q5CQF1yVadANQ6w==",
"version": "6.11.1",
"resolved": "https://registry.npmjs.org/@prisma/client/-/client-6.11.1.tgz",
"integrity": "sha512-5CLFh8QP6KxRm83pJ84jaVCeSVPQr8k0L2SEtOJHwdkS57/VQDcI/wQpGmdyOZi+D9gdNabdo8tj1Uk+w+upsQ==",
"hasInstallScript": true,
"license": "Apache-2.0",
"engines": {
@@ -9917,9 +9917,9 @@
}
},
"node_modules/@prisma/config": {
"version": "6.10.1",
"resolved": "https://registry.npmjs.org/@prisma/config/-/config-6.10.1.tgz",
"integrity": "sha512-kz4/bnqrOrzWo8KzYguN0cden4CzLJJ+2VSpKtF8utHS3l1JS0Lhv6BLwpOX6X9yNreTbZQZwewb+/BMPDCIYQ==",
"version": "6.11.1",
"resolved": "https://registry.npmjs.org/@prisma/config/-/config-6.11.1.tgz",
"integrity": "sha512-z6rCTQN741wxDq82cpdzx2uVykpnQIXalLhrWQSR0jlBVOxCIkz3HZnd8ern3uYTcWKfB3IpVAF7K2FU8t/8AQ==",
"devOptional": true,
"license": "Apache-2.0",
"dependencies": {
@@ -9937,53 +9937,53 @@
}
},
"node_modules/@prisma/debug": {
"version": "6.10.1",
"resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-6.10.1.tgz",
"integrity": "sha512-k2YT53cWxv9OLjW4zSYTZ6Z7j0gPfCzcr2Mj99qsuvlxr8WAKSZ2NcSR0zLf/mP4oxnYG842IMj3utTgcd7CaA==",
"version": "6.11.1",
"resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-6.11.1.tgz",
"integrity": "sha512-lWRb/YSWu8l4Yum1UXfGLtqFzZkVS2ygkWYpgkbgMHn9XJlMITIgeMvJyX5GepChzhmxuSuiq/MY/kGFweOpGw==",
"devOptional": true,
"license": "Apache-2.0"
},
"node_modules/@prisma/engines": {
"version": "6.10.1",
"resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-6.10.1.tgz",
"integrity": "sha512-Q07P5rS2iPwk2IQr/rUQJ42tHjpPyFcbiH7PXZlV81Ryr9NYIgdxcUrwgVOWVm5T7ap02C0dNd1dpnNcSWig8A==",
"version": "6.11.1",
"resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-6.11.1.tgz",
"integrity": "sha512-6eKEcV6V8W2eZAUwX2xTktxqPM4vnx3sxz3SDtpZwjHKpC6lhOtc4vtAtFUuf5+eEqBk+dbJ9Dcaj6uQU+FNNg==",
"devOptional": true,
"hasInstallScript": true,
"license": "Apache-2.0",
"dependencies": {
"@prisma/debug": "6.10.1",
"@prisma/engines-version": "6.10.1-1.9b628578b3b7cae625e8c927178f15a170e74a9c",
"@prisma/fetch-engine": "6.10.1",
"@prisma/get-platform": "6.10.1"
"@prisma/debug": "6.11.1",
"@prisma/engines-version": "6.11.1-1.f40f79ec31188888a2e33acda0ecc8fd10a853a9",
"@prisma/fetch-engine": "6.11.1",
"@prisma/get-platform": "6.11.1"
}
},
"node_modules/@prisma/engines-version": {
"version": "6.10.1-1.9b628578b3b7cae625e8c927178f15a170e74a9c",
"resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-6.10.1-1.9b628578b3b7cae625e8c927178f15a170e74a9c.tgz",
"integrity": "sha512-ZJFTsEqapiTYVzXya6TUKYDFnSWCNegfUiG5ik9fleQva5Sk3DNyyUi7X1+0ZxWFHwHDr6BZV5Vm+iwP+LlciA==",
"version": "6.11.1-1.f40f79ec31188888a2e33acda0ecc8fd10a853a9",
"resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-6.11.1-1.f40f79ec31188888a2e33acda0ecc8fd10a853a9.tgz",
"integrity": "sha512-swFJTOOg4tHyOM1zB/pHb3MeH0i6t7jFKn5l+ZsB23d9AQACuIRo9MouvuKGvnDogzkcjbWnXi/NvOZ0+n5Jfw==",
"devOptional": true,
"license": "Apache-2.0"
},
"node_modules/@prisma/fetch-engine": {
"version": "6.10.1",
"resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-6.10.1.tgz",
"integrity": "sha512-clmbG/Jgmrc/n6Y77QcBmAUlq9LrwI9Dbgy4pq5jeEARBpRCWJDJ7PWW1P8p0LfFU0i5fsyO7FqRzRB8mkdS4g==",
"version": "6.11.1",
"resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-6.11.1.tgz",
"integrity": "sha512-NBYzmkXTkj9+LxNPRSndaAeALOL1Gr3tjvgRYNqruIPlZ6/ixLeuE/5boYOewant58tnaYFZ5Ne0jFBPfGXHpQ==",
"devOptional": true,
"license": "Apache-2.0",
"dependencies": {
"@prisma/debug": "6.10.1",
"@prisma/engines-version": "6.10.1-1.9b628578b3b7cae625e8c927178f15a170e74a9c",
"@prisma/get-platform": "6.10.1"
"@prisma/debug": "6.11.1",
"@prisma/engines-version": "6.11.1-1.f40f79ec31188888a2e33acda0ecc8fd10a853a9",
"@prisma/get-platform": "6.11.1"
}
},
"node_modules/@prisma/get-platform": {
"version": "6.10.1",
"resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-6.10.1.tgz",
"integrity": "sha512-4CY5ndKylcsce9Mv+VWp5obbR2/86SHOLVV053pwIkhVtT9C9A83yqiqI/5kJM9T1v1u1qco/bYjDKycmei9HA==",
"version": "6.11.1",
"resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-6.11.1.tgz",
"integrity": "sha512-b2Z8oV2gwvdCkFemBTFd0x4lsL4O2jLSx8lB7D+XqoFALOQZPa7eAPE1NU0Mj1V8gPHRxIsHnyUNtw2i92psUw==",
"devOptional": true,
"license": "Apache-2.0",
"dependencies": {
"@prisma/debug": "6.10.1"
"@prisma/debug": "6.11.1"
}
},
"node_modules/@redis/client": {
@@ -29469,15 +29469,15 @@
}
},
"node_modules/prisma": {
"version": "6.10.1",
"resolved": "https://registry.npmjs.org/prisma/-/prisma-6.10.1.tgz",
"integrity": "sha512-khhlC/G49E4+uyA3T3H5PRBut486HD2bDqE2+rvkU0pwk9IAqGFacLFUyIx9Uw+W2eCtf6XGwsp+/strUwMNPw==",
"version": "6.11.1",
"resolved": "https://registry.npmjs.org/prisma/-/prisma-6.11.1.tgz",
"integrity": "sha512-VzJToRlV0s9Vu2bfqHiRJw73hZNCG/AyJeX+kopbu4GATTjTUdEWUteO3p4BLYoHpMS4o8pD3v6tF44BHNZI1w==",
"devOptional": true,
"hasInstallScript": true,
"license": "Apache-2.0",
"dependencies": {
"@prisma/config": "6.10.1",
"@prisma/engines": "6.10.1"
"@prisma/config": "6.11.1",
"@prisma/engines": "6.11.1"
},
"bin": {
"prisma": "build/index.js"

View File

@@ -89,7 +89,7 @@
"@nestjs/schedule": "6.0.0",
"@nestjs/serve-static": "5.0.3",
"@openrouter/ai-sdk-provider": "0.7.2",
"@prisma/client": "6.10.1",
"@prisma/client": "6.11.1",
"@simplewebauthn/browser": "13.1.0",
"@simplewebauthn/server": "13.1.1",
"@stripe/stripe-js": "7.3.1",
@@ -197,7 +197,7 @@
"nx": "21.1.2",
"prettier": "3.6.2",
"prettier-plugin-organize-attributes": "1.0.0",
"prisma": "6.10.1",
"prisma": "6.11.1",
"react": "18.2.0",
"react-dom": "18.2.0",
"replace-in-file": "8.3.0",

View File

@@ -244,6 +244,7 @@ model Tag {
}
model User {
accessesGet Access[] @relation("accessGet")
accessToken String?
accounts Account[]
activities Order[]
@@ -260,7 +261,6 @@ model User {
thirdPartyId String?
updatedAt DateTime @updatedAt
watchlist SymbolProfile[] @relation("UserWatchlist")
Access Access[] @relation("accessGet")
AccessGive Access[] @relation("accessGive")
Settings Settings?
SymbolProfile SymbolProfile[]

View File

@@ -0,0 +1,18 @@
{
"meta": {
"date": "2021-01-01T00:00:00.000Z",
"version": "dev"
},
"activities": [
{
"currency": "USD",
"dataSource": "YAHOO",
"date": "2021-01-01T00:00:00.000Z",
"fee": 0,
"quantity": 20,
"symbol": "AAPL",
"type": "<invalid>",
"unitPrice": 100.0
}
]
}