Browse Source

Task/migrate client to prisma-client generated code (#7868)

* Migrate client to prisma-client generated code

* Update changelog
pull/7969/head^2
Szymon Łągiewka 1 week ago
committed by GitHub
parent
commit
c1c73e145a
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 1
      .gitignore
  2. 4
      CHANGELOG.md
  3. 5
      apps/api/eslint.config.cjs
  4. 2
      apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts
  5. 3
      apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
  6. 2
      apps/client/src/app/components/admin-market-data/asset-profile-dialog-host/asset-profile-dialog-host.component.ts
  7. 22
      apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
  8. 3
      apps/client/src/app/components/admin-market-data/asset-profile-dialog/interfaces/interfaces.ts
  9. 2
      apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.component.ts
  10. 2
      apps/client/src/app/components/admin-platform/admin-platform.component.ts
  11. 2
      apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/interfaces/interfaces.ts
  12. 2
      apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/interfaces/interfaces.ts
  13. 2
      apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
  14. 2
      apps/client/src/app/components/data-provider-status/data-provider-status.component.ts
  15. 2
      apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts
  16. 3
      apps/client/src/app/components/holding-detail-dialog/interfaces/interfaces.ts
  17. 2
      apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts
  18. 2
      apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
  19. 3
      apps/client/src/app/interfaces/interfaces.ts
  20. 2
      apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.component.ts
  21. 3
      apps/client/src/app/pages/accounts/create-or-update-account-dialog/interfaces/interfaces.ts
  22. 3
      apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts
  23. 2
      apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/types/activity-type.type.ts
  24. 2
      apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts
  25. 3
      apps/client/src/app/pages/portfolio/activities/import-activities-dialog/interfaces/interfaces.ts
  26. 13
      apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts
  27. 2
      apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts
  28. 2
      apps/client/src/app/services/ics/ics.service.ts
  29. 3
      apps/client/src/app/services/import-activities.service.ts
  30. 12
      eslint.config.cjs
  31. 8
      libs/common/src/lib/config.ts
  32. 2
      libs/common/src/lib/dtos/create-access.dto.ts
  33. 2
      libs/common/src/lib/dtos/create-asset-profile-with-market-data.dto.ts
  34. 7
      libs/common/src/lib/dtos/create-asset-profile.dto.ts
  35. 7
      libs/common/src/lib/dtos/create-order.dto.ts
  36. 2
      libs/common/src/lib/dtos/create-watchlist-item.dto.ts
  37. 3
      libs/common/src/lib/dtos/merge-asset-profile.dto.ts
  38. 3
      libs/common/src/lib/dtos/update-asset-profile-data.dto.ts
  39. 8
      libs/common/src/lib/dtos/update-asset-profile.dto.ts
  40. 7
      libs/common/src/lib/dtos/update-order.dto.ts
  41. 17
      libs/common/src/lib/helper.ts
  42. 2
      libs/common/src/lib/interfaces/access.interface.ts
  43. 3
      libs/common/src/lib/interfaces/activities.interface.ts
  44. 2
      libs/common/src/lib/interfaces/admin-market-data-details.interface.ts
  45. 3
      libs/common/src/lib/interfaces/admin-user.interface.ts
  46. 2
      libs/common/src/lib/interfaces/asset-class-selector-option.interface.ts
  47. 2
      libs/common/src/lib/interfaces/asset-profile-identifier.interface.ts
  48. 6
      libs/common/src/lib/interfaces/asset-profile-item.interface.ts
  49. 2
      libs/common/src/lib/interfaces/data-provider-info.interface.ts
  50. 2
      libs/common/src/lib/interfaces/enhanced-asset-profile.interface.ts
  51. 2
      libs/common/src/lib/interfaces/info-item.interface.ts
  52. 6
      libs/common/src/lib/interfaces/lookup-item.interface.ts
  53. 3
      libs/common/src/lib/interfaces/portfolio-position.interface.ts
  54. 2
      libs/common/src/lib/interfaces/responses/account-balances-response.interface.ts
  55. 2
      libs/common/src/lib/interfaces/responses/asset-profile-response.interface.ts
  56. 2
      libs/common/src/lib/interfaces/responses/data-provider-ghostfolio-asset-profile-response.interface.ts
  57. 3
      libs/common/src/lib/interfaces/responses/data-provider-response.interface.ts
  58. 8
      libs/common/src/lib/interfaces/responses/export-response.interface.ts
  59. 2
      libs/common/src/lib/interfaces/responses/platforms-response.interface.ts
  60. 3
      libs/common/src/lib/interfaces/responses/portfolio-holding-response.interface.ts
  61. 3
      libs/common/src/lib/interfaces/responses/public-portfolio-response.interface.ts
  62. 2
      libs/common/src/lib/interfaces/user-item.interface.ts
  63. 3
      libs/common/src/lib/interfaces/user-settings.interface.ts
  64. 4
      libs/common/src/lib/interfaces/user.interface.ts
  65. 3
      libs/common/src/lib/models/portfolio-snapshot-holding.ts
  66. 3
      libs/common/src/lib/permissions.ts
  67. 3
      libs/common/src/lib/scopes.ts
  68. 2
      libs/common/src/lib/types/access-with-grantee-user.type.ts
  69. 2
      libs/common/src/lib/types/account-with-balance.type.ts
  70. 2
      libs/common/src/lib/types/account-with-platform.type.ts
  71. 2
      libs/common/src/lib/types/account-with-value.type.ts
  72. 2
      libs/common/src/lib/types/order-with-account.type.ts
  73. 2
      libs/common/src/lib/types/tag-with-account-and-activity-count.type.ts
  74. 3
      libs/common/src/lib/types/user-with-settings.type.ts
  75. 2
      libs/ui/src/lib/activities-table/activities-table.component.ts
  76. 3
      libs/ui/src/lib/activity-type/activity-type.component.ts
  77. 3
      libs/ui/src/lib/benchmark/benchmark-detail-dialog/interfaces/interfaces.ts
  78. 2
      libs/ui/src/lib/entity-logo/entity-logo.component.ts
  79. 3
      libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/interfaces/interfaces.ts
  80. 3
      libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts
  81. 3
      libs/ui/src/lib/mocks/entity-logo-image-source.service.mock.ts
  82. 4
      libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.util.ts
  83. 2
      libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts
  84. 6
      libs/ui/src/lib/services/admin.service.ts
  85. 18
      libs/ui/src/lib/services/data.service.ts
  86. 2
      libs/ui/src/lib/tags-selector/interfaces/interfaces.ts
  87. 3
      nx.json
  88. 9
      prisma/schema.prisma
  89. 2
      tsconfig.base.json

1
.gitignore

@ -2,6 +2,7 @@
# compiled output
/out-tsc
/prisma/generated
/tmp
# dependencies

4
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

5
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'],

2
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';

3
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 {

2
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';

22
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';

3
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;

2
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';

2
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,

2
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;

2
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<Tag, 'id' | 'name'>;

2
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,

2
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';

2
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';

3
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;

2
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';

2
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';

3
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;

2
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';

3
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<

3
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';

2
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,

2
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';

3
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[];

13
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';

2
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';

2
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()

3
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';

12
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',
{

8
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';

2
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,

2
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';

7
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,

7
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,

2
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 {

3
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 {

3
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 {

8
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,

7
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,

17
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';

2
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';

3
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;

2
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';

3
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;

2
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;

2
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;

6
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';

2
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;

2
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';

2
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';

6
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';

3
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';

2
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<AccountBalance, 'accountId' | 'date' | 'id' | 'value'> & {

2
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';

2
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<SymbolProfile> {}

3
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;

8
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';

2
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[];

3
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;

3
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;

2
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;

3
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;

4
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';

3
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';

3
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',

3
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

2
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 };

2
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;

2
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;

2
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';

2
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';

2
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;

3
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 & {

2
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 {

3
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,

3
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;

2
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,

3
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;

3
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,

3
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';

4
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';

2
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,

6
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';

18
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';

2
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<Tag, 'id'> {
id: undefined;

3
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",

9
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 {

2
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,

Loading…
Cancel
Save