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
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
89 changed files with
201 additions and
136 deletions
-
.gitignore
-
CHANGELOG.md
-
apps/api/eslint.config.cjs
-
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts
-
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
-
apps/client/src/app/components/admin-market-data/asset-profile-dialog-host/asset-profile-dialog-host.component.ts
-
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
-
apps/client/src/app/components/admin-market-data/asset-profile-dialog/interfaces/interfaces.ts
-
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.component.ts
-
apps/client/src/app/components/admin-platform/admin-platform.component.ts
-
apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/interfaces/interfaces.ts
-
apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/interfaces/interfaces.ts
-
apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
-
apps/client/src/app/components/data-provider-status/data-provider-status.component.ts
-
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts
-
apps/client/src/app/components/holding-detail-dialog/interfaces/interfaces.ts
-
apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts
-
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
-
apps/client/src/app/interfaces/interfaces.ts
-
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.component.ts
-
apps/client/src/app/pages/accounts/create-or-update-account-dialog/interfaces/interfaces.ts
-
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts
-
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/types/activity-type.type.ts
-
apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts
-
apps/client/src/app/pages/portfolio/activities/import-activities-dialog/interfaces/interfaces.ts
-
apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts
-
apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts
-
apps/client/src/app/services/ics/ics.service.ts
-
apps/client/src/app/services/import-activities.service.ts
-
eslint.config.cjs
-
libs/common/src/lib/config.ts
-
libs/common/src/lib/dtos/create-access.dto.ts
-
libs/common/src/lib/dtos/create-asset-profile-with-market-data.dto.ts
-
libs/common/src/lib/dtos/create-asset-profile.dto.ts
-
libs/common/src/lib/dtos/create-order.dto.ts
-
libs/common/src/lib/dtos/create-watchlist-item.dto.ts
-
libs/common/src/lib/dtos/merge-asset-profile.dto.ts
-
libs/common/src/lib/dtos/update-asset-profile-data.dto.ts
-
libs/common/src/lib/dtos/update-asset-profile.dto.ts
-
libs/common/src/lib/dtos/update-order.dto.ts
-
libs/common/src/lib/helper.ts
-
libs/common/src/lib/interfaces/access.interface.ts
-
libs/common/src/lib/interfaces/activities.interface.ts
-
libs/common/src/lib/interfaces/admin-market-data-details.interface.ts
-
libs/common/src/lib/interfaces/admin-user.interface.ts
-
libs/common/src/lib/interfaces/asset-class-selector-option.interface.ts
-
libs/common/src/lib/interfaces/asset-profile-identifier.interface.ts
-
libs/common/src/lib/interfaces/asset-profile-item.interface.ts
-
libs/common/src/lib/interfaces/data-provider-info.interface.ts
-
libs/common/src/lib/interfaces/enhanced-asset-profile.interface.ts
-
libs/common/src/lib/interfaces/info-item.interface.ts
-
libs/common/src/lib/interfaces/lookup-item.interface.ts
-
libs/common/src/lib/interfaces/portfolio-position.interface.ts
-
libs/common/src/lib/interfaces/responses/account-balances-response.interface.ts
-
libs/common/src/lib/interfaces/responses/asset-profile-response.interface.ts
-
libs/common/src/lib/interfaces/responses/data-provider-ghostfolio-asset-profile-response.interface.ts
-
libs/common/src/lib/interfaces/responses/data-provider-response.interface.ts
-
libs/common/src/lib/interfaces/responses/export-response.interface.ts
-
libs/common/src/lib/interfaces/responses/platforms-response.interface.ts
-
libs/common/src/lib/interfaces/responses/portfolio-holding-response.interface.ts
-
libs/common/src/lib/interfaces/responses/public-portfolio-response.interface.ts
-
libs/common/src/lib/interfaces/user-item.interface.ts
-
libs/common/src/lib/interfaces/user-settings.interface.ts
-
libs/common/src/lib/interfaces/user.interface.ts
-
libs/common/src/lib/models/portfolio-snapshot-holding.ts
-
libs/common/src/lib/permissions.ts
-
libs/common/src/lib/scopes.ts
-
libs/common/src/lib/types/access-with-grantee-user.type.ts
-
libs/common/src/lib/types/account-with-balance.type.ts
-
libs/common/src/lib/types/account-with-platform.type.ts
-
libs/common/src/lib/types/account-with-value.type.ts
-
libs/common/src/lib/types/order-with-account.type.ts
-
libs/common/src/lib/types/tag-with-account-and-activity-count.type.ts
-
libs/common/src/lib/types/user-with-settings.type.ts
-
libs/ui/src/lib/activities-table/activities-table.component.ts
-
libs/ui/src/lib/activity-type/activity-type.component.ts
-
libs/ui/src/lib/benchmark/benchmark-detail-dialog/interfaces/interfaces.ts
-
libs/ui/src/lib/entity-logo/entity-logo.component.ts
-
libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/interfaces/interfaces.ts
-
libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts
-
libs/ui/src/lib/mocks/entity-logo-image-source.service.mock.ts
-
libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.util.ts
-
libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts
-
libs/ui/src/lib/services/admin.service.ts
-
libs/ui/src/lib/services/data.service.ts
-
libs/ui/src/lib/tags-selector/interfaces/interfaces.ts
-
nx.json
-
prisma/schema.prisma
-
tsconfig.base.json
|
|
|
@ -2,6 +2,7 @@ |
|
|
|
|
|
|
|
# compiled output |
|
|
|
/out-tsc |
|
|
|
/prisma/generated |
|
|
|
/tmp |
|
|
|
|
|
|
|
# dependencies |
|
|
|
|
|
|
|
@ -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 |
|
|
|
|
|
|
|
@ -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'], |
|
|
|
|
|
|
|
@ -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'; |
|
|
|
|
|
|
|
@ -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 { |
|
|
|
|
|
|
|
@ -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'; |
|
|
|
|
|
|
|
@ -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'; |
|
|
|
|
|
|
|
@ -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; |
|
|
|
|
|
|
|
@ -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'; |
|
|
|
|
|
|
|
|
|
|
|
@ -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, |
|
|
|
|
|
|
|
@ -1,4 +1,4 @@ |
|
|
|
import { Platform } from '@prisma/client'; |
|
|
|
import type { Platform } from '@ghostfolio/prisma/browser'; |
|
|
|
|
|
|
|
export interface CreateOrUpdatePlatformDialogParams { |
|
|
|
platform?: Platform; |
|
|
|
|
|
|
|
@ -1,4 +1,4 @@ |
|
|
|
import { Tag } from '@prisma/client'; |
|
|
|
import type { Tag } from '@ghostfolio/prisma/browser'; |
|
|
|
|
|
|
|
export interface CreateOrUpdateTagDialogParams { |
|
|
|
tag?: Pick<Tag, 'id' | 'name'>; |
|
|
|
|
|
|
|
@ -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, |
|
|
|
|
|
|
|
@ -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'; |
|
|
|
|
|
|
|
|
|
|
|
@ -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'; |
|
|
|
|
|
|
|
@ -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; |
|
|
|
|
|
|
|
@ -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'; |
|
|
|
|
|
|
|
@ -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'; |
|
|
|
|
|
|
|
@ -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; |
|
|
|
|
|
|
|
@ -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'; |
|
|
|
|
|
|
|
|
|
|
|
@ -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< |
|
|
|
|
|
|
|
@ -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'; |
|
|
|
|
|
|
|
@ -1,4 +1,4 @@ |
|
|
|
import { Type } from '@prisma/client'; |
|
|
|
import { Type } from '@ghostfolio/prisma/enums'; |
|
|
|
|
|
|
|
export const ActivityType = { |
|
|
|
...Type, |
|
|
|
|
|
|
|
@ -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'; |
|
|
|
|
|
|
|
@ -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[]; |
|
|
|
|
|
|
|
@ -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'; |
|
|
|
|
|
|
|
@ -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'; |
|
|
|
|
|
|
|
@ -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() |
|
|
|
|
|
|
|
@ -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'; |
|
|
|
|
|
|
|
@ -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', |
|
|
|
{ |
|
|
|
|
|
|
|
@ -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'; |
|
|
|
|
|
|
|
|
|
|
|
@ -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, |
|
|
|
|
|
|
|
@ -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'; |
|
|
|
|
|
|
|
@ -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, |
|
|
|
|
|
|
|
@ -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, |
|
|
|
|
|
|
|
@ -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 { |
|
|
|
|
|
|
|
@ -1,4 +1,5 @@ |
|
|
|
import { DataSource } from '@prisma/client'; |
|
|
|
import { DataSource } from '@ghostfolio/prisma/enums'; |
|
|
|
|
|
|
|
import { IsEnum, IsString } from 'class-validator'; |
|
|
|
|
|
|
|
export class MergeAssetProfileDto { |
|
|
|
|
|
|
|
@ -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 { |
|
|
|
|
|
|
|
@ -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, |
|
|
|
|
|
|
|
@ -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, |
|
|
|
|
|
|
|
@ -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'; |
|
|
|
|
|
|
|
@ -1,4 +1,4 @@ |
|
|
|
import { AccessType } from '@prisma/client'; |
|
|
|
import { AccessType } from '@ghostfolio/prisma/enums'; |
|
|
|
|
|
|
|
import { AccessSettings } from './access-settings.interface'; |
|
|
|
|
|
|
|
|
|
|
|
@ -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; |
|
|
|
|
|
|
|
@ -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'; |
|
|
|
|
|
|
|
|
|
|
|
@ -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; |
|
|
|
|
|
|
|
@ -1,4 +1,4 @@ |
|
|
|
import { AssetClass, AssetSubClass } from '@prisma/client'; |
|
|
|
import { AssetClass, AssetSubClass } from '@ghostfolio/prisma/enums'; |
|
|
|
|
|
|
|
export interface AssetClassSelectorOption { |
|
|
|
id: AssetClass | AssetSubClass; |
|
|
|
|
|
|
|
@ -1,4 +1,4 @@ |
|
|
|
import { DataSource } from '@prisma/client'; |
|
|
|
import { DataSource } from '@ghostfolio/prisma/enums'; |
|
|
|
|
|
|
|
export interface AssetProfileIdentifier { |
|
|
|
dataSource: DataSource; |
|
|
|
|
|
|
|
@ -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'; |
|
|
|
|
|
|
|
|
|
|
|
@ -1,4 +1,4 @@ |
|
|
|
import { DataSource } from '@prisma/client'; |
|
|
|
import { DataSource } from '@ghostfolio/prisma/enums'; |
|
|
|
|
|
|
|
export interface DataProviderInfo { |
|
|
|
dataSource?: DataSource; |
|
|
|
|
|
|
|
@ -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'; |
|
|
|
|
|
|
|
@ -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'; |
|
|
|
|
|
|
|
@ -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'; |
|
|
|
|
|
|
|
|
|
|
|
@ -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'; |
|
|
|
|
|
|
|
|
|
|
|
@ -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'> & { |
|
|
|
|
|
|
|
@ -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'; |
|
|
|
|
|
|
|
|
|
|
|
@ -1,3 +1,3 @@ |
|
|
|
import { SymbolProfile } from '@prisma/client'; |
|
|
|
import type { SymbolProfile } from '@ghostfolio/prisma/browser'; |
|
|
|
|
|
|
|
export interface DataProviderGhostfolioAssetProfileResponse extends Partial<SymbolProfile> {} |
|
|
|
|
|
|
|
@ -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; |
|
|
|
|
|
|
|
@ -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'; |
|
|
|
|
|
|
|
@ -1,4 +1,4 @@ |
|
|
|
import { Platform } from '@prisma/client'; |
|
|
|
import type { Platform } from '@ghostfolio/prisma/browser'; |
|
|
|
|
|
|
|
export interface PlatformsResponse { |
|
|
|
platforms: Platform[]; |
|
|
|
|
|
|
|
@ -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; |
|
|
|
|
|
|
|
@ -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; |
|
|
|
|
|
|
|
@ -1,4 +1,4 @@ |
|
|
|
import { Role } from '@prisma/client'; |
|
|
|
import { Role } from '@ghostfolio/prisma/enums'; |
|
|
|
|
|
|
|
export interface UserItem { |
|
|
|
accessToken?: string; |
|
|
|
|
|
|
|
@ -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; |
|
|
|
|
|
|
|
@ -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,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'; |
|
|
|
|
|
|
|
|
|
|
|
@ -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', |
|
|
|
|
|
|
|
@ -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 |
|
|
|
|
|
|
|
@ -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 }; |
|
|
|
|
|
|
|
@ -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; |
|
|
|
|
|
|
|
@ -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; |
|
|
|
|
|
|
|
@ -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'; |
|
|
|
|
|
|
|
|
|
|
|
@ -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'; |
|
|
|
|
|
|
|
|
|
|
|
@ -1,4 +1,4 @@ |
|
|
|
import { Tag } from '@prisma/client'; |
|
|
|
import type { Tag } from '@ghostfolio/prisma/browser'; |
|
|
|
|
|
|
|
export type TagWithAccountAndActivityCount = Tag & { |
|
|
|
accountCount: number; |
|
|
|
|
|
|
|
@ -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 & { |
|
|
|
|
|
|
|
@ -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 { |
|
|
|
|
|
|
|
@ -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, |
|
|
|
|
|
|
|
@ -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; |
|
|
|
|
|
|
|
@ -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, |
|
|
|
|
|
|
|
@ -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; |
|
|
|
|
|
|
|
@ -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, |
|
|
|
|
|
|
|
@ -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'; |
|
|
|
|
|
|
|
@ -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'; |
|
|
|
|
|
|
|
@ -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, |
|
|
|
|
|
|
|
@ -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'; |
|
|
|
|
|
|
|
|
|
|
|
@ -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'; |
|
|
|
|
|
|
|
@ -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; |
|
|
|
|
|
|
|
@ -125,7 +125,8 @@ |
|
|
|
"sharedGlobals": [ |
|
|
|
"{workspaceRoot}/angular.json", |
|
|
|
"{workspaceRoot}/tsconfig.base.json", |
|
|
|
"{workspaceRoot}/nx.json" |
|
|
|
"{workspaceRoot}/nx.json", |
|
|
|
"{workspaceRoot}/prisma/schema.prisma" |
|
|
|
], |
|
|
|
"production": [ |
|
|
|
"default", |
|
|
|
|
|
|
|
@ -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 { |
|
|
|
|
|
|
|
@ -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, |
|
|
|
|