Browse Source

Add URL to asset profile dialog and allow updating in api

pull/3218/head
Nicolas Fedor 1 year ago
parent
commit
b69adae9c2
  1. 8
      apps/api/src/app/admin/admin.service.ts
  2. 9
      apps/api/src/app/admin/update-asset-profile.dto.ts
  3. 6
      apps/api/src/services/symbol-profile/symbol-profile.service.ts
  4. 9
      apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
  5. 9
      apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
  6. 6
      apps/client/src/app/services/admin.service.ts

8
apps/api/src/app/admin/admin.service.ts

@ -333,12 +333,14 @@ export class AdminService {
scraperConfiguration, scraperConfiguration,
sectors, sectors,
symbol, symbol,
symbolMapping symbolMapping,
url
}: Prisma.SymbolProfileUpdateInput & UniqueAsset) { }: Prisma.SymbolProfileUpdateInput & UniqueAsset) {
const symbolProfileOverride = { const symbolProfileOverride = {
name: name as string, name: name as string,
assetClass: assetClass as $Enums.AssetClass, assetClass: assetClass as $Enums.AssetClass,
assetSubClass: assetSubClass as $Enums.AssetSubClass assetSubClass: assetSubClass as $Enums.AssetSubClass,
url: url as string
}; };
const updatedSymbolProfile: Prisma.SymbolProfileUpdateInput & UniqueAsset = const updatedSymbolProfile: Prisma.SymbolProfileUpdateInput & UniqueAsset =
@ -352,7 +354,7 @@ export class AdminService {
symbol, symbol,
symbolMapping, symbolMapping,
...(dataSource === 'MANUAL' ...(dataSource === 'MANUAL'
? { name, assetClass, assetSubClass } ? { name, assetClass, assetSubClass, url }
: { : {
SymbolProfileOverrides: { SymbolProfileOverrides: {
upsert: { upsert: {

9
apps/api/src/app/admin/update-asset-profile.dto.ts

@ -5,7 +5,8 @@ import {
IsISO4217CurrencyCode, IsISO4217CurrencyCode,
IsObject, IsObject,
IsOptional, IsOptional,
IsString IsString,
IsUrl
} from 'class-validator'; } from 'class-validator';
export class UpdateAssetProfileDto { export class UpdateAssetProfileDto {
@ -46,4 +47,10 @@ export class UpdateAssetProfileDto {
symbolMapping?: { symbolMapping?: {
[dataProvider: string]: string; [dataProvider: string]: string;
}; };
@IsUrl({
protocols: ['http', 'https']
})
@IsOptional()
url?: string;
} }

6
apps/api/src/services/symbol-profile/symbol-profile.service.ts

@ -98,7 +98,8 @@ export class SymbolProfileService {
sectors, sectors,
symbol, symbol,
symbolMapping, symbolMapping,
SymbolProfileOverrides SymbolProfileOverrides,
url
}: Prisma.SymbolProfileUpdateInput & UniqueAsset) { }: Prisma.SymbolProfileUpdateInput & UniqueAsset) {
return this.prismaService.symbolProfile.update({ return this.prismaService.symbolProfile.update({
data: { data: {
@ -111,7 +112,8 @@ export class SymbolProfileService {
scraperConfiguration, scraperConfiguration,
sectors, sectors,
symbolMapping, symbolMapping,
SymbolProfileOverrides SymbolProfileOverrides,
url
}, },
where: { dataSource_symbol: { dataSource, symbol } } where: { dataSource_symbol: { dataSource, symbol } }
}); });

9
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts

@ -64,7 +64,8 @@ export class AssetProfileDialog implements OnDestroy, OnInit {
name: ['', Validators.required], name: ['', Validators.required],
scraperConfiguration: '', scraperConfiguration: '',
sectors: '', sectors: '',
symbolMapping: '' symbolMapping: '',
url: ''
}); });
public assetProfileSubClass: string; public assetProfileSubClass: string;
public benchmarks: Partial<SymbolProfile>[]; public benchmarks: Partial<SymbolProfile>[];
@ -163,7 +164,8 @@ export class AssetProfileDialog implements OnDestroy, OnInit {
this.assetProfile?.scraperConfiguration ?? {} this.assetProfile?.scraperConfiguration ?? {}
), ),
sectors: JSON.stringify(this.assetProfile?.sectors ?? []), sectors: JSON.stringify(this.assetProfile?.sectors ?? []),
symbolMapping: JSON.stringify(this.assetProfile?.symbolMapping ?? {}) symbolMapping: JSON.stringify(this.assetProfile?.symbolMapping ?? {}),
url: this.assetProfile?.url
}); });
this.assetProfileForm.markAsPristine(); this.assetProfileForm.markAsPristine();
@ -293,7 +295,8 @@ export class AssetProfileDialog implements OnDestroy, OnInit {
currency: (<Currency>( currency: (<Currency>(
(<unknown>this.assetProfileForm.controls['currency'].value) (<unknown>this.assetProfileForm.controls['currency'].value)
))?.value, ))?.value,
name: this.assetProfileForm.controls['name'].value name: this.assetProfileForm.controls['name'].value,
url: this.assetProfileForm.controls['url'].value
}; };
this.adminService this.adminService

9
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html

@ -7,6 +7,9 @@
<div class="d-flex mb-3"> <div class="d-flex mb-3">
<h1 class="flex-grow-1 m-0" mat-dialog-title> <h1 class="flex-grow-1 m-0" mat-dialog-title>
{{ assetProfile?.name ?? data.symbol }} {{ assetProfile?.name ?? data.symbol }}
<small *ngIf="assetProfile?.url" class="text-body-secondary"
><a target="_blank" [href]="assetProfile?.url">Go to webpage</a></small
>
</h1> </h1>
<button <button
class="mx-1 no-min-width px-2" class="mx-1 no-min-width px-2"
@ -215,6 +218,12 @@
<input formControlName="name" matInput type="text" /> <input formControlName="name" matInput type="text" />
</mat-form-field> </mat-form-field>
</div> </div>
<div class="mt-3">
<mat-form-field appearance="outline" class="w-100 without-hint">
<mat-label i18n>URL</mat-label>
<input formControlName="url" matInput type="text" />
</mat-form-field>
</div>
<div *ngIf="assetProfile?.dataSource === 'MANUAL'" class="mt-3"> <div *ngIf="assetProfile?.dataSource === 'MANUAL'" class="mt-3">
<mat-form-field appearance="outline" class="w-100 without-hint"> <mat-form-field appearance="outline" class="w-100 without-hint">
<mat-label i18n>Currency</mat-label> <mat-label i18n>Currency</mat-label>

6
apps/client/src/app/services/admin.service.ts

@ -211,7 +211,8 @@ export class AdminService {
scraperConfiguration, scraperConfiguration,
sectors, sectors,
symbol, symbol,
symbolMapping symbolMapping,
url
}: UniqueAsset & UpdateAssetProfileDto) { }: UniqueAsset & UpdateAssetProfileDto) {
return this.http.patch<EnhancedSymbolProfile>( return this.http.patch<EnhancedSymbolProfile>(
`/api/v1/admin/profile-data/${dataSource}/${symbol}`, `/api/v1/admin/profile-data/${dataSource}/${symbol}`,
@ -224,7 +225,8 @@ export class AdminService {
name, name,
scraperConfiguration, scraperConfiguration,
sectors, sectors,
symbolMapping symbolMapping,
url
} }
); );
} }

Loading…
Cancel
Save