|
diff --git a/apps/client/src/app/components/admin-tag/admin-tag.component.ts b/apps/client/src/app/components/admin-tag/admin-tag.component.ts
index 12ac1f368b..b08b144cf8 100644
--- a/apps/client/src/app/components/admin-tag/admin-tag.component.ts
+++ b/apps/client/src/app/components/admin-tag/admin-tag.component.ts
@@ -7,6 +7,7 @@ import {
getLowercase,
isSystemTag
} from '@ghostfolio/common/helper';
+import { TagWithAccountAndActivityCount } from '@ghostfolio/common/types';
import { translate } from '@ghostfolio/ui/i18n';
import { NotificationService } from '@ghostfolio/ui/notifications';
import { DataService } from '@ghostfolio/ui/services';
@@ -32,7 +33,6 @@ import { MatSort, MatSortModule } from '@angular/material/sort';
import { MatTableDataSource, MatTableModule } from '@angular/material/table';
import { ActivatedRoute, Router, RouterModule } from '@angular/router';
import { IonIcon } from '@ionic/angular/standalone';
-import { Tag } from '@prisma/client';
import { addIcons } from 'ionicons';
import {
createOutline,
@@ -63,17 +63,20 @@ import { CreateOrUpdateTagDialogParams } from './create-or-update-tag-dialog/int
export class GfAdminTagComponent implements OnInit {
public readonly locale = input(getLocale());
- protected dataSource = new MatTableDataSource();
+ protected dataSource =
+ new MatTableDataSource();
+
protected readonly displayedColumns = [
'name',
'userId',
'accounts',
'activities',
+ 'total',
'actions'
];
protected readonly isSystemTag = isSystemTag;
protected readonly pageSize = DEFAULT_PAGE_SIZE;
- protected tags: Tag[];
+ protected tags: TagWithAccountAndActivityCount[];
protected readonly translate = translate;
private readonly deviceType = computed(
@@ -120,6 +123,13 @@ export class GfAdminTagComponent implements OnInit {
this.fetchTags();
}
+ protected getTotalCount({
+ accountCount,
+ activityCount
+ }: TagWithAccountAndActivityCount) {
+ return accountCount + activityCount;
+ }
+
protected onDeleteTag(aId: string) {
this.notificationService.confirm({
confirmFn: () => {
@@ -130,7 +140,7 @@ export class GfAdminTagComponent implements OnInit {
});
}
- protected onUpdateTag({ id }: Tag) {
+ protected onUpdateTag({ id }: TagWithAccountAndActivityCount) {
this.router.navigate([], {
queryParams: { editTagDialog: true, tagId: id }
});
@@ -164,9 +174,13 @@ export class GfAdminTagComponent implements OnInit {
this.dataSource.sort = this.sort();
this.dataSource.sortingDataAccessor = (tag, path) => {
- return path === 'name'
- ? translate(tag.name).toLocaleLowerCase()
- : (getLowercase(tag, path) as number | string);
+ if (path === 'name') {
+ return translate(tag.name).toLocaleLowerCase();
+ } else if (path === 'totalCount') {
+ return this.getTotalCount(tag);
+ }
+
+ return getLowercase(tag, path) as number | string;
};
this.dataService.updateInfo();
diff --git a/libs/common/src/lib/types/index.ts b/libs/common/src/lib/types/index.ts
index 9a44efc1af..fb0f6462c6 100644
--- a/libs/common/src/lib/types/index.ts
+++ b/libs/common/src/lib/types/index.ts
@@ -24,6 +24,7 @@ import type { PropertyKey } from './property-key.type';
import type { RequestWithUser } from './request-with-user.type';
import type { SectorName } from './sector-name.type';
import type { SubscriptionOfferKey } from './subscription-offer-key.type';
+import type { TagWithAccountAndActivityCount } from './tag-with-account-and-activity-count.type';
import type { ToggleOption } from './toggle-option.type';
import type { UserWithSettings } from './user-with-settings.type';
import type { ViewMode } from './view-mode.type';
@@ -55,6 +56,7 @@ export type {
RequestWithUser,
SectorName,
SubscriptionOfferKey,
+ TagWithAccountAndActivityCount,
ToggleOption,
UserWithSettings,
ViewMode
diff --git a/libs/common/src/lib/types/tag-with-account-and-activity-count.type.ts b/libs/common/src/lib/types/tag-with-account-and-activity-count.type.ts
new file mode 100644
index 0000000000..662e0f5ce9
--- /dev/null
+++ b/libs/common/src/lib/types/tag-with-account-and-activity-count.type.ts
@@ -0,0 +1,6 @@
+import { Tag } from '@prisma/client';
+
+export type TagWithAccountAndActivityCount = Tag & {
+ accountCount: number;
+ activityCount: number;
+};
diff --git a/libs/ui/src/lib/services/data.service.ts b/libs/ui/src/lib/services/data.service.ts
index 2b390df3c5..e09632079c 100644
--- a/libs/ui/src/lib/services/data.service.ts
+++ b/libs/ui/src/lib/services/data.service.ts
@@ -62,7 +62,8 @@ import { filterGlobalPermissions } from '@ghostfolio/common/permissions';
import type {
AiPromptMode,
DateRange,
- GroupBy
+ GroupBy,
+ TagWithAccountAndActivityCount
} from '@ghostfolio/common/types';
import { translate } from '@ghostfolio/ui/i18n';
@@ -843,7 +844,7 @@ export class DataService {
}
public fetchTags() {
- return this.http.get('/api/v1/tags');
+ return this.http.get('/api/v1/tags');
}
public fetchWatchlist() {
From c1c73e145a30357d787899ad165e9e7169b15423 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Szymon=20=C5=81=C4=85giewka?=
Date: Tue, 29 Sep 2026 19:40:51 +0200
Subject: [PATCH 2/2] Task/migrate client to prisma-client generated code
(#7868)
* Migrate client to prisma-client generated code
* Update changelog
---
.gitignore | 1 +
CHANGELOG.md | 4 ++++
apps/api/eslint.config.cjs | 5 ++++-
.../account-detail-dialog.component.ts | 2 +-
.../admin-market-data.component.ts | 3 ++-
.../asset-profile-dialog-host.component.ts | 2 +-
.../asset-profile-dialog.component.ts | 22 ++++++++++---------
.../interfaces/interfaces.ts | 3 +--
.../create-asset-profile-dialog.component.ts | 2 +-
.../admin-platform.component.ts | 2 +-
.../interfaces/interfaces.ts | 2 +-
.../interfaces/interfaces.ts | 2 +-
.../benchmark-comparator.component.ts | 2 +-
.../data-provider-status.component.ts | 2 +-
.../holding-detail-dialog.component.ts | 2 +-
.../interfaces/interfaces.ts | 3 +--
...reate-or-update-access-dialog.component.ts | 2 +-
.../user-detail-dialog.component.ts | 2 +-
apps/client/src/app/interfaces/interfaces.ts | 3 ++-
...eate-or-update-account-dialog.component.ts | 2 +-
.../interfaces/interfaces.ts | 3 +--
...ate-or-update-activity-dialog.component.ts | 3 ++-
.../types/activity-type.type.ts | 2 +-
.../import-activities-dialog.component.ts | 2 +-
.../interfaces/interfaces.ts | 3 +--
.../allocations/allocations-page.component.ts | 13 +++++------
.../analysis/analysis-page.component.ts | 2 +-
.../src/app/services/ics/ics.service.ts | 2 +-
.../app/services/import-activities.service.ts | 3 ++-
eslint.config.cjs | 12 ++++++++++
libs/common/src/lib/config.ts | 8 ++++++-
libs/common/src/lib/dtos/create-access.dto.ts | 2 +-
...eate-asset-profile-with-market-data.dto.ts | 2 +-
.../src/lib/dtos/create-asset-profile.dto.ts | 7 +++++-
libs/common/src/lib/dtos/create-order.dto.ts | 7 +++++-
.../src/lib/dtos/create-watchlist-item.dto.ts | 2 +-
.../src/lib/dtos/merge-asset-profile.dto.ts | 3 ++-
.../lib/dtos/update-asset-profile-data.dto.ts | 3 ++-
.../src/lib/dtos/update-asset-profile.dto.ts | 8 +++----
libs/common/src/lib/dtos/update-order.dto.ts | 7 +++++-
libs/common/src/lib/helper.ts | 17 ++++++++------
.../src/lib/interfaces/access.interface.ts | 2 +-
.../lib/interfaces/activities.interface.ts | 3 +--
.../admin-market-data-details.interface.ts | 2 +-
.../lib/interfaces/admin-user.interface.ts | 3 ++-
.../asset-class-selector-option.interface.ts | 2 +-
.../asset-profile-identifier.interface.ts | 2 +-
.../asset-profile-item.interface.ts | 6 ++++-
.../data-provider-info.interface.ts | 2 +-
.../enhanced-asset-profile.interface.ts | 2 +-
.../src/lib/interfaces/info-item.interface.ts | 2 +-
.../lib/interfaces/lookup-item.interface.ts | 6 ++++-
.../portfolio-position.interface.ts | 3 +--
.../account-balances-response.interface.ts | 2 +-
.../asset-profile-response.interface.ts | 2 +-
...tfolio-asset-profile-response.interface.ts | 2 +-
.../data-provider-response.interface.ts | 3 +--
.../responses/export-response.interface.ts | 8 ++++++-
.../responses/platforms-response.interface.ts | 2 +-
.../portfolio-holding-response.interface.ts | 3 +--
.../public-portfolio-response.interface.ts | 3 +--
.../src/lib/interfaces/user-item.interface.ts | 2 +-
.../lib/interfaces/user-settings.interface.ts | 3 +--
.../src/lib/interfaces/user.interface.ts | 4 ++--
.../lib/models/portfolio-snapshot-holding.ts | 3 ++-
libs/common/src/lib/permissions.ts | 3 +--
libs/common/src/lib/scopes.ts | 3 +--
.../types/access-with-grantee-user.type.ts | 2 +-
.../lib/types/account-with-balance.type.ts | 2 +-
.../lib/types/account-with-platform.type.ts | 2 +-
.../src/lib/types/account-with-value.type.ts | 2 +-
.../src/lib/types/order-with-account.type.ts | 2 +-
...ag-with-account-and-activity-count.type.ts | 2 +-
.../src/lib/types/user-with-settings.type.ts | 3 +--
.../activities-table.component.ts | 2 +-
.../activity-type/activity-type.component.ts | 3 ++-
.../interfaces/interfaces.ts | 3 +--
.../lib/entity-logo/entity-logo.component.ts | 2 +-
.../interfaces/interfaces.ts | 3 +--
...historical-market-data-editor.component.ts | 3 ++-
.../entity-logo-image-source.service.mock.ts | 3 +--
.../portfolio-filter-form.util.ts | 4 ++--
.../portfolio-proportion-chart.component.ts | 2 +-
libs/ui/src/lib/services/admin.service.ts | 6 ++++-
libs/ui/src/lib/services/data.service.ts | 18 +++++++--------
.../tags-selector/interfaces/interfaces.ts | 2 +-
nx.json | 3 ++-
prisma/schema.prisma | 9 ++++++--
tsconfig.base.json | 2 ++
89 files changed, 201 insertions(+), 136 deletions(-)
diff --git a/.gitignore b/.gitignore
index 58520c230b..5699a5929d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,6 +2,7 @@
# compiled output
/out-tsc
+/prisma/generated
/tmp
# dependencies
diff --git a/CHANGELOG.md b/CHANGELOG.md
index ff42504d49..d90f853cd0 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -11,6 +11,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Added the total column to the table of the tag management in the admin control panel
+### Changed
+
+- Migrated the client to the code generated by the new `prisma-client` generator of _Prisma_
+
## 3.75.0 - 2026-09-28
### Changed
diff --git a/apps/api/eslint.config.cjs b/apps/api/eslint.config.cjs
index 043802a0df..07054e44b9 100644
--- a/apps/api/eslint.config.cjs
+++ b/apps/api/eslint.config.cjs
@@ -21,7 +21,10 @@ module.exports = [
{
files: ['**/*.ts', '**/*.tsx'],
// Override or add rules here
- rules: {}
+ rules: {
+ // TODO: Remove once the API uses the code generated by the new prisma-client generator
+ '@typescript-eslint/no-restricted-imports': 'off'
+ }
},
{
files: ['**/*.js', '**/*.jsx'],
diff --git a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts
index 75186b1744..b8c7f16dbc 100644
--- a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts
+++ b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts
@@ -16,6 +16,7 @@ import {
} from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { hasScope, scopes } from '@ghostfolio/common/scopes';
+import type { Tag } from '@ghostfolio/prisma/browser';
import { GfAccountBalancesComponent } from '@ghostfolio/ui/account-balances';
import { GfActivitiesTableComponent } from '@ghostfolio/ui/activities-table';
import { GfDialogFooterComponent } from '@ghostfolio/ui/dialog-footer';
@@ -45,7 +46,6 @@ import { MatTableDataSource } from '@angular/material/table';
import { MatTabsModule } from '@angular/material/tabs';
import { NavigationStart, Router } from '@angular/router';
import { IonIcon } from '@ionic/angular/standalone';
-import { Tag } from '@prisma/client';
import { Big } from 'big.js';
import { format, parseISO } from 'date-fns';
import { addIcons } from 'ionicons';
diff --git a/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts b/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
index c01932b603..d1ea9d97eb 100644
--- a/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
+++ b/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
@@ -10,6 +10,8 @@ import {
} from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { internalRoutes } from '@ghostfolio/common/routes/routes';
+import type { SymbolProfile } from '@ghostfolio/prisma/browser';
+import { AssetSubClass, DataSource } from '@ghostfolio/prisma/enums';
import { GfActivitiesFilterComponent } from '@ghostfolio/ui/activities-filter';
import { GfFabComponent } from '@ghostfolio/ui/fab';
import { translate } from '@ghostfolio/ui/i18n';
@@ -48,7 +50,6 @@ import {
import { MatTableDataSource, MatTableModule } from '@angular/material/table';
import { Router, RouterModule } from '@angular/router';
import { IonIcon } from '@ionic/angular/standalone';
-import { AssetSubClass, DataSource, SymbolProfile } from '@prisma/client';
import { isUUID } from 'class-validator';
import { addIcons } from 'ionicons';
import {
diff --git a/apps/client/src/app/components/admin-market-data/asset-profile-dialog-host/asset-profile-dialog-host.component.ts b/apps/client/src/app/components/admin-market-data/asset-profile-dialog-host/asset-profile-dialog-host.component.ts
index 7b03762ff9..af83ef4a7d 100644
--- a/apps/client/src/app/components/admin-market-data/asset-profile-dialog-host/asset-profile-dialog-host.component.ts
+++ b/apps/client/src/app/components/admin-market-data/asset-profile-dialog-host/asset-profile-dialog-host.component.ts
@@ -5,6 +5,7 @@ import {
} from '@ghostfolio/common/config';
import { AssetProfileIdentifier, User } from '@ghostfolio/common/interfaces';
import { internalRoutes } from '@ghostfolio/common/routes/routes';
+import { DataSource } from '@ghostfolio/prisma/enums';
import { AdminService } from '@ghostfolio/ui/services';
import {
@@ -19,7 +20,6 @@ import {
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
import { MatDialog, MatDialogRef } from '@angular/material/dialog';
import { ActivatedRoute, Router } from '@angular/router';
-import { DataSource } from '@prisma/client';
import { DeviceDetectorService } from 'ngx-device-detector';
import { Subject } from 'rxjs';
import { distinctUntilChanged, map, takeUntil, tap } from 'rxjs/operators';
diff --git a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
index b2b2293e1a..154211b918 100644
--- a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
+++ b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
@@ -29,6 +29,18 @@ import {
} from '@ghostfolio/common/interfaces';
import { DateRange } from '@ghostfolio/common/types';
import { jsonValidator, validateObjectForForm } from '@ghostfolio/common/utils';
+import type {
+ AssetProfileSplit,
+ MarketData,
+ Prisma,
+ SymbolProfile
+} from '@ghostfolio/prisma/browser';
+import {
+ AssetClass,
+ AssetSubClass,
+ DataGatheringFrequency,
+ DataSource
+} from '@ghostfolio/prisma/enums';
import { GfCurrencySelectorComponent } from '@ghostfolio/ui/currency-selector';
import { GfEntityLogoComponent } from '@ghostfolio/ui/entity-logo';
import { GfHistoricalMarketDataEditorComponent } from '@ghostfolio/ui/historical-market-data-editor';
@@ -80,16 +92,6 @@ import { MatSelectModule } from '@angular/material/select';
import { MatSnackBar, MatSnackBarModule } from '@angular/material/snack-bar';
import { MatTabsModule } from '@angular/material/tabs';
import { IonIcon } from '@ionic/angular/standalone';
-import {
- AssetClass,
- AssetProfileSplit,
- AssetSubClass,
- DataGatheringFrequency,
- DataSource,
- MarketData,
- Prisma,
- SymbolProfile
-} from '@prisma/client';
import { isUUID } from 'class-validator';
import { format } from 'date-fns';
import { StatusCodes } from 'http-status-codes';
diff --git a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/interfaces/interfaces.ts b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/interfaces/interfaces.ts
index 6a966b4270..0f000364ee 100644
--- a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/interfaces/interfaces.ts
+++ b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/interfaces/interfaces.ts
@@ -1,6 +1,5 @@
import { ColorScheme } from '@ghostfolio/common/types';
-
-import { DataSource } from '@prisma/client';
+import { DataSource } from '@ghostfolio/prisma/enums';
export interface AssetProfileDialogParams {
colorScheme: ColorScheme;
diff --git a/apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.component.ts b/apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.component.ts
index b948708c2e..8b7ef793fc 100644
--- a/apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.component.ts
+++ b/apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.component.ts
@@ -4,6 +4,7 @@ import {
PROPERTY_CURRENCIES
} from '@ghostfolio/common/config';
import type { AssetProfileIdentifier } from '@ghostfolio/common/interfaces';
+import { DataSource } from '@ghostfolio/prisma/enums';
import { AdminService, DataService } from '@ghostfolio/ui/services';
import { GfSymbolAutocompleteComponent } from '@ghostfolio/ui/symbol-autocomplete';
@@ -31,7 +32,6 @@ import { MatDialogModule, MatDialogRef } from '@angular/material/dialog';
import { MatFormFieldModule } from '@angular/material/form-field';
import { MatInputModule } from '@angular/material/input';
import { MatRadioModule } from '@angular/material/radio';
-import { DataSource } from '@prisma/client';
import { isISO4217CurrencyCode } from 'class-validator';
import { switchMap } from 'rxjs';
diff --git a/apps/client/src/app/components/admin-platform/admin-platform.component.ts b/apps/client/src/app/components/admin-platform/admin-platform.component.ts
index 00b5ff0db2..0e6ed66d9b 100644
--- a/apps/client/src/app/components/admin-platform/admin-platform.component.ts
+++ b/apps/client/src/app/components/admin-platform/admin-platform.component.ts
@@ -3,6 +3,7 @@ import { DEFAULT_PAGE_SIZE } from '@ghostfolio/common/config';
import { CreatePlatformDto, UpdatePlatformDto } from '@ghostfolio/common/dtos';
import { ConfirmationDialogType } from '@ghostfolio/common/enums';
import { getLocale, getLowercase } from '@ghostfolio/common/helper';
+import type { Platform } from '@ghostfolio/prisma/browser';
import { GfEntityLogoComponent } from '@ghostfolio/ui/entity-logo';
import { NotificationService } from '@ghostfolio/ui/notifications';
import { AdminService, DataService } from '@ghostfolio/ui/services';
@@ -28,7 +29,6 @@ import { MatSort, MatSortModule } from '@angular/material/sort';
import { MatTableDataSource, MatTableModule } from '@angular/material/table';
import { ActivatedRoute, Router, RouterModule } from '@angular/router';
import { IonIcon } from '@ionic/angular/standalone';
-import { Platform } from '@prisma/client';
import { addIcons } from 'ionicons';
import {
createOutline,
diff --git a/apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/interfaces/interfaces.ts b/apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/interfaces/interfaces.ts
index d3b9ae5288..206cc14e79 100644
--- a/apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/interfaces/interfaces.ts
+++ b/apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/interfaces/interfaces.ts
@@ -1,4 +1,4 @@
-import { Platform } from '@prisma/client';
+import type { Platform } from '@ghostfolio/prisma/browser';
export interface CreateOrUpdatePlatformDialogParams {
platform?: Platform;
diff --git a/apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/interfaces/interfaces.ts b/apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/interfaces/interfaces.ts
index f4b1104d00..b866ea47dd 100644
--- a/apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/interfaces/interfaces.ts
+++ b/apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/interfaces/interfaces.ts
@@ -1,4 +1,4 @@
-import { Tag } from '@prisma/client';
+import type { Tag } from '@ghostfolio/prisma/browser';
export interface CreateOrUpdateTagDialogParams {
tag?: Pick;
diff --git a/apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts b/apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
index 8d5e3ff62b..ef14b404e4 100644
--- a/apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
+++ b/apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
@@ -12,6 +12,7 @@ import { LineChartItem, User } from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { internalRoutes } from '@ghostfolio/common/routes/routes';
import { ColorScheme } from '@ghostfolio/common/types';
+import type { SymbolProfile } from '@ghostfolio/prisma/browser';
import {
getTimeSeriesTooltipOptions,
registerChartConfiguration
@@ -32,7 +33,6 @@ import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { MatSelectModule } from '@angular/material/select';
import { RouterModule } from '@angular/router';
import { IonIcon } from '@ionic/angular/standalone';
-import { SymbolProfile } from '@prisma/client';
import {
Chart,
ChartData,
diff --git a/apps/client/src/app/components/data-provider-status/data-provider-status.component.ts b/apps/client/src/app/components/data-provider-status/data-provider-status.component.ts
index a77d65961a..13218623a0 100644
--- a/apps/client/src/app/components/data-provider-status/data-provider-status.component.ts
+++ b/apps/client/src/app/components/data-provider-status/data-provider-status.component.ts
@@ -1,3 +1,4 @@
+import type { DataSource } from '@ghostfolio/prisma/enums';
import { DataService } from '@ghostfolio/ui/services';
import { CommonModule } from '@angular/common';
@@ -9,7 +10,6 @@ import {
OnInit
} from '@angular/core';
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
-import type { DataSource } from '@prisma/client';
import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';
import { catchError, map, type Observable, of } from 'rxjs';
diff --git a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts
index d8385d70e2..4a16c1a4e2 100644
--- a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts
+++ b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts
@@ -25,6 +25,7 @@ import {
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { internalRoutes } from '@ghostfolio/common/routes/routes';
import { AccountWithValue } from '@ghostfolio/common/types';
+import type { MarketData, Tag } from '@ghostfolio/prisma/browser';
import { GfAccountsTableComponent } from '@ghostfolio/ui/accounts-table';
import { GfActivitiesTableComponent } from '@ghostfolio/ui/activities-table';
import { GfDataProviderCreditsComponent } from '@ghostfolio/ui/data-provider-credits';
@@ -69,7 +70,6 @@ import { MatTableDataSource } from '@angular/material/table';
import { MatTabsModule } from '@angular/material/tabs';
import { NavigationStart, Router, RouterModule } from '@angular/router';
import { IonIcon } from '@ionic/angular/standalone';
-import { MarketData, Tag } from '@prisma/client';
import { isUUID } from 'class-validator';
import { format, isSameMonth, isToday, parseISO } from 'date-fns';
import { addIcons } from 'ionicons';
diff --git a/apps/client/src/app/components/holding-detail-dialog/interfaces/interfaces.ts b/apps/client/src/app/components/holding-detail-dialog/interfaces/interfaces.ts
index efc10d6ac3..5f33db42a3 100644
--- a/apps/client/src/app/components/holding-detail-dialog/interfaces/interfaces.ts
+++ b/apps/client/src/app/components/holding-detail-dialog/interfaces/interfaces.ts
@@ -1,6 +1,5 @@
import { ColorScheme } from '@ghostfolio/common/types';
-
-import { DataSource } from '@prisma/client';
+import { DataSource } from '@ghostfolio/prisma/enums';
export interface HoldingDetailDialogParams {
baseCurrency: string;
diff --git a/apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts b/apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts
index 9f119fc439..f58b19212b 100644
--- a/apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts
+++ b/apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts
@@ -15,6 +15,7 @@ import {
} from '@ghostfolio/common/scopes';
import { AccessLevel, AccountWithPlatform } from '@ghostfolio/common/types';
import { validateObjectForForm } from '@ghostfolio/common/utils';
+import { AccessType } from '@ghostfolio/prisma/enums';
import { GfAccessLevelIconComponent } from '@ghostfolio/ui/access-level-icon';
import { NotificationService } from '@ghostfolio/ui/notifications';
import {
@@ -57,7 +58,6 @@ import { MatFormFieldModule } from '@angular/material/form-field';
import { MatInputModule } from '@angular/material/input';
import { MatSelectModule } from '@angular/material/select';
import { IonIcon } from '@ionic/angular/standalone';
-import { AccessType } from '@prisma/client';
import { addDays, endOfDay, isValid, startOfDay } from 'date-fns';
import { StatusCodes } from 'http-status-codes';
import { addIcons } from 'ionicons';
diff --git a/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts b/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
index 3aec4d42c7..926fb8d8cd 100644
--- a/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
+++ b/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
@@ -4,6 +4,7 @@ import {
getSum
} from '@ghostfolio/common/helper';
import { AdminUserResponse } from '@ghostfolio/common/interfaces';
+import type { Subscription } from '@ghostfolio/prisma/browser';
import { AdminService, DataService } from '@ghostfolio/ui/services';
import { GfValueComponent } from '@ghostfolio/ui/value';
@@ -23,7 +24,6 @@ import { MatDialogModule } from '@angular/material/dialog';
import { MatMenuModule } from '@angular/material/menu';
import { MatTableDataSource, MatTableModule } from '@angular/material/table';
import { IonIcon } from '@ionic/angular/standalone';
-import { Subscription } from '@prisma/client';
import { Big } from 'big.js';
import { differenceInDays } from 'date-fns';
import { addIcons } from 'ionicons';
diff --git a/apps/client/src/app/interfaces/interfaces.ts b/apps/client/src/app/interfaces/interfaces.ts
index 493eff4ab4..191fb42290 100644
--- a/apps/client/src/app/interfaces/interfaces.ts
+++ b/apps/client/src/app/interfaces/interfaces.ts
@@ -1,5 +1,6 @@
+import type { DataSource } from '@ghostfolio/prisma/enums';
+
import type { Params } from '@angular/router';
-import type { DataSource } from '@prisma/client';
export interface GfAppQueryParams extends Params {
dataSource?: DataSource;
diff --git a/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.component.ts b/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.component.ts
index ab3854b931..12f9075247 100644
--- a/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.component.ts
+++ b/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.component.ts
@@ -8,6 +8,7 @@ import { CreateAccountDto, UpdateAccountDto } from '@ghostfolio/common/dtos';
import { getStringOrNull } from '@ghostfolio/common/helper';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { validateObjectForForm } from '@ghostfolio/common/utils';
+import type { Platform, Tag } from '@ghostfolio/prisma/browser';
import { GfCurrencySelectorComponent } from '@ghostfolio/ui/currency-selector';
import { GfEntityLogoComponent } from '@ghostfolio/ui/entity-logo';
import { translate } from '@ghostfolio/ui/i18n';
@@ -39,7 +40,6 @@ import {
} from '@angular/material/dialog';
import { MatFormFieldModule } from '@angular/material/form-field';
import { MatInputModule } from '@angular/material/input';
-import { Platform, Tag } from '@prisma/client';
import { Observable } from 'rxjs';
import { map, startWith } from 'rxjs/operators';
diff --git a/apps/client/src/app/pages/accounts/create-or-update-account-dialog/interfaces/interfaces.ts b/apps/client/src/app/pages/accounts/create-or-update-account-dialog/interfaces/interfaces.ts
index 43015de004..c99cd17b7a 100644
--- a/apps/client/src/app/pages/accounts/create-or-update-account-dialog/interfaces/interfaces.ts
+++ b/apps/client/src/app/pages/accounts/create-or-update-account-dialog/interfaces/interfaces.ts
@@ -1,7 +1,6 @@
import { User } from '@ghostfolio/common/interfaces';
import { AccountWithBalance } from '@ghostfolio/common/types';
-
-import { Tag } from '@prisma/client';
+import type { Tag } from '@ghostfolio/prisma/browser';
export interface CreateOrUpdateAccountDialogParams {
account: Omit<
diff --git a/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts b/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts
index 3b7938c8c4..f24297dbd0 100644
--- a/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts
+++ b/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts
@@ -16,6 +16,8 @@ import {
} from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { validateObjectForForm } from '@ghostfolio/common/utils';
+import type { Tag } from '@ghostfolio/prisma/browser';
+import { AssetClass, Type } from '@ghostfolio/prisma/enums';
import { GfAccountSelectorComponent } from '@ghostfolio/ui/account-selector';
import { translate } from '@ghostfolio/ui/i18n';
import { DataService } from '@ghostfolio/ui/services';
@@ -50,7 +52,6 @@ import { MatFormFieldModule } from '@angular/material/form-field';
import { MatInputModule } from '@angular/material/input';
import { MatSelectModule } from '@angular/material/select';
import { IonIcon } from '@ionic/angular/standalone';
-import { AssetClass, Tag, Type } from '@prisma/client';
import { isAfter, isToday } from 'date-fns';
import { addIcons } from 'ionicons';
import { calendarClearOutline, refreshOutline } from 'ionicons/icons';
diff --git a/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/types/activity-type.type.ts b/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/types/activity-type.type.ts
index 6c3f32f284..cfb8452da4 100644
--- a/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/types/activity-type.type.ts
+++ b/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/types/activity-type.type.ts
@@ -1,4 +1,4 @@
-import { Type } from '@prisma/client';
+import { Type } from '@ghostfolio/prisma/enums';
export const ActivityType = {
...Type,
diff --git a/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts b/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts
index 98e0c0ad82..26255f2061 100644
--- a/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts
+++ b/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts
@@ -8,6 +8,7 @@ import {
CreateTagDto
} from '@ghostfolio/common/dtos';
import { Activity, PortfolioPosition } from '@ghostfolio/common/interfaces';
+import { AssetClass } from '@ghostfolio/prisma/enums';
import { GfActivitiesTableComponent } from '@ghostfolio/ui/activities-table';
import { GfDialogFooterComponent } from '@ghostfolio/ui/dialog-footer';
import { GfDialogHeaderComponent } from '@ghostfolio/ui/dialog-header';
@@ -48,7 +49,6 @@ import { SortDirection } from '@angular/material/sort';
import { MatStepper, MatStepperModule } from '@angular/material/stepper';
import { MatTableDataSource } from '@angular/material/table';
import { IonIcon } from '@ionic/angular/standalone';
-import { AssetClass } from '@prisma/client';
import { addIcons } from 'ionicons';
import { cloudUploadOutline, warningOutline } from 'ionicons/icons';
import { isArray, sortBy } from 'lodash';
diff --git a/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/interfaces/interfaces.ts b/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/interfaces/interfaces.ts
index 051345e603..39749b1222 100644
--- a/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/interfaces/interfaces.ts
+++ b/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/interfaces/interfaces.ts
@@ -1,6 +1,5 @@
import { User } from '@ghostfolio/common/interfaces';
-
-import { Type } from '@prisma/client';
+import { Type } from '@ghostfolio/prisma/enums';
export interface ImportActivitiesDialogParams {
activityTypes?: Type[];
diff --git a/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts b/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts
index ceda1d4c07..6d67b0253c 100644
--- a/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts
+++ b/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts
@@ -22,6 +22,12 @@ import {
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { hasScope, scopes } from '@ghostfolio/common/scopes';
import { MarketAdvanced } from '@ghostfolio/common/types';
+import type { Account, Platform } from '@ghostfolio/prisma/browser';
+import {
+ AssetClass,
+ AssetSubClass,
+ DataSource
+} from '@ghostfolio/prisma/enums';
import { translate } from '@ghostfolio/ui/i18n';
import {
GfPortfolioProportionChartComponent,
@@ -47,13 +53,6 @@ import { MatCardModule } from '@angular/material/card';
import { MatDialog } from '@angular/material/dialog';
import { MatProgressBarModule } from '@angular/material/progress-bar';
import { ActivatedRoute, Router } from '@angular/router';
-import {
- Account,
- AssetClass,
- AssetSubClass,
- DataSource,
- Platform
-} from '@prisma/client';
import { isNumber } from 'lodash';
import { DeviceDetectorService } from 'ngx-device-detector';
import { filter, switchMap, tap } from 'rxjs';
diff --git a/apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts b/apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts
index 450749925e..898c7f51a8 100644
--- a/apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts
+++ b/apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts
@@ -22,6 +22,7 @@ import type {
ToggleOption
} from '@ghostfolio/common/types';
import { PerformanceCalculationType } from '@ghostfolio/common/types/performance-calculation-type.type';
+import type { SymbolProfile } from '@ghostfolio/prisma/browser';
import { translate } from '@ghostfolio/ui/i18n';
import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator';
import { DataService } from '@ghostfolio/ui/services';
@@ -48,7 +49,6 @@ import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
import { MatSnackBar } from '@angular/material/snack-bar';
import { RouterModule } from '@angular/router';
import { IonIcon } from '@ionic/angular/standalone';
-import { SymbolProfile } from '@prisma/client';
import { addIcons } from 'ionicons';
import { copyOutline, ellipsisVertical } from 'ionicons/icons';
import { isNumber, keyBy, sortBy, union } from 'lodash';
diff --git a/apps/client/src/app/services/ics/ics.service.ts b/apps/client/src/app/services/ics/ics.service.ts
index d97b427c9e..90170dbb75 100644
--- a/apps/client/src/app/services/ics/ics.service.ts
+++ b/apps/client/src/app/services/ics/ics.service.ts
@@ -1,8 +1,8 @@
import { capitalize } from '@ghostfolio/common/helper';
import { ExportResponse } from '@ghostfolio/common/interfaces';
+import { Type } from '@ghostfolio/prisma/enums';
import { Service } from '@angular/core';
-import { Type } from '@prisma/client';
import { format, parseISO } from 'date-fns';
@Service()
diff --git a/apps/client/src/app/services/import-activities.service.ts b/apps/client/src/app/services/import-activities.service.ts
index 5c06b0e136..599c66551a 100644
--- a/apps/client/src/app/services/import-activities.service.ts
+++ b/apps/client/src/app/services/import-activities.service.ts
@@ -11,10 +11,11 @@ import {
parseDate as parseDateHelper
} from '@ghostfolio/common/helper';
import { Activity } from '@ghostfolio/common/interfaces';
+import type { Account } from '@ghostfolio/prisma/browser';
+import { DataSource, Type as ActivityType } from '@ghostfolio/prisma/enums';
import { HttpClient } from '@angular/common/http';
import { inject, Service } from '@angular/core';
-import { Account, DataSource, Type as ActivityType } from '@prisma/client';
import { isFinite, isNumber, isString } from 'lodash';
import { parse as csvToJson } from 'papaparse';
import { firstValueFrom } from 'rxjs';
diff --git a/eslint.config.cjs b/eslint.config.cjs
index 1b4aa6a0c0..ee5e0a557c 100644
--- a/eslint.config.cjs
+++ b/eslint.config.cjs
@@ -83,6 +83,18 @@ module.exports = [
}
],
'@typescript-eslint/no-non-null-assertion': 'warn',
+ '@typescript-eslint/no-restricted-imports': [
+ 'error',
+ {
+ paths: [
+ {
+ message:
+ 'Import the types from @ghostfolio/prisma/browser and the enums from @ghostfolio/prisma/enums instead.',
+ name: '@prisma/client'
+ }
+ ]
+ }
+ ],
'@typescript-eslint/no-shadow': [
'warn',
{
diff --git a/libs/common/src/lib/config.ts b/libs/common/src/lib/config.ts
index 77e8542398..beedb741cb 100644
--- a/libs/common/src/lib/config.ts
+++ b/libs/common/src/lib/config.ts
@@ -1,4 +1,10 @@
-import { AssetClass, AssetSubClass, DataSource, Type } from '@prisma/client';
+import {
+ AssetClass,
+ AssetSubClass,
+ DataSource,
+ Type
+} from '@ghostfolio/prisma/enums';
+
import { JobOptions, JobStatus } from 'bull';
import ms from 'ms';
diff --git a/libs/common/src/lib/dtos/create-access.dto.ts b/libs/common/src/lib/dtos/create-access.dto.ts
index 6fee6fcb66..82feac222c 100644
--- a/libs/common/src/lib/dtos/create-access.dto.ts
+++ b/libs/common/src/lib/dtos/create-access.dto.ts
@@ -1,8 +1,8 @@
import { Filter } from '@ghostfolio/common/interfaces';
import { Scope, scopes } from '@ghostfolio/common/scopes';
import { IsInTheFutureConstraint } from '@ghostfolio/common/validator-constraints/is-in-the-future';
+import { AccessType } from '@ghostfolio/prisma/enums';
-import { AccessType } from '@prisma/client';
import {
IsArray,
IsEnum,
diff --git a/libs/common/src/lib/dtos/create-asset-profile-with-market-data.dto.ts b/libs/common/src/lib/dtos/create-asset-profile-with-market-data.dto.ts
index 60afcb558b..096f9e27ca 100644
--- a/libs/common/src/lib/dtos/create-asset-profile-with-market-data.dto.ts
+++ b/libs/common/src/lib/dtos/create-asset-profile-with-market-data.dto.ts
@@ -1,6 +1,6 @@
import { MarketData } from '@ghostfolio/common/interfaces';
+import { DataSource } from '@ghostfolio/prisma/enums';
-import { DataSource } from '@prisma/client';
import { IsArray, IsIn, IsOptional } from 'class-validator';
import { CreateAssetProfileDto } from './create-asset-profile.dto';
diff --git a/libs/common/src/lib/dtos/create-asset-profile.dto.ts b/libs/common/src/lib/dtos/create-asset-profile.dto.ts
index 4197137fb3..b4fe347071 100644
--- a/libs/common/src/lib/dtos/create-asset-profile.dto.ts
+++ b/libs/common/src/lib/dtos/create-asset-profile.dto.ts
@@ -3,8 +3,13 @@ import {
SYMBOL_MAXIMUM_LENGTH
} from '@ghostfolio/common/config';
import { IsCurrencyCode } from '@ghostfolio/common/validators/is-currency-code';
+import type { Prisma } from '@ghostfolio/prisma/browser';
+import {
+ AssetClass,
+ AssetSubClass,
+ DataSource
+} from '@ghostfolio/prisma/enums';
-import { AssetClass, AssetSubClass, DataSource, Prisma } from '@prisma/client';
import { Type } from 'class-transformer';
import {
IsArray,
diff --git a/libs/common/src/lib/dtos/create-order.dto.ts b/libs/common/src/lib/dtos/create-order.dto.ts
index 1345f418a1..fd062b610b 100644
--- a/libs/common/src/lib/dtos/create-order.dto.ts
+++ b/libs/common/src/lib/dtos/create-order.dto.ts
@@ -4,8 +4,13 @@ import {
} from '@ghostfolio/common/config';
import { IsAfter1970Constraint } from '@ghostfolio/common/validator-constraints/is-after-1970';
import { IsCurrencyCode } from '@ghostfolio/common/validators/is-currency-code';
+import {
+ AssetClass,
+ AssetSubClass,
+ DataSource,
+ Type
+} from '@ghostfolio/prisma/enums';
-import { AssetClass, AssetSubClass, DataSource, Type } from '@prisma/client';
import { Transform, TransformFnParams } from 'class-transformer';
import {
ArrayUnique,
diff --git a/libs/common/src/lib/dtos/create-watchlist-item.dto.ts b/libs/common/src/lib/dtos/create-watchlist-item.dto.ts
index 78808a0246..ccf9414fa1 100644
--- a/libs/common/src/lib/dtos/create-watchlist-item.dto.ts
+++ b/libs/common/src/lib/dtos/create-watchlist-item.dto.ts
@@ -1,6 +1,6 @@
import { SYMBOL_MAXIMUM_LENGTH } from '@ghostfolio/common/config';
+import { DataSource } from '@ghostfolio/prisma/enums';
-import { DataSource } from '@prisma/client';
import { IsEnum, IsString, MaxLength } from 'class-validator';
export class CreateWatchlistItemDto {
diff --git a/libs/common/src/lib/dtos/merge-asset-profile.dto.ts b/libs/common/src/lib/dtos/merge-asset-profile.dto.ts
index f7b74bc4e2..9df79a6b8c 100644
--- a/libs/common/src/lib/dtos/merge-asset-profile.dto.ts
+++ b/libs/common/src/lib/dtos/merge-asset-profile.dto.ts
@@ -1,4 +1,5 @@
-import { DataSource } from '@prisma/client';
+import { DataSource } from '@ghostfolio/prisma/enums';
+
import { IsEnum, IsString } from 'class-validator';
export class MergeAssetProfileDto {
diff --git a/libs/common/src/lib/dtos/update-asset-profile-data.dto.ts b/libs/common/src/lib/dtos/update-asset-profile-data.dto.ts
index a2f600fcd0..f94ea40fce 100644
--- a/libs/common/src/lib/dtos/update-asset-profile-data.dto.ts
+++ b/libs/common/src/lib/dtos/update-asset-profile-data.dto.ts
@@ -1,4 +1,5 @@
-import { Prisma } from '@prisma/client';
+import type { Prisma } from '@ghostfolio/prisma/browser';
+
import { IsArray, IsOptional } from 'class-validator';
export class UpdateAssetProfileDataDto {
diff --git a/libs/common/src/lib/dtos/update-asset-profile.dto.ts b/libs/common/src/lib/dtos/update-asset-profile.dto.ts
index 965778761d..6e48ef0e04 100644
--- a/libs/common/src/lib/dtos/update-asset-profile.dto.ts
+++ b/libs/common/src/lib/dtos/update-asset-profile.dto.ts
@@ -3,14 +3,14 @@ import {
SYMBOL_MAXIMUM_LENGTH
} from '@ghostfolio/common/config';
import { IsCurrencyCode } from '@ghostfolio/common/validators/is-currency-code';
-
+import type { Prisma } from '@ghostfolio/prisma/browser';
import {
AssetClass,
AssetSubClass,
DataGatheringFrequency,
- DataSource,
- Prisma
-} from '@prisma/client';
+ DataSource
+} from '@ghostfolio/prisma/enums';
+
import { Type } from 'class-transformer';
import {
IsArray,
diff --git a/libs/common/src/lib/dtos/update-order.dto.ts b/libs/common/src/lib/dtos/update-order.dto.ts
index 69d993559e..0e381f2069 100644
--- a/libs/common/src/lib/dtos/update-order.dto.ts
+++ b/libs/common/src/lib/dtos/update-order.dto.ts
@@ -4,8 +4,13 @@ import {
} from '@ghostfolio/common/config';
import { IsAfter1970Constraint } from '@ghostfolio/common/validator-constraints/is-after-1970';
import { IsCurrencyCode } from '@ghostfolio/common/validators/is-currency-code';
+import {
+ AssetClass,
+ AssetSubClass,
+ DataSource,
+ Type
+} from '@ghostfolio/prisma/enums';
-import { AssetClass, AssetSubClass, DataSource, Type } from '@prisma/client';
import { Transform, TransformFnParams } from 'class-transformer';
import {
ArrayUnique,
diff --git a/libs/common/src/lib/helper.ts b/libs/common/src/lib/helper.ts
index 6e50911322..69764935d1 100644
--- a/libs/common/src/lib/helper.ts
+++ b/libs/common/src/lib/helper.ts
@@ -1,14 +1,17 @@
-import { utc } from '@date-fns/utc';
-import { NumberParser } from '@internationalized/number';
-import {
- AccessType,
- Type as ActivityType,
+import type {
AssetProfileOverrides,
- AssetSubClass,
MarketData,
Prisma,
SymbolProfile
-} from '@prisma/client';
+} from '@ghostfolio/prisma/browser';
+import {
+ AccessType,
+ Type as ActivityType,
+ AssetSubClass
+} from '@ghostfolio/prisma/enums';
+
+import { utc } from '@date-fns/utc';
+import { NumberParser } from '@internationalized/number';
import { Big } from 'big.js';
import { isISO4217CurrencyCode, isUUID } from 'class-validator';
import { countries } from 'countries-list';
diff --git a/libs/common/src/lib/interfaces/access.interface.ts b/libs/common/src/lib/interfaces/access.interface.ts
index 040bc2a8cc..182a0f3a49 100644
--- a/libs/common/src/lib/interfaces/access.interface.ts
+++ b/libs/common/src/lib/interfaces/access.interface.ts
@@ -1,4 +1,4 @@
-import { AccessType } from '@prisma/client';
+import { AccessType } from '@ghostfolio/prisma/enums';
import { AccessSettings } from './access-settings.interface';
diff --git a/libs/common/src/lib/interfaces/activities.interface.ts b/libs/common/src/lib/interfaces/activities.interface.ts
index 4b8dd34350..2e9be921e3 100644
--- a/libs/common/src/lib/interfaces/activities.interface.ts
+++ b/libs/common/src/lib/interfaces/activities.interface.ts
@@ -1,7 +1,6 @@
import { EnhancedAssetProfile } from '@ghostfolio/common/interfaces';
import { AccountWithPlatform } from '@ghostfolio/common/types';
-
-import { Order, Tag } from '@prisma/client';
+import type { Order, Tag } from '@ghostfolio/prisma/browser';
export interface Activity extends Order {
account?: AccountWithPlatform;
diff --git a/libs/common/src/lib/interfaces/admin-market-data-details.interface.ts b/libs/common/src/lib/interfaces/admin-market-data-details.interface.ts
index 8cfe70f9c5..7a7bba7159 100644
--- a/libs/common/src/lib/interfaces/admin-market-data-details.interface.ts
+++ b/libs/common/src/lib/interfaces/admin-market-data-details.interface.ts
@@ -1,4 +1,4 @@
-import { AssetProfileSplit, MarketData } from '@prisma/client';
+import type { AssetProfileSplit, MarketData } from '@ghostfolio/prisma/browser';
import { EnhancedAssetProfile } from './enhanced-asset-profile.interface';
diff --git a/libs/common/src/lib/interfaces/admin-user.interface.ts b/libs/common/src/lib/interfaces/admin-user.interface.ts
index a7cda68a81..a5c46d92f8 100644
--- a/libs/common/src/lib/interfaces/admin-user.interface.ts
+++ b/libs/common/src/lib/interfaces/admin-user.interface.ts
@@ -1,4 +1,5 @@
-import { Provider, Role, Subscription } from '@prisma/client';
+import type { Subscription } from '@ghostfolio/prisma/browser';
+import { Provider, Role } from '@ghostfolio/prisma/enums';
export interface AdminUser {
accountCount: number;
diff --git a/libs/common/src/lib/interfaces/asset-class-selector-option.interface.ts b/libs/common/src/lib/interfaces/asset-class-selector-option.interface.ts
index b4b1060e43..ed8d580f9d 100644
--- a/libs/common/src/lib/interfaces/asset-class-selector-option.interface.ts
+++ b/libs/common/src/lib/interfaces/asset-class-selector-option.interface.ts
@@ -1,4 +1,4 @@
-import { AssetClass, AssetSubClass } from '@prisma/client';
+import { AssetClass, AssetSubClass } from '@ghostfolio/prisma/enums';
export interface AssetClassSelectorOption {
id: AssetClass | AssetSubClass;
diff --git a/libs/common/src/lib/interfaces/asset-profile-identifier.interface.ts b/libs/common/src/lib/interfaces/asset-profile-identifier.interface.ts
index 48fc18c2f4..a031f3a488 100644
--- a/libs/common/src/lib/interfaces/asset-profile-identifier.interface.ts
+++ b/libs/common/src/lib/interfaces/asset-profile-identifier.interface.ts
@@ -1,4 +1,4 @@
-import { DataSource } from '@prisma/client';
+import { DataSource } from '@ghostfolio/prisma/enums';
export interface AssetProfileIdentifier {
dataSource: DataSource;
diff --git a/libs/common/src/lib/interfaces/asset-profile-item.interface.ts b/libs/common/src/lib/interfaces/asset-profile-item.interface.ts
index 382e824cc6..a982f5050a 100644
--- a/libs/common/src/lib/interfaces/asset-profile-item.interface.ts
+++ b/libs/common/src/lib/interfaces/asset-profile-item.interface.ts
@@ -1,4 +1,8 @@
-import { AssetClass, AssetSubClass, DataSource } from '@prisma/client';
+import {
+ AssetClass,
+ AssetSubClass,
+ DataSource
+} from '@ghostfolio/prisma/enums';
import { DataProviderInfo } from './data-provider-info.interface';
diff --git a/libs/common/src/lib/interfaces/data-provider-info.interface.ts b/libs/common/src/lib/interfaces/data-provider-info.interface.ts
index 9fba0e62de..dd3c67d4f9 100644
--- a/libs/common/src/lib/interfaces/data-provider-info.interface.ts
+++ b/libs/common/src/lib/interfaces/data-provider-info.interface.ts
@@ -1,4 +1,4 @@
-import { DataSource } from '@prisma/client';
+import { DataSource } from '@ghostfolio/prisma/enums';
export interface DataProviderInfo {
dataSource?: DataSource;
diff --git a/libs/common/src/lib/interfaces/enhanced-asset-profile.interface.ts b/libs/common/src/lib/interfaces/enhanced-asset-profile.interface.ts
index 9e3a022f78..88226d9872 100644
--- a/libs/common/src/lib/interfaces/enhanced-asset-profile.interface.ts
+++ b/libs/common/src/lib/interfaces/enhanced-asset-profile.interface.ts
@@ -3,7 +3,7 @@ import {
AssetSubClass,
DataGatheringFrequency,
DataSource
-} from '@prisma/client';
+} from '@ghostfolio/prisma/enums';
import { Country } from './country.interface';
import { DataProviderInfo } from './data-provider-info.interface';
diff --git a/libs/common/src/lib/interfaces/info-item.interface.ts b/libs/common/src/lib/interfaces/info-item.interface.ts
index 96db7f9b06..355b19203c 100644
--- a/libs/common/src/lib/interfaces/info-item.interface.ts
+++ b/libs/common/src/lib/interfaces/info-item.interface.ts
@@ -1,4 +1,4 @@
-import { SymbolProfile } from '@prisma/client';
+import type { SymbolProfile } from '@ghostfolio/prisma/browser';
import { Statistics } from './statistics.interface';
import { SubscriptionOffer } from './subscription-offer.interface';
diff --git a/libs/common/src/lib/interfaces/lookup-item.interface.ts b/libs/common/src/lib/interfaces/lookup-item.interface.ts
index 6cedeca09e..5c653acddd 100644
--- a/libs/common/src/lib/interfaces/lookup-item.interface.ts
+++ b/libs/common/src/lib/interfaces/lookup-item.interface.ts
@@ -1,4 +1,8 @@
-import { AssetClass, AssetSubClass, DataSource } from '@prisma/client';
+import {
+ AssetClass,
+ AssetSubClass,
+ DataSource
+} from '@ghostfolio/prisma/enums';
import { DataProviderInfo } from './data-provider-info.interface';
diff --git a/libs/common/src/lib/interfaces/portfolio-position.interface.ts b/libs/common/src/lib/interfaces/portfolio-position.interface.ts
index 65d7ea1405..dcb150d963 100644
--- a/libs/common/src/lib/interfaces/portfolio-position.interface.ts
+++ b/libs/common/src/lib/interfaces/portfolio-position.interface.ts
@@ -1,6 +1,5 @@
import { Market, MarketAdvanced } from '@ghostfolio/common/types';
-
-import { Tag } from '@prisma/client';
+import type { Tag } from '@ghostfolio/prisma/browser';
import { EnhancedAssetProfile } from './enhanced-asset-profile.interface';
diff --git a/libs/common/src/lib/interfaces/responses/account-balances-response.interface.ts b/libs/common/src/lib/interfaces/responses/account-balances-response.interface.ts
index a623baaff9..f56cd6ce89 100644
--- a/libs/common/src/lib/interfaces/responses/account-balances-response.interface.ts
+++ b/libs/common/src/lib/interfaces/responses/account-balances-response.interface.ts
@@ -1,4 +1,4 @@
-import { AccountBalance } from '@prisma/client';
+import type { AccountBalance } from '@ghostfolio/prisma/browser';
export interface AccountBalancesResponse {
balances: (Pick & {
diff --git a/libs/common/src/lib/interfaces/responses/asset-profile-response.interface.ts b/libs/common/src/lib/interfaces/responses/asset-profile-response.interface.ts
index 26082c2c42..26ca5b29f9 100644
--- a/libs/common/src/lib/interfaces/responses/asset-profile-response.interface.ts
+++ b/libs/common/src/lib/interfaces/responses/asset-profile-response.interface.ts
@@ -1,4 +1,4 @@
-import { AssetProfileSplit, MarketData } from '@prisma/client';
+import type { AssetProfileSplit, MarketData } from '@ghostfolio/prisma/browser';
import { EnhancedAssetProfile } from '../enhanced-asset-profile.interface';
diff --git a/libs/common/src/lib/interfaces/responses/data-provider-ghostfolio-asset-profile-response.interface.ts b/libs/common/src/lib/interfaces/responses/data-provider-ghostfolio-asset-profile-response.interface.ts
index 3ea635c6d2..41a9c513c0 100644
--- a/libs/common/src/lib/interfaces/responses/data-provider-ghostfolio-asset-profile-response.interface.ts
+++ b/libs/common/src/lib/interfaces/responses/data-provider-ghostfolio-asset-profile-response.interface.ts
@@ -1,3 +1,3 @@
-import { SymbolProfile } from '@prisma/client';
+import type { SymbolProfile } from '@ghostfolio/prisma/browser';
export interface DataProviderGhostfolioAssetProfileResponse extends Partial {}
diff --git a/libs/common/src/lib/interfaces/responses/data-provider-response.interface.ts b/libs/common/src/lib/interfaces/responses/data-provider-response.interface.ts
index ff152b1b2f..d46c6ff5e3 100644
--- a/libs/common/src/lib/interfaces/responses/data-provider-response.interface.ts
+++ b/libs/common/src/lib/interfaces/responses/data-provider-response.interface.ts
@@ -1,7 +1,6 @@
import { DataProviderInfo } from '@ghostfolio/common/interfaces';
import { MarketState } from '@ghostfolio/common/types';
-
-import { DataSource } from '@prisma/client';
+import { DataSource } from '@ghostfolio/prisma/enums';
export interface DataProviderHistoricalResponse {
marketPrice: number;
diff --git a/libs/common/src/lib/interfaces/responses/export-response.interface.ts b/libs/common/src/lib/interfaces/responses/export-response.interface.ts
index 4d49afebd9..6f643ec1a1 100644
--- a/libs/common/src/lib/interfaces/responses/export-response.interface.ts
+++ b/libs/common/src/lib/interfaces/responses/export-response.interface.ts
@@ -1,4 +1,10 @@
-import { Account, Order, Platform, SymbolProfile, Tag } from '@prisma/client';
+import type {
+ Account,
+ Order,
+ Platform,
+ SymbolProfile,
+ Tag
+} from '@ghostfolio/prisma/browser';
import { AccountBalance } from '../account-balance.interface';
import { AssetProfileIdentifier } from '../asset-profile-identifier.interface';
diff --git a/libs/common/src/lib/interfaces/responses/platforms-response.interface.ts b/libs/common/src/lib/interfaces/responses/platforms-response.interface.ts
index 552912d9d6..a6bfc4326c 100644
--- a/libs/common/src/lib/interfaces/responses/platforms-response.interface.ts
+++ b/libs/common/src/lib/interfaces/responses/platforms-response.interface.ts
@@ -1,4 +1,4 @@
-import { Platform } from '@prisma/client';
+import type { Platform } from '@ghostfolio/prisma/browser';
export interface PlatformsResponse {
platforms: Platform[];
diff --git a/libs/common/src/lib/interfaces/responses/portfolio-holding-response.interface.ts b/libs/common/src/lib/interfaces/responses/portfolio-holding-response.interface.ts
index 80eaa6458c..a3ab21705c 100644
--- a/libs/common/src/lib/interfaces/responses/portfolio-holding-response.interface.ts
+++ b/libs/common/src/lib/interfaces/responses/portfolio-holding-response.interface.ts
@@ -4,8 +4,7 @@ import {
EnhancedAssetProfile,
HistoricalDataItem
} from '@ghostfolio/common/interfaces';
-
-import { Tag } from '@prisma/client';
+import type { Tag } from '@ghostfolio/prisma/browser';
export interface PortfolioHoldingResponse {
activitiesCount: number;
diff --git a/libs/common/src/lib/interfaces/responses/public-portfolio-response.interface.ts b/libs/common/src/lib/interfaces/responses/public-portfolio-response.interface.ts
index 616dbac992..bf6e91bd9a 100644
--- a/libs/common/src/lib/interfaces/responses/public-portfolio-response.interface.ts
+++ b/libs/common/src/lib/interfaces/responses/public-portfolio-response.interface.ts
@@ -4,8 +4,7 @@ import {
PortfolioPosition
} from '@ghostfolio/common/interfaces';
import { Market } from '@ghostfolio/common/types';
-
-import { Order } from '@prisma/client';
+import type { Order } from '@ghostfolio/prisma/browser';
export interface PublicPortfolioResponse extends PublicPortfolioResponseV1 {
alias?: string;
diff --git a/libs/common/src/lib/interfaces/user-item.interface.ts b/libs/common/src/lib/interfaces/user-item.interface.ts
index 32230b69ef..b5ca9d9ce6 100644
--- a/libs/common/src/lib/interfaces/user-item.interface.ts
+++ b/libs/common/src/lib/interfaces/user-item.interface.ts
@@ -1,4 +1,4 @@
-import { Role } from '@prisma/client';
+import { Role } from '@ghostfolio/prisma/enums';
export interface UserItem {
accessToken?: string;
diff --git a/libs/common/src/lib/interfaces/user-settings.interface.ts b/libs/common/src/lib/interfaces/user-settings.interface.ts
index 65325a42f8..dc6fb5c369 100644
--- a/libs/common/src/lib/interfaces/user-settings.interface.ts
+++ b/libs/common/src/lib/interfaces/user-settings.interface.ts
@@ -6,8 +6,7 @@ import {
ViewMode
} from '@ghostfolio/common/types';
import { PerformanceCalculationType } from '@ghostfolio/common/types/performance-calculation-type.type';
-
-import { AssetClass } from '@prisma/client';
+import { AssetClass } from '@ghostfolio/prisma/enums';
export interface UserSettings {
annualInterestRate?: number;
diff --git a/libs/common/src/lib/interfaces/user.interface.ts b/libs/common/src/lib/interfaces/user.interface.ts
index b6493c814a..ff0f6646f5 100644
--- a/libs/common/src/lib/interfaces/user.interface.ts
+++ b/libs/common/src/lib/interfaces/user.interface.ts
@@ -1,7 +1,7 @@
import { SubscriptionType } from '@ghostfolio/common/enums';
import { AccountWithPlatform } from '@ghostfolio/common/types';
-
-import { Access, Tag, Type as ActivityType } from '@prisma/client';
+import type { Access, Tag } from '@ghostfolio/prisma/browser';
+import { Type as ActivityType } from '@ghostfolio/prisma/enums';
import { ReferralPartner } from './referral-partner.interface';
import { SubscriptionOffer } from './subscription-offer.interface';
diff --git a/libs/common/src/lib/models/portfolio-snapshot-holding.ts b/libs/common/src/lib/models/portfolio-snapshot-holding.ts
index 21d375fd4a..9b440b9782 100644
--- a/libs/common/src/lib/models/portfolio-snapshot-holding.ts
+++ b/libs/common/src/lib/models/portfolio-snapshot-holding.ts
@@ -3,8 +3,9 @@ import {
transformToMapOfBig
} from '@ghostfolio/common/class-transformer';
import { DateRange } from '@ghostfolio/common/types';
+import type { Tag } from '@ghostfolio/prisma/browser';
+import { DataSource } from '@ghostfolio/prisma/enums';
-import { DataSource, Tag } from '@prisma/client';
import { Big } from 'big.js';
import { Expose, Transform, Type } from 'class-transformer';
diff --git a/libs/common/src/lib/permissions.ts b/libs/common/src/lib/permissions.ts
index 753bdf131a..d2b23e871a 100644
--- a/libs/common/src/lib/permissions.ts
+++ b/libs/common/src/lib/permissions.ts
@@ -1,6 +1,5 @@
import { UserWithSettings } from '@ghostfolio/common/types';
-
-import { Role } from '@prisma/client';
+import { Role } from '@ghostfolio/prisma/enums';
export const permissions = {
accessAdminControl: 'accessAdminControl',
diff --git a/libs/common/src/lib/scopes.ts b/libs/common/src/lib/scopes.ts
index 1c8efab431..635530a9e2 100644
--- a/libs/common/src/lib/scopes.ts
+++ b/libs/common/src/lib/scopes.ts
@@ -1,6 +1,5 @@
import { AccessLevel } from '@ghostfolio/common/types';
-
-import { AccessType } from '@prisma/client';
+import { AccessType } from '@ghostfolio/prisma/enums';
/**
* Scopes describe what a grantee may do on behalf of the granting user. They
diff --git a/libs/common/src/lib/types/access-with-grantee-user.type.ts b/libs/common/src/lib/types/access-with-grantee-user.type.ts
index 2fc2488eec..ea04986979 100644
--- a/libs/common/src/lib/types/access-with-grantee-user.type.ts
+++ b/libs/common/src/lib/types/access-with-grantee-user.type.ts
@@ -1,3 +1,3 @@
-import { Access, User } from '@prisma/client';
+import type { Access, User } from '@ghostfolio/prisma/browser';
export type AccessWithGranteeUser = Access & { granteeUser?: User | null };
diff --git a/libs/common/src/lib/types/account-with-balance.type.ts b/libs/common/src/lib/types/account-with-balance.type.ts
index 72732f3a6d..46e0e16548 100644
--- a/libs/common/src/lib/types/account-with-balance.type.ts
+++ b/libs/common/src/lib/types/account-with-balance.type.ts
@@ -1,4 +1,4 @@
-import { Account as AccountModel } from '@prisma/client';
+import type { Account as AccountModel } from '@ghostfolio/prisma/browser';
export type AccountWithBalance = AccountModel & {
balance: number;
diff --git a/libs/common/src/lib/types/account-with-platform.type.ts b/libs/common/src/lib/types/account-with-platform.type.ts
index 640245e3bc..cccec2e522 100644
--- a/libs/common/src/lib/types/account-with-platform.type.ts
+++ b/libs/common/src/lib/types/account-with-platform.type.ts
@@ -1,4 +1,4 @@
-import { Account, Platform, Tag } from '@prisma/client';
+import type { Account, Platform, Tag } from '@ghostfolio/prisma/browser';
export type AccountWithPlatform = Account & {
platform?: Platform;
diff --git a/libs/common/src/lib/types/account-with-value.type.ts b/libs/common/src/lib/types/account-with-value.type.ts
index 0d43c612f7..0fb9a58e2b 100644
--- a/libs/common/src/lib/types/account-with-value.type.ts
+++ b/libs/common/src/lib/types/account-with-value.type.ts
@@ -1,4 +1,4 @@
-import { Platform, Tag } from '@prisma/client';
+import type { Platform, Tag } from '@ghostfolio/prisma/browser';
import { AccountWithBalance } from './account-with-balance.type';
diff --git a/libs/common/src/lib/types/order-with-account.type.ts b/libs/common/src/lib/types/order-with-account.type.ts
index b3ae4a990a..cff844707f 100644
--- a/libs/common/src/lib/types/order-with-account.type.ts
+++ b/libs/common/src/lib/types/order-with-account.type.ts
@@ -1,4 +1,4 @@
-import { Order, SymbolProfile, Tag } from '@prisma/client';
+import type { Order, SymbolProfile, Tag } from '@ghostfolio/prisma/browser';
import { AccountWithPlatform } from './account-with-platform.type';
diff --git a/libs/common/src/lib/types/tag-with-account-and-activity-count.type.ts b/libs/common/src/lib/types/tag-with-account-and-activity-count.type.ts
index 662e0f5ce9..36ef4a56e4 100644
--- a/libs/common/src/lib/types/tag-with-account-and-activity-count.type.ts
+++ b/libs/common/src/lib/types/tag-with-account-and-activity-count.type.ts
@@ -1,4 +1,4 @@
-import { Tag } from '@prisma/client';
+import type { Tag } from '@ghostfolio/prisma/browser';
export type TagWithAccountAndActivityCount = Tag & {
accountCount: number;
diff --git a/libs/common/src/lib/types/user-with-settings.type.ts b/libs/common/src/lib/types/user-with-settings.type.ts
index 4c4a85a45c..24be244b39 100644
--- a/libs/common/src/lib/types/user-with-settings.type.ts
+++ b/libs/common/src/lib/types/user-with-settings.type.ts
@@ -1,7 +1,6 @@
import { SubscriptionType } from '@ghostfolio/common/enums';
import { SubscriptionOffer, UserSettings } from '@ghostfolio/common/interfaces';
-
-import { Account, Settings, User } from '@prisma/client';
+import type { Account, Settings, User } from '@ghostfolio/prisma/browser';
// TODO: Compare with User interface
export type UserWithSettings = User & {
diff --git a/libs/ui/src/lib/activities-table/activities-table.component.ts b/libs/ui/src/lib/activities-table/activities-table.component.ts
index 4646606577..56a2c6abec 100644
--- a/libs/ui/src/lib/activities-table/activities-table.component.ts
+++ b/libs/ui/src/lib/activities-table/activities-table.component.ts
@@ -6,6 +6,7 @@ import {
AssetProfileIdentifier
} from '@ghostfolio/common/interfaces';
import { internalRoutes } from '@ghostfolio/common/routes/routes';
+import { Type as ActivityType } from '@ghostfolio/prisma/enums';
import { translate } from '@ghostfolio/ui/i18n';
import { NotificationService } from '@ghostfolio/ui/notifications';
@@ -48,7 +49,6 @@ import { MatTableDataSource, MatTableModule } from '@angular/material/table';
import { MatTooltipModule } from '@angular/material/tooltip';
import { RouterModule } from '@angular/router';
import { IonIcon } from '@ionic/angular/standalone';
-import { Type as ActivityType } from '@prisma/client';
import { isUUID } from 'class-validator';
import { addIcons } from 'ionicons';
import {
diff --git a/libs/ui/src/lib/activity-type/activity-type.component.ts b/libs/ui/src/lib/activity-type/activity-type.component.ts
index 7bd0e6975d..acc7a27e25 100644
--- a/libs/ui/src/lib/activity-type/activity-type.component.ts
+++ b/libs/ui/src/lib/activity-type/activity-type.component.ts
@@ -1,3 +1,5 @@
+import { Type as ActivityType } from '@ghostfolio/prisma/enums';
+
import {
CUSTOM_ELEMENTS_SCHEMA,
ChangeDetectionStrategy,
@@ -6,7 +8,6 @@ import {
OnChanges
} from '@angular/core';
import { IonIcon } from '@ionic/angular/standalone';
-import { Type as ActivityType } from '@prisma/client';
import { addIcons } from 'ionicons';
import {
addCircleOutline,
diff --git a/libs/ui/src/lib/benchmark/benchmark-detail-dialog/interfaces/interfaces.ts b/libs/ui/src/lib/benchmark/benchmark-detail-dialog/interfaces/interfaces.ts
index b01403284b..80d09148c9 100644
--- a/libs/ui/src/lib/benchmark/benchmark-detail-dialog/interfaces/interfaces.ts
+++ b/libs/ui/src/lib/benchmark/benchmark-detail-dialog/interfaces/interfaces.ts
@@ -1,6 +1,5 @@
import { ColorScheme } from '@ghostfolio/common/types';
-
-import { DataSource } from '@prisma/client';
+import { DataSource } from '@ghostfolio/prisma/enums';
export interface BenchmarkDetailDialogParams {
colorScheme?: ColorScheme;
diff --git a/libs/ui/src/lib/entity-logo/entity-logo.component.ts b/libs/ui/src/lib/entity-logo/entity-logo.component.ts
index 8a788e0c80..989a67214e 100644
--- a/libs/ui/src/lib/entity-logo/entity-logo.component.ts
+++ b/libs/ui/src/lib/entity-logo/entity-logo.component.ts
@@ -1,4 +1,5 @@
import { getEmojiFlag } from '@ghostfolio/common/helper';
+import { DataSource } from '@ghostfolio/prisma/enums';
import { EntityLogoImageSourceService } from '@ghostfolio/ui/entity-logo/entity-logo-image-source.service';
import {
@@ -8,7 +9,6 @@ import {
Input,
OnChanges
} from '@angular/core';
-import { DataSource } from '@prisma/client';
@Component({
changeDetection: ChangeDetectionStrategy.OnPush,
diff --git a/libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/interfaces/interfaces.ts b/libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/interfaces/interfaces.ts
index edb9a852f5..fcc98c271e 100644
--- a/libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/interfaces/interfaces.ts
+++ b/libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/interfaces/interfaces.ts
@@ -1,6 +1,5 @@
import { User } from '@ghostfolio/common/interfaces';
-
-import { DataSource } from '@prisma/client';
+import { DataSource } from '@ghostfolio/prisma/enums';
export interface HistoricalMarketDataEditorDialogParams {
currency: string;
diff --git a/libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts b/libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts
index aa6177cff9..401fd84523 100644
--- a/libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts
+++ b/libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts
@@ -5,6 +5,8 @@ import {
getLocale
} from '@ghostfolio/common/helper';
import { LineChartItem, User } from '@ghostfolio/common/interfaces';
+import type { MarketData } from '@ghostfolio/prisma/browser';
+import { DataSource } from '@ghostfolio/prisma/enums';
import { DataService } from '@ghostfolio/ui/services';
import { CommonModule } from '@angular/common';
@@ -28,7 +30,6 @@ import { MatButtonModule } from '@angular/material/button';
import { MatDialog } from '@angular/material/dialog';
import { MatInputModule } from '@angular/material/input';
import { MatSnackBar } from '@angular/material/snack-bar';
-import { DataSource, MarketData } from '@prisma/client';
import {
addDays,
addMonths,
diff --git a/libs/ui/src/lib/mocks/entity-logo-image-source.service.mock.ts b/libs/ui/src/lib/mocks/entity-logo-image-source.service.mock.ts
index 766a4178b0..4160485bce 100644
--- a/libs/ui/src/lib/mocks/entity-logo-image-source.service.mock.ts
+++ b/libs/ui/src/lib/mocks/entity-logo-image-source.service.mock.ts
@@ -1,6 +1,5 @@
import { AssetProfileIdentifier } from '@ghostfolio/common/interfaces';
-
-import { DataSource } from '@prisma/client';
+import { DataSource } from '@ghostfolio/prisma/enums';
// Resolves like a logo of an unknown entity, but fails to load
const UNAVAILABLE_LOGO_URL = 'data:image/png;base64,unavailable';
diff --git a/libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.util.ts b/libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.util.ts
index 193624c768..163029258a 100644
--- a/libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.util.ts
+++ b/libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.util.ts
@@ -1,8 +1,8 @@
import { TAG_ID_EXCLUDE_FROM_ANALYSIS } from '@ghostfolio/common/config';
import { getAssetProfileIdentifier } from '@ghostfolio/common/helper';
import { Filter, PortfolioPosition } from '@ghostfolio/common/interfaces';
-
-import { AssetClass, DataSource, Tag } from '@prisma/client';
+import type { Tag } from '@ghostfolio/prisma/browser';
+import { AssetClass, DataSource } from '@ghostfolio/prisma/enums';
import { translate } from '../i18n';
import { PortfolioFilterFormValue } from './interfaces';
diff --git a/libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts b/libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts
index bf2f595c26..e90c446b41 100644
--- a/libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts
+++ b/libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts
@@ -3,6 +3,7 @@ import { DEFAULT_COLOR_SCHEME, UNKNOWN_KEY } from '@ghostfolio/common/config';
import { getLocale, getSum, getTextColor } from '@ghostfolio/common/helper';
import { PortfolioPosition } from '@ghostfolio/common/interfaces';
import { ColorScheme } from '@ghostfolio/common/types';
+import { DataSource } from '@ghostfolio/prisma/enums';
import {
AfterViewInit,
@@ -15,7 +16,6 @@ import {
output,
viewChild
} from '@angular/core';
-import { DataSource } from '@prisma/client';
import { Big } from 'big.js';
import {
ArcElement,
diff --git a/libs/ui/src/lib/services/admin.service.ts b/libs/ui/src/lib/services/admin.service.ts
index aa048faaf2..aba02c9b3f 100644
--- a/libs/ui/src/lib/services/admin.service.ts
+++ b/libs/ui/src/lib/services/admin.service.ts
@@ -21,11 +21,15 @@ import {
EnhancedAssetProfile
} from '@ghostfolio/common/interfaces';
import { DateRange } from '@ghostfolio/common/types';
+import type {
+ AssetProfileSplit,
+ MarketData,
+ Platform
+} from '@ghostfolio/prisma/browser';
import { GF_ENVIRONMENT } from '@ghostfolio/ui/environment';
import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';
import { inject, Service } from '@angular/core';
-import { AssetProfileSplit, MarketData, Platform } from '@prisma/client';
import { JobStatus } from 'bull';
import { isNumber } from 'lodash';
diff --git a/libs/ui/src/lib/services/data.service.ts b/libs/ui/src/lib/services/data.service.ts
index e09632079c..9bbb0bf5fa 100644
--- a/libs/ui/src/lib/services/data.service.ts
+++ b/libs/ui/src/lib/services/data.service.ts
@@ -65,22 +65,22 @@ import type {
GroupBy,
TagWithAccountAndActivityCount
} from '@ghostfolio/common/types';
-import { translate } from '@ghostfolio/ui/i18n';
-
-import { HttpClient, HttpParams } from '@angular/common/http';
-import { inject, Service } from '@angular/core';
-import { SortDirection } from '@angular/material/sort';
-import { utc } from '@date-fns/utc';
-import {
+import type {
Account,
AccountBalance,
- DataSource,
MarketData,
Order,
SymbolProfile,
Tag,
User as UserModel
-} from '@prisma/client';
+} from '@ghostfolio/prisma/browser';
+import { DataSource } from '@ghostfolio/prisma/enums';
+import { translate } from '@ghostfolio/ui/i18n';
+
+import { HttpClient, HttpParams } from '@angular/common/http';
+import { inject, Service } from '@angular/core';
+import { SortDirection } from '@angular/material/sort';
+import { utc } from '@date-fns/utc';
import { format, parseISO } from 'date-fns';
import { cloneDeep, groupBy, isNumber } from 'lodash';
import { Observable } from 'rxjs';
diff --git a/libs/ui/src/lib/tags-selector/interfaces/interfaces.ts b/libs/ui/src/lib/tags-selector/interfaces/interfaces.ts
index fe9af9882c..616ffa2487 100644
--- a/libs/ui/src/lib/tags-selector/interfaces/interfaces.ts
+++ b/libs/ui/src/lib/tags-selector/interfaces/interfaces.ts
@@ -1,4 +1,4 @@
-import { Tag } from '@prisma/client';
+import type { Tag } from '@ghostfolio/prisma/browser';
export interface NewTag extends Omit {
id: undefined;
diff --git a/nx.json b/nx.json
index e0a41e9835..d42873bda8 100644
--- a/nx.json
+++ b/nx.json
@@ -125,7 +125,8 @@
"sharedGlobals": [
"{workspaceRoot}/angular.json",
"{workspaceRoot}/tsconfig.base.json",
- "{workspaceRoot}/nx.json"
+ "{workspaceRoot}/nx.json",
+ "{workspaceRoot}/prisma/schema.prisma"
],
"production": [
"default",
diff --git a/prisma/schema.prisma b/prisma/schema.prisma
index 8d874b4de6..d2181e13be 100644
--- a/prisma/schema.prisma
+++ b/prisma/schema.prisma
@@ -1,7 +1,12 @@
generator client {
- provider = "prisma-client-js"
- previewFeatures = []
binaryTargets = ["debian-openssl-3.0.x", "linux-arm64-openssl-3.0.x", "native"]
+ previewFeatures = []
+ provider = "prisma-client-js"
+}
+
+generator workspaceClient {
+ output = "./generated"
+ provider = "prisma-client"
}
datasource db {
diff --git a/tsconfig.base.json b/tsconfig.base.json
index a74d9910f3..f5771c4e9d 100644
--- a/tsconfig.base.json
+++ b/tsconfig.base.json
@@ -19,6 +19,8 @@
"@ghostfolio/api/*": ["./apps/api/src/*"],
"@ghostfolio/client/*": ["./apps/client/src/app/*"],
"@ghostfolio/common/*": ["./libs/common/src/lib/*"],
+ "@ghostfolio/prisma/browser": ["./prisma/generated/browser"],
+ "@ghostfolio/prisma/enums": ["./prisma/generated/enums"],
"@ghostfolio/ui/*": ["./libs/ui/src/lib/*"]
},
"noFallthroughCasesInSwitch": true,
|