Browse Source

Task/rename SymbolProfileOverrides to AssetProfileOverrides (#7271)

* Rename SymbolProfileOverrides to AssetProfileOverrides

* Update changelog
pull/6716/merge
Thomas Kaul 6 days ago
committed by GitHub
parent
commit
9b590efa87
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 1
      CHANGELOG.md
  2. 6
      apps/api/src/app/activities/activities.service.ts
  3. 4
      apps/api/src/app/admin/admin.service.ts
  4. 6
      apps/api/src/app/endpoints/asset-profiles/asset-profiles.service.ts
  5. 24
      apps/api/src/services/symbol-profile/symbol-profile.service.ts
  6. 6
      libs/common/src/lib/helper.ts
  7. 46
      prisma/schema.prisma

1
CHANGELOG.md

@ -17,6 +17,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Set the change detection strategy to `OnPush` in the portfolio holdings page
- Set the change detection strategy to `OnPush` in the _FIRE_ page
- Set the change detection strategy to `OnPush` in the users section of the admin control panel
- Renamed the `SymbolProfileOverrides` _Prisma_ data model to `AssetProfileOverrides` while keeping the database table name
- Improved the language localization for Dutch (`nl`)
- Improved the language localization for French (`fr`)
- Improved the language localization for German (`de`)

6
apps/api/src/app/activities/activities.service.ts

@ -615,14 +615,14 @@ export class ActivitiesService {
},
{
OR: [
{ SymbolProfileOverrides: { is: null } },
{ SymbolProfileOverrides: { assetClass: null } }
{ assetProfileOverrides: { is: null } },
{ assetProfileOverrides: { assetClass: null } }
]
}
]
},
{
SymbolProfileOverrides: {
assetProfileOverrides: {
OR: filtersByAssetClass.map(({ id }) => {
return { assetClass: AssetClass[id] };
})

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

@ -299,7 +299,7 @@ export class AdminService {
);
}
} else {
const symbolProfileOverrides = {
const assetProfileOverrides = {
assetClass: assetClass as AssetClass,
assetSubClass: assetSubClass as AssetSubClass,
countries: countries as Prisma.JsonArray,
@ -320,7 +320,7 @@ export class AdminService {
symbolMapping,
...this.symbolProfileService.getAssetProfileUpdateInput(
{ dataSource, symbol },
symbolProfileOverrides
assetProfileOverrides
)
};

6
apps/api/src/app/endpoints/asset-profiles/asset-profiles.service.ts

@ -198,6 +198,7 @@ export class AssetProfilesService {
take: 1
},
assetClass: true,
assetProfileOverrides: true,
assetSubClass: true,
comment: true,
countries: true,
@ -210,8 +211,7 @@ export class AssetProfilesService {
name: true,
scraperConfiguration: true,
sectors: true,
symbol: true,
SymbolProfileOverrides: true
symbol: true
}
}),
this.prismaService.symbolProfile.count({ where })
@ -268,7 +268,7 @@ export class AssetProfilesService {
const { assetClass, assetSubClass, countries, name, sectors } =
applyAssetProfileOverrides(
assetProfile,
assetProfile.SymbolProfileOverrides
assetProfile.assetProfileOverrides
);
const countriesCount = countries ? Object.keys(countries).length : 0;

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

@ -12,10 +12,10 @@ import { Sector } from '@ghostfolio/common/interfaces/sector.interface';
import { Injectable } from '@nestjs/common';
import {
AssetProfileOverrides,
DataSource,
Prisma,
SymbolProfile,
SymbolProfileOverrides
SymbolProfile
} from '@prisma/client';
import { continents, countries } from 'countries-list';
@ -85,12 +85,12 @@ export class SymbolProfileService {
}
return {
SymbolProfileOverrides: {
assetProfileOverrides: {
upsert: {
create:
data as Prisma.SymbolProfileOverridesCreateWithoutSymbolProfileInput,
data as Prisma.AssetProfileOverridesCreateWithoutSymbolProfileInput,
update:
data as Prisma.SymbolProfileOverridesUpdateWithoutSymbolProfileInput
data as Prisma.AssetProfileOverridesUpdateWithoutSymbolProfileInput
}
}
};
@ -112,7 +112,7 @@ export class SymbolProfileService {
select: { date: true },
take: 1
},
SymbolProfileOverrides: true
assetProfileOverrides: true
},
where: {
OR: aAssetProfileIdentifiers.map(({ dataSource, symbol }) => {
@ -137,7 +137,7 @@ export class SymbolProfileService {
_count: {
select: { activities: true, watchedBy: true }
},
SymbolProfileOverrides: true
assetProfileOverrides: true
},
where: {
id: {
@ -174,6 +174,7 @@ export class SymbolProfileService {
{ dataSource, symbol }: AssetProfileIdentifier,
{
assetClass,
assetProfileOverrides,
assetSubClass,
comment,
countries,
@ -185,13 +186,13 @@ export class SymbolProfileService {
scraperConfiguration,
sectors,
symbolMapping,
SymbolProfileOverrides,
url
}: Prisma.SymbolProfileUpdateInput
) {
return this.prismaService.symbolProfile.update({
data: {
assetClass,
assetProfileOverrides,
assetSubClass,
comment,
countries,
@ -203,7 +204,6 @@ export class SymbolProfileService {
scraperConfiguration,
sectors,
symbolMapping,
SymbolProfileOverrides,
url
},
where: { dataSource_symbol: { dataSource, symbol } }
@ -216,13 +216,13 @@ export class SymbolProfileService {
activities?: {
date: Date;
}[];
SymbolProfileOverrides: SymbolProfileOverrides;
assetProfileOverrides: AssetProfileOverrides;
})[]
): EnhancedSymbolProfile[] {
return symbolProfiles.map((symbolProfile) => {
const symbolProfileWithOverrides = applyAssetProfileOverrides(
symbolProfile,
symbolProfile.SymbolProfileOverrides
symbolProfile.assetProfileOverrides
);
const item = {
@ -252,7 +252,7 @@ export class SymbolProfileService {
item.dateOfFirstActivity = symbolProfile.activities?.[0]?.date;
delete item.activities;
delete item.SymbolProfileOverrides;
delete item.assetProfileOverrides;
return item;
});

6
libs/common/src/lib/helper.ts

@ -1,10 +1,10 @@
import { NumberParser } from '@internationalized/number';
import {
Type as ActivityType,
AssetProfileOverrides,
MarketData,
Prisma,
SymbolProfile,
SymbolProfileOverrides
SymbolProfile
} from '@prisma/client';
import { Big } from 'big.js';
import { isISO4217CurrencyCode } from 'class-validator';
@ -56,7 +56,7 @@ export const DATE_FORMAT_YEARLY = 'yyyy';
export function applyAssetProfileOverrides<T extends Partial<SymbolProfile>>(
assetProfile: T,
assetProfileOverrides: SymbolProfileOverrides | null
assetProfileOverrides: AssetProfileOverrides | null
): T {
if (!assetProfileOverrides) {
return assetProfile;

46
prisma/schema.prisma

@ -90,6 +90,21 @@ model ApiKey {
@@index([userId])
}
model AssetProfileOverrides {
assetClass AssetClass?
assetSubClass AssetSubClass?
countries Json? @default("[]")
holdings Json? @default("[]")
name String?
sectors Json? @default("[]")
symbolProfile SymbolProfile @relation(fields: [symbolProfileId], onDelete: Cascade, references: [id])
symbolProfileId String @id
updatedAt DateTime @updatedAt
url String?
@@map("SymbolProfileOverrides")
}
model AssetProfileResolution {
createdAt DateTime @default(now())
currency String
@ -187,32 +202,32 @@ model Settings {
model SymbolProfile {
activities Order[]
assetClass AssetClass?
assetProfileOverrides AssetProfileOverrides?
assetSubClass AssetSubClass?
comment String?
countries Json?
createdAt DateTime @default(now())
createdAt DateTime @default(now())
currency String
cusip String?
dataGatheringFrequency DataGatheringFrequency @default(DAILY)
dataGatheringFrequency DataGatheringFrequency @default(DAILY)
dataSource DataSource
figi String?
figiComposite String?
figiShareClass String?
holdings Json? @default("[]")
id String @id @default(uuid())
isActive Boolean @default(true)
holdings Json? @default("[]")
id String @id @default(uuid())
isActive Boolean @default(true)
isin String?
name String?
scraperConfiguration Json?
sectors Json?
symbol String
symbolMapping Json?
updatedAt DateTime @updatedAt
updatedAt DateTime @updatedAt
url String?
user User? @relation(fields: [userId], onDelete: Cascade, references: [id])
user User? @relation(fields: [userId], onDelete: Cascade, references: [id])
userId String?
watchedBy User[] @relation("UserWatchlist")
SymbolProfileOverrides SymbolProfileOverrides?
watchedBy User[] @relation("UserWatchlist")
@@unique([dataSource, symbol])
@@index([assetClass])
@ -226,19 +241,6 @@ model SymbolProfile {
@@index([symbol])
}
model SymbolProfileOverrides {
assetClass AssetClass?
assetSubClass AssetSubClass?
countries Json? @default("[]")
holdings Json? @default("[]")
name String?
sectors Json? @default("[]")
symbolProfileId String @id
updatedAt DateTime @updatedAt
url String?
SymbolProfile SymbolProfile @relation(fields: [symbolProfileId], onDelete: Cascade, references: [id])
}
model Subscription {
createdAt DateTime @default(now())
expiresAt DateTime

Loading…
Cancel
Save