diff --git a/apps/api/src/app/admin/admin.controller.ts b/apps/api/src/app/admin/admin.controller.ts index 09f0389fb..7f3f17791 100644 --- a/apps/api/src/app/admin/admin.controller.ts +++ b/apps/api/src/app/admin/admin.controller.ts @@ -337,7 +337,7 @@ export class AdminController { @Patch('profile-data/:dataSource/:symbol') @UseGuards(AuthGuard('jwt')) - public async patchProfileData( + public async patchAssetProfileData( @Body() assetProfileData: UpdateAssetProfileDto, @Param('dataSource') dataSource: DataSource, @Param('symbol') symbol: string @@ -354,7 +354,7 @@ export class AdminController { ); } - return this.adminService.patchProfileData({ + return this.adminService.patchAssetProfileData({ ...assetProfileData, dataSource, symbol diff --git a/apps/api/src/app/admin/admin.service.ts b/apps/api/src/app/admin/admin.service.ts index d57ef1570..d7235e9e6 100644 --- a/apps/api/src/app/admin/admin.service.ts +++ b/apps/api/src/app/admin/admin.service.ts @@ -189,7 +189,7 @@ export class AdminService { }; } - public async patchProfileData({ + public async patchAssetProfileData({ dataSource, symbol, symbolMapping diff --git a/apps/api/src/app/admin/update-asset-profile.dto.ts b/apps/api/src/app/admin/update-asset-profile.dto.ts index a4767e136..f21785f5b 100644 --- a/apps/api/src/app/admin/update-asset-profile.dto.ts +++ b/apps/api/src/app/admin/update-asset-profile.dto.ts @@ -3,5 +3,7 @@ import { IsObject, IsOptional } from 'class-validator'; export class UpdateAssetProfileDto { @IsObject() @IsOptional() - symbolMapping?: object; + symbolMapping?: { + [dataProvider: string]: string; + }; } diff --git a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts index d991e4c53..622f5d3c7 100644 --- a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts +++ b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts @@ -10,7 +10,10 @@ import { FormBuilder } from '@angular/forms'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import { UpdateAssetProfileDto } from '@ghostfolio/api/app/admin/update-asset-profile.dto'; import { AdminService } from '@ghostfolio/client/services/admin.service'; -import { EnhancedSymbolProfile } from '@ghostfolio/common/interfaces'; +import { + EnhancedSymbolProfile, + UniqueAsset +} from '@ghostfolio/common/interfaces'; import { MarketData } from '@prisma/client'; import { Subject } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; @@ -42,8 +45,8 @@ export class AssetProfileDialog implements OnDestroy, OnInit { public constructor( private adminService: AdminService, private changeDetectorRef: ChangeDetectorRef, - public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public data: AssetProfileDialogParams, + public dialogRef: MatDialogRef, private formBuilder: FormBuilder ) {} @@ -51,10 +54,65 @@ export class AssetProfileDialog implements OnDestroy, OnInit { this.initialize(); } + public initialize() { + this.adminService + .fetchAdminMarketDataBySymbol({ + dataSource: this.data.dataSource, + symbol: this.data.symbol + }) + .pipe(takeUntil(this.unsubscribeSubject)) + .subscribe(({ assetProfile, marketData }) => { + this.assetProfile = assetProfile; + this.countries = {}; + this.marketDataDetails = marketData; + this.sectors = {}; + + if (assetProfile?.countries?.length > 0) { + for (const country of assetProfile.countries) { + this.countries[country.code] = { + name: country.name, + value: country.weight + }; + } + } + + if (assetProfile?.sectors?.length > 0) { + for (const sector of assetProfile.sectors) { + this.sectors[sector.name] = { + name: sector.name, + value: sector.weight + }; + } + } + + this.assetProfileForm.setValue({ + symbolMapping: JSON.stringify(this.assetProfile?.symbolMapping) + }); + + this.assetProfileForm.markAsPristine(); + + this.changeDetectorRef.markForCheck(); + }); + } + public onClose(): void { this.dialogRef.close(); } + public onGatherProfileDataBySymbol({ dataSource, symbol }: UniqueAsset) { + this.adminService + .gatherProfileDataBySymbol({ dataSource, symbol }) + .pipe(takeUntil(this.unsubscribeSubject)) + .subscribe(() => {}); + } + + public onGatherSymbol({ dataSource, symbol }: UniqueAsset) { + this.adminService + .gatherSymbol({ dataSource, symbol }) + .pipe(takeUntil(this.unsubscribeSubject)) + .subscribe(() => {}); + } + public onMarketDataChanged(withRefresh: boolean = false) { if (withRefresh) { this.initialize(); @@ -89,43 +147,4 @@ export class AssetProfileDialog implements OnDestroy, OnInit { this.unsubscribeSubject.next(); this.unsubscribeSubject.complete(); } - - private initialize() { - this.adminService - .fetchAdminMarketDataBySymbol({ - dataSource: this.data.dataSource, - symbol: this.data.symbol - }) - .pipe(takeUntil(this.unsubscribeSubject)) - .subscribe(({ assetProfile, marketData }) => { - this.assetProfile = assetProfile; - this.countries = {}; - this.marketDataDetails = marketData; - this.sectors = {}; - - if (assetProfile?.countries?.length > 0) { - for (const country of assetProfile.countries) { - this.countries[country.code] = { - name: country.name, - value: country.weight - }; - } - } - - if (assetProfile?.sectors?.length > 0) { - for (const sector of assetProfile.sectors) { - this.sectors[sector.name] = { - name: sector.name, - value: sector.weight - }; - } - } - - this.assetProfileForm.setValue({ - symbolMapping: JSON.stringify(this.assetProfile?.symbolMapping) - }); - - this.changeDetectorRef.markForCheck(); - }); - } } diff --git a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html index ce31fd349..63c49d76a 100644 --- a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html +++ b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -4,7 +4,42 @@ (keyup.enter)="assetProfileForm.valid && onSubmit()" (ngSubmit)="onSubmit()" > -

{{ assetProfile?.name ?? data.symbol }}

+
+

+ {{ assetProfile?.name ?? data.symbol }} +

+ + + + + + +
+