diff --git a/.github/workflows/build-code.yml b/.github/workflows/build-code.yml index 26ac7226b..e1f994749 100644 --- a/.github/workflows/build-code.yml +++ b/.github/workflows/build-code.yml @@ -4,6 +4,9 @@ on: pull_request: workflow_dispatch: +permissions: + contents: read + jobs: build: runs-on: ubuntu-latest @@ -13,12 +16,12 @@ jobs: - 18 steps: - name: Checkout code - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 - name: Use Node.js ${{ matrix.node_version }} - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: ${{ matrix.node_version }} cache: 'yarn' diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml index 406efd93e..47943977f 100644 --- a/.github/workflows/docker-image.yml +++ b/.github/workflows/docker-image.yml @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout code - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Docker metadata id: meta diff --git a/CHANGELOG.md b/CHANGELOG.md index 73f1a6477..6d0c6b748 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,12 +5,27 @@ 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 +## 2.26.0 - 2023-11-24 + +### Changed + +- Upgraded `prisma` from version `5.5.2` to `5.6.0` +- Upgraded `yahoo-finance2` from version `2.8.1` to `2.9.0` + +## 2.25.1 - 2023-11-19 + +### Added + +- Added a blog post: _Black Friday 2023_ ### Changed - Upgraded `http-status-codes` from version `2.2.0` to `2.3.0` +### Fixed + +- Handled reading items from missing transaction point while getting the position (`getPosition()`) in portfolio service + ## 2.24.0 - 2023-11-16 ### Changed diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts index 525273253..2a701aab5 100644 --- a/apps/api/src/app/portfolio/portfolio.service.ts +++ b/apps/api/src/app/portfolio/portfolio.service.ts @@ -879,7 +879,7 @@ export class PortfolioService { let currentAveragePrice = 0; let currentQuantity = 0; - const currentSymbol = transactionPoints[j].items.find( + const currentSymbol = transactionPoints[j]?.items.find( ({ symbol }) => { return symbol === aSymbol; } diff --git a/apps/api/src/app/user/user.service.ts b/apps/api/src/app/user/user.service.ts index 093587996..b72da8af1 100644 --- a/apps/api/src/app/user/user.service.ts +++ b/apps/api/src/app/user/user.service.ts @@ -198,16 +198,18 @@ export class UserService { new Date(), user.createdAt ); - let frequency = 20; + let frequency = 15; - if (daysSinceRegistration > 180) { + if (daysSinceRegistration > 365) { + frequency = 2; + } else if (daysSinceRegistration > 180) { frequency = 3; } else if (daysSinceRegistration > 60) { frequency = 5; } else if (daysSinceRegistration > 30) { - frequency = 10; + frequency = 8; } else if (daysSinceRegistration > 15) { - frequency = 15; + frequency = 12; } if (Analytics?.activityCount % frequency === 1) { diff --git a/apps/api/src/assets/sitemap.xml b/apps/api/src/assets/sitemap.xml index 4fbc9efac..7e2b64cfc 100644 --- a/apps/api/src/assets/sitemap.xml +++ b/apps/api/src/assets/sitemap.xml @@ -82,10 +82,18 @@ https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-capmon ${currentDate}T00:00:00+00:00 + + https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-compound-planning + ${currentDate}T00:00:00+00:00 + https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-copilot-money ${currentDate}T00:00:00+00:00 + + https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-de.fi + ${currentDate}T00:00:00+00:00 + https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-delta ${currentDate}T00:00:00+00:00 @@ -94,6 +102,10 @@ https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-divvydiary ${currentDate}T00:00:00+00:00 + + https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-empower + ${currentDate}T00:00:00+00:00 + https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-exirio ${currentDate}T00:00:00+00:00 @@ -202,6 +214,10 @@ https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-sumio ${currentDate}T00:00:00+00:00 + + https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-tiller + ${currentDate}T00:00:00+00:00 + https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-utluna ${currentDate}T00:00:00+00:00 @@ -214,6 +230,10 @@ https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-wealthica ${currentDate}T00:00:00+00:00 + + https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-whal + ${currentDate}T00:00:00+00:00 + https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-yeekatee ${currentDate}T00:00:00+00:00 @@ -326,6 +346,10 @@ https://ghostfol.io/en/blog/2023/09/hacktoberfest-2023 ${currentDate}T00:00:00+00:00 + + https://ghostfol.io/en/blog/2023/11/black-week-2023 + ${currentDate}T00:00:00+00:00 + https://ghostfol.io/en/blog/2023/11/hacktoberfest-2023-debriefing ${currentDate}T00:00:00+00:00 @@ -392,10 +416,18 @@ https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-capmon ${currentDate}T00:00:00+00:00 + + https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-compound-planning + ${currentDate}T00:00:00+00:00 + https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-copilot-money ${currentDate}T00:00:00+00:00 + + https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-de.fi + ${currentDate}T00:00:00+00:00 + https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-delta ${currentDate}T00:00:00+00:00 @@ -404,6 +436,10 @@ https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-divvydiary ${currentDate}T00:00:00+00:00 + + https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-empower + ${currentDate}T00:00:00+00:00 + https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-exirio ${currentDate}T00:00:00+00:00 @@ -512,6 +548,10 @@ https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-sumio ${currentDate}T00:00:00+00:00 + + https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-tiller + ${currentDate}T00:00:00+00:00 + https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-utluna ${currentDate}T00:00:00+00:00 @@ -524,6 +564,10 @@ https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-wealthica ${currentDate}T00:00:00+00:00 + + https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-whal + ${currentDate}T00:00:00+00:00 + https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-yeekatee ${currentDate}T00:00:00+00:00 @@ -726,10 +770,18 @@ https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-capmon ${currentDate}T00:00:00+00:00 + + https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-compound-planning + ${currentDate}T00:00:00+00:00 + https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-copilot-money ${currentDate}T00:00:00+00:00 + + https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-de.fi + ${currentDate}T00:00:00+00:00 + https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-delta ${currentDate}T00:00:00+00:00 @@ -738,6 +790,10 @@ https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-divvydiary ${currentDate}T00:00:00+00:00 + + https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-empower + ${currentDate}T00:00:00+00:00 + https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-exirio ${currentDate}T00:00:00+00:00 @@ -846,6 +902,10 @@ https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-sumio ${currentDate}T00:00:00+00:00 + + https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-tiller + ${currentDate}T00:00:00+00:00 + https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-utluna ${currentDate}T00:00:00+00:00 @@ -858,6 +918,10 @@ https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-wealthica ${currentDate}T00:00:00+00:00 + + https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-whal + ${currentDate}T00:00:00+00:00 + https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-yeekatee ${currentDate}T00:00:00+00:00 @@ -906,10 +970,18 @@ https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-capmon ${currentDate}T00:00:00+00:00 + + https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-compound-planning + ${currentDate}T00:00:00+00:00 + https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-copilot-money ${currentDate}T00:00:00+00:00 + + https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-de.fi + ${currentDate}T00:00:00+00:00 + https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-delta ${currentDate}T00:00:00+00:00 @@ -918,6 +990,10 @@ https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-divvydiary ${currentDate}T00:00:00+00:00 + + https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-empower + ${currentDate}T00:00:00+00:00 + https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-exirio ${currentDate}T00:00:00+00:00 @@ -1026,6 +1102,10 @@ https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-sumio ${currentDate}T00:00:00+00:00 + + https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-tiller + ${currentDate}T00:00:00+00:00 + https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-utluna ${currentDate}T00:00:00+00:00 @@ -1038,6 +1118,10 @@ https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-wealthica ${currentDate}T00:00:00+00:00 + + https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-whal + ${currentDate}T00:00:00+00:00 + https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-yeekatee ${currentDate}T00:00:00+00:00 diff --git a/apps/api/src/middlewares/html-template.middleware.ts b/apps/api/src/middlewares/html-template.middleware.ts index 3d61ae940..ac2551a51 100644 --- a/apps/api/src/middlewares/html-template.middleware.ts +++ b/apps/api/src/middlewares/html-template.middleware.ts @@ -76,6 +76,10 @@ const locales = { featureGraphicPath: 'assets/images/blog/hacktoberfest-2023.png', title: `Hacktoberfest 2023 - ${title}` }, + '/en/blog/2023/11/black-week-2023': { + featureGraphicPath: 'assets/images/blog/black-week-2023.jpg', + title: `Black Week 2023 - ${title}` + }, '/en/blog/2023/11/hacktoberfest-2023-debriefing': { featureGraphicPath: 'assets/images/blog/hacktoberfest-2023.png', title: `Hacktoberfest 2023 Debriefing - ${title}` @@ -87,6 +91,9 @@ const isFileRequest = (filename: string) => { return true; } else if ( filename.includes('auth/ey') || + filename.includes( + 'personal-finance-tools/open-source-alternative-to-de.fi' + ) || filename.includes( 'personal-finance-tools/open-source-alternative-to-markets.sh' ) diff --git a/apps/client/src/app/pages/blog/2022/11/black-friday-2022/black-friday-2022-page.html b/apps/client/src/app/pages/blog/2022/11/black-friday-2022/black-friday-2022-page.html index 8da5f55b5..093d62f05 100644 --- a/apps/client/src/app/pages/blog/2022/11/black-friday-2022/black-friday-2022-page.html +++ b/apps/client/src/app/pages/blog/2022/11/black-friday-2022/black-friday-2022-page.html @@ -15,11 +15,13 @@

Get 75% off on our - Ghostfolio Premium - + Ghostfolio Premium + annual plan for ambitious investors who need the full picture of their financial assets.

diff --git a/apps/client/src/app/pages/blog/2023/11/black-week-2023/black-week-2023-page.component.ts b/apps/client/src/app/pages/blog/2023/11/black-week-2023/black-week-2023-page.component.ts new file mode 100644 index 000000000..be354c55a --- /dev/null +++ b/apps/client/src/app/pages/blog/2023/11/black-week-2023/black-week-2023-page.component.ts @@ -0,0 +1,16 @@ +import { Component } from '@angular/core'; +import { MatButtonModule } from '@angular/material/button'; +import { RouterModule } from '@angular/router'; +import { GfPremiumIndicatorModule } from '@ghostfolio/ui/premium-indicator'; + +@Component({ + host: { class: 'page' }, + imports: [GfPremiumIndicatorModule, MatButtonModule, RouterModule], + selector: 'gf-black-week-2023-page', + standalone: true, + templateUrl: './black-week-2023-page.html' +}) +export class BlackWeek2023PageComponent { + public routerLinkFeatures = ['/' + $localize`features`]; + public routerLinkPricing = ['/' + $localize`pricing`]; +} diff --git a/apps/client/src/app/pages/blog/2023/11/black-week-2023/black-week-2023-page.html b/apps/client/src/app/pages/blog/2023/11/black-week-2023/black-week-2023-page.html new file mode 100644 index 000000000..352e0b5ce --- /dev/null +++ b/apps/client/src/app/pages/blog/2023/11/black-week-2023/black-week-2023-page.html @@ -0,0 +1,161 @@ +
+
+
+
+
+

Black Week 2023

+
2023-11-19
+ Black Week 2023 Teaser +
+
+

+ Ambitious investors on a life-changing mission, this is your chance! + Get 33% off on our + Ghostfolio Premium + + annual plan with our exclusive Black Week deal. Elevate your + financial strategy with the power of Ghostfolio designed to give you + the full picture of your assets. +

+
+
+

+ Ghostfolio + is a modern web application to manage personal finances. This Open + Source Software (OSS) dynamically aggregates your diverse assets + including stocks, ETFs, cryptocurrencies, commodities, etc. and + presents a comprehensive overview of your portfolio in real-time. + Empower yourself to make informed, data-driven investment decisions + with the robust analytics at your fingertips. Explore the numerous + features to enhance your + wealth management experience. +

+
+
+

+ Snap the limited Black Week 2023 deal before it’s gone. For detailed + information on plans and pricing, please visit our + pricing page. +

+

+ Get the Deal +

+
+
+
    +
  • + 2023 +
  • +
  • + Black Friday +
  • +
  • + Black Week +
  • +
  • + Cloud +
  • +
  • + Cryptocurrency +
  • +
  • + Deal +
  • +
  • + ETF +
  • +
  • + Finance +
  • +
  • + Fintech +
  • +
  • + Ghostfolio +
  • +
  • + Ghostfolio Premium +
  • +
  • + Hosting +
  • +
  • + Investment +
  • +
  • + Open Source +
  • +
  • + OSS +
  • +
  • + Personal Finance +
  • +
  • + Portfolio +
  • +
  • + Portfolio Tracker +
  • +
  • + Pricing +
  • +
  • + SaaS +
  • +
  • + Software +
  • +
  • + Stock +
  • +
  • + Subscription +
  • +
  • + Wealth +
  • +
  • + Wealth Management +
  • +
  • + Web3 +
  • +
  • + Web 3.0 +
  • +
+
+ +
+
+
+
diff --git a/apps/client/src/app/pages/blog/blog-page-routing.module.ts b/apps/client/src/app/pages/blog/blog-page-routing.module.ts index 46b4b5fa2..487f53f02 100644 --- a/apps/client/src/app/pages/blog/blog-page-routing.module.ts +++ b/apps/client/src/app/pages/blog/blog-page-routing.module.ts @@ -172,6 +172,15 @@ const routes: Routes = [ './2023/11/hacktoberfest-2023-debriefing/hacktoberfest-2023-debriefing-page.component' ).then((c) => c.Hacktoberfest2023DebriefingPageComponent), title: 'Hacktoberfest 2023 Debriefing' + }, + { + canActivate: [AuthGuard], + path: '2023/11/black-week-2023', + loadComponent: () => + import('./2023/11/black-week-2023/black-week-2023-page.component').then( + (c) => c.BlackWeek2023PageComponent + ), + title: 'Black Week 2023' } ]; diff --git a/apps/client/src/app/pages/blog/blog-page.html b/apps/client/src/app/pages/blog/blog-page.html index e34bf9dd2..70bf771e3 100644 --- a/apps/client/src/app/pages/blog/blog-page.html +++ b/apps/client/src/app/pages/blog/blog-page.html @@ -8,6 +8,34 @@ finance + + + + +
diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html b/apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html index 0522915f5..a2daeaf24 100644 --- a/apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html +++ b/apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html @@ -230,23 +230,26 @@
  • - {{ product1.name }} + Alternative
  • - {{ product2.name }} + App
  • - Alternative + Budgeting
  • - App + Community
  • - Community + Family Office
  • Fintech
  • +
  • + {{ product1.name }} +
  • Investment
  • @@ -280,9 +283,15 @@
  • Wealth
  • +
  • + WealthTech +
  • Wealth Management
  • +
  • + {{ product2.name }} +