Browse Source

Create Symbol Overwrite

- on editing non-Manual Asset Class
pull/5027/head
Dan 2 years ago
parent
commit
ca722d7c28
  1. 21
      apps/api/src/app/admin/admin.controller.ts
  2. 4
      apps/api/src/app/admin/admin.module.ts
  3. 55
      apps/api/src/app/admin/admin.service.ts
  4. 11
      apps/api/src/services/symbol-profile/symbol-profile-overwrite.module.ts
  5. 68
      apps/api/src/services/symbol-profile/symbol-profile-overwrite.service.ts

21
apps/api/src/app/admin/admin.controller.ts

@ -448,6 +448,7 @@ export class AdminController {
);
}
if (dataSource == 'MANUAL') {
await this.adminService.patchAssetProfileData({
dataSource,
symbol,
@ -466,6 +467,26 @@ export class AdminController {
})
}
});
} else {
await this.adminService.patchAssetProfileData({
dataSource,
symbol,
tags: {
set: []
}
});
return this.adminService.patchAssetProfileData({
...assetProfileData,
dataSource,
symbol,
tags: {
connect: assetProfileData.tags?.map(({ id }) => {
return { id };
})
}
});
}
}
@Put('settings/:key')

4
apps/api/src/app/admin/admin.module.ts

@ -13,6 +13,7 @@ import { Module } from '@nestjs/common';
import { AdminController } from './admin.controller';
import { AdminService } from './admin.service';
import { QueueModule } from './queue/queue.module';
import { SymbolProfileOverwriteModule } from '@ghostfolio/api/services/symbol-profile/symbol-profile-overwrite.module';
@Module({
imports: [
@ -26,7 +27,8 @@ import { QueueModule } from './queue/queue.module';
PropertyModule,
QueueModule,
SubscriptionModule,
SymbolProfileModule
SymbolProfileModule,
SymbolProfileOverwriteModule
],
controllers: [AdminController],
providers: [AdminService],

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

@ -6,6 +6,7 @@ import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-
import { MarketDataService } from '@ghostfolio/api/services/market-data/market-data.service';
import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service';
import { PropertyService } from '@ghostfolio/api/services/property/property.service';
import { SymbolProfileOverwriteService } from '@ghostfolio/api/services/symbol-profile/symbol-profile-overwrite.service';
import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service';
import {
DEFAULT_CURRENCY,
@ -29,7 +30,8 @@ import {
Property,
SymbolProfile,
DataSource,
Tag
Tag,
SymbolProfileOverrides
} from '@prisma/client';
import { differenceInDays } from 'date-fns';
import { groupBy } from 'lodash';
@ -44,7 +46,8 @@ export class AdminService {
private readonly prismaService: PrismaService,
private readonly propertyService: PropertyService,
private readonly subscriptionService: SubscriptionService,
private readonly symbolProfileService: SymbolProfileService
private readonly symbolProfileService: SymbolProfileService,
private readonly symbolProfileOverwriteService: SymbolProfileOverwriteService
) {}
public async addAssetProfile({
@ -331,6 +334,7 @@ export class AdminService {
symbol,
symbolMapping
}: Prisma.SymbolProfileUpdateInput & UniqueAsset) {
if (dataSource === 'MANUAL') {
await this.symbolProfileService.updateSymbolProfile({
assetClass,
assetSubClass,
@ -342,6 +346,53 @@ export class AdminService {
symbol,
symbolMapping
});
} else {
await this.symbolProfileService.updateSymbolProfile({
comment,
dataSource,
name,
tags,
scraperConfiguration,
symbol,
symbolMapping
});
let symbolProfileId =
await this.symbolProfileOverwriteService.GetSymbolProfileId(
symbol,
dataSource
);
if (symbolProfileId) {
await this.symbolProfileOverwriteService.updateSymbolProfileOverrides({
assetClass,
assetSubClass,
symbolProfileId
});
} else {
symbolProfileId = await this.symbolProfileService.getSymbolProfiles([
{
dataSource,
symbol
}
])[0];
await this.symbolProfileOverwriteService.add({
SymbolProfile: {
connect: {
dataSource_symbol: {
dataSource,
symbol
}
}
}
});
await this.symbolProfileOverwriteService.updateSymbolProfileOverrides({
assetClass,
assetSubClass,
symbolProfileId
});
}
}
const [symbolProfile] = await this.symbolProfileService.getSymbolProfiles([
{

11
apps/api/src/services/symbol-profile/symbol-profile-overwrite.module.ts

@ -0,0 +1,11 @@
import { PrismaModule } from '@ghostfolio/api/services/prisma/prisma.module';
import { Module } from '@nestjs/common';
import { SymbolProfileOverwriteService } from './symbol-profile-overwrite.service';
@Module({
imports: [PrismaModule],
providers: [SymbolProfileOverwriteService],
exports: [SymbolProfileOverwriteService]
})
export class SymbolProfileOverwriteModule {}

68
apps/api/src/services/symbol-profile/symbol-profile-overwrite.service.ts

@ -0,0 +1,68 @@
import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service';
import { Injectable } from '@nestjs/common';
import { DataSource, Prisma, SymbolProfileOverrides } from '@prisma/client';
@Injectable()
export class SymbolProfileOverwriteService {
public constructor(private readonly prismaService: PrismaService) {}
public async add(
assetProfileOverwrite: Prisma.SymbolProfileOverridesCreateInput
): Promise<SymbolProfileOverrides | never> {
return this.prismaService.symbolProfileOverrides.create({
data: assetProfileOverwrite
});
}
public async delete(symbolProfileId: string) {
return this.prismaService.symbolProfileOverrides.delete({
where: { symbolProfileId: symbolProfileId }
});
}
public updateSymbolProfileOverrides({
assetClass,
assetSubClass,
name,
countries,
sectors,
url,
symbolProfileId
}: Prisma.SymbolProfileOverridesUpdateInput & { symbolProfileId: string }) {
return this.prismaService.symbolProfileOverrides.update({
data: {
assetClass,
assetSubClass,
name,
countries,
sectors,
url
},
where: { symbolProfileId: symbolProfileId }
});
}
public async GetSymbolProfileId(
Symbol: string,
datasource: DataSource
): Promise<string> {
let SymbolProfileId = await this.prismaService.symbolProfile
.findFirst({
where: {
symbol: Symbol,
dataSource: datasource
}
})
.then((s) => s.id);
let symbolProfileIdSaved = await this.prismaService.symbolProfileOverrides
.findFirst({
where: {
symbolProfileId: SymbolProfileId
}
})
.then((s) => s?.symbolProfileId);
return symbolProfileIdSaved;
}
}
Loading…
Cancel
Save