Browse Source

Eliminate data source from order model

pull/730/head
Thomas 3 years ago
parent
commit
dd090b5799
  1. 1
      apps/api/src/app/export/export.service.ts
  2. 3
      apps/api/src/app/import/import-data.dto.ts
  3. 9
      apps/api/src/app/import/import.service.ts
  4. 8
      apps/api/src/app/order/order.controller.ts
  5. 10
      apps/api/src/app/order/order.service.ts
  6. 4
      apps/api/src/app/portfolio/portfolio.service-new.ts
  7. 4
      apps/api/src/app/portfolio/portfolio.service.ts
  8. 17
      apps/api/src/services/data-gathering.service.ts
  9. 1
      prisma/schema.prisma

1
apps/api/src/app/export/export.service.ts

@ -19,7 +19,6 @@ export class ExportService {
select: { select: {
accountId: true, accountId: true,
currency: true, currency: true,
dataSource: true,
date: true, date: true,
fee: true, fee: true,
id: true, id: true,

3
apps/api/src/app/import/import-data.dto.ts

@ -1,5 +1,4 @@
import { CreateOrderDto } from '@ghostfolio/api/app/order/create-order.dto'; import { CreateOrderDto } from '@ghostfolio/api/app/order/create-order.dto';
import { Order } from '@prisma/client';
import { Type } from 'class-transformer'; import { Type } from 'class-transformer';
import { IsArray, ValidateNested } from 'class-validator'; import { IsArray, ValidateNested } from 'class-validator';
@ -7,5 +6,5 @@ export class ImportDataDto {
@IsArray() @IsArray()
@Type(() => CreateOrderDto) @Type(() => CreateOrderDto)
@ValidateNested({ each: true }) @ValidateNested({ each: true })
orders: Order[]; orders: CreateOrderDto[];
} }

9
apps/api/src/app/import/import.service.ts

@ -3,8 +3,8 @@ import { OrderService } from '@ghostfolio/api/app/order/order.service';
import { ConfigurationService } from '@ghostfolio/api/services/configuration.service'; import { ConfigurationService } from '@ghostfolio/api/services/configuration.service';
import { DataProviderService } from '@ghostfolio/api/services/data-provider/data-provider.service'; import { DataProviderService } from '@ghostfolio/api/services/data-provider/data-provider.service';
import { Injectable } from '@nestjs/common'; import { Injectable } from '@nestjs/common';
import { Order } from '@prisma/client';
import { isSameDay, parseISO } from 'date-fns'; import { isSameDay, parseISO } from 'date-fns';
import { CreateOrderDto } from '@ghostfolio/api/app/order/create-order.dto';
@Injectable() @Injectable()
export class ImportService { export class ImportService {
@ -19,7 +19,7 @@ export class ImportService {
orders, orders,
userId userId
}: { }: {
orders: Partial<Order>[]; orders: Partial<CreateOrderDto>[];
userId: string; userId: string;
}): Promise<void> { }): Promise<void> {
for (const order of orders) { for (const order of orders) {
@ -85,7 +85,7 @@ export class ImportService {
orders, orders,
userId userId
}: { }: {
orders: Partial<Order>[]; orders: Partial<CreateOrderDto>[];
userId: string; userId: string;
}) { }) {
if ( if (
@ -99,6 +99,7 @@ export class ImportService {
} }
const existingOrders = await this.orderService.orders({ const existingOrders = await this.orderService.orders({
include: { SymbolProfile: true },
orderBy: { date: 'desc' }, orderBy: { date: 'desc' },
where: { userId } where: { userId }
}); });
@ -110,7 +111,7 @@ export class ImportService {
const duplicateOrder = existingOrders.find((order) => { const duplicateOrder = existingOrders.find((order) => {
return ( return (
order.currency === currency && order.currency === currency &&
order.dataSource === dataSource && order.SymbolProfile.dataSource === dataSource &&
isSameDay(order.date, parseISO(<string>(<unknown>date))) && isSameDay(order.date, parseISO(<string>(<unknown>date))) &&
order.fee === fee && order.fee === fee &&
order.quantity === quantity && order.quantity === quantity &&

8
apps/api/src/app/order/order.controller.ts

@ -171,6 +171,14 @@ export class OrderController {
id_userId: { id: accountId, userId: this.request.user.id } id_userId: { id: accountId, userId: this.request.user.id }
} }
}, },
SymbolProfile: {
connect: {
dataSource_symbol: {
dataSource: data.dataSource,
symbol: data.symbol
}
}
},
User: { connect: { id: this.request.user.id } } User: { connect: { id: this.request.user.id } }
}, },
where: { where: {

10
apps/api/src/app/order/order.service.ts

@ -53,7 +53,11 @@ export class OrderService {
} }
public async createOrder( public async createOrder(
data: Prisma.OrderCreateInput & { accountId?: string; userId: string } data: Prisma.OrderCreateInput & {
accountId?: string;
dataSource: DataSource;
userId: string;
}
): Promise<Order> { ): Promise<Order> {
const defaultAccount = ( const defaultAccount = (
await this.accountService.getAccounts(data.userId) await this.accountService.getAccounts(data.userId)
@ -228,9 +232,9 @@ export class OrderService {
// Gather symbol data of order in the background, if not draft // Gather symbol data of order in the background, if not draft
this.dataGatheringService.gatherSymbols([ this.dataGatheringService.gatherSymbols([
{ {
dataSource: <DataSource>data.dataSource, dataSource: data.SymbolProfile.connect.dataSource_symbol.dataSource,
date: <Date>data.date, date: <Date>data.date,
symbol: <string>data.symbol symbol: data.SymbolProfile.connect.dataSource_symbol.symbol
} }
]); ]);
} }

4
apps/api/src/app/portfolio/portfolio.service-new.ts

@ -461,7 +461,7 @@ export class PortfolioServiceNew {
}) })
.map((order) => ({ .map((order) => ({
currency: order.currency, currency: order.currency,
dataSource: order.SymbolProfile?.dataSource ?? order.dataSource, dataSource: order.SymbolProfile.dataSource,
date: format(order.date, DATE_FORMAT), date: format(order.date, DATE_FORMAT),
fee: new Big(order.fee), fee: new Big(order.fee),
name: order.SymbolProfile?.name, name: order.SymbolProfile?.name,
@ -1118,7 +1118,7 @@ export class PortfolioServiceNew {
const portfolioOrders: PortfolioOrder[] = orders.map((order) => ({ const portfolioOrders: PortfolioOrder[] = orders.map((order) => ({
currency: order.currency, currency: order.currency,
dataSource: order.SymbolProfile?.dataSource ?? order.dataSource, dataSource: order.SymbolProfile.dataSource,
date: format(order.date, DATE_FORMAT), date: format(order.date, DATE_FORMAT),
fee: new Big( fee: new Big(
this.exchangeRateDataService.toCurrency( this.exchangeRateDataService.toCurrency(

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

@ -449,7 +449,7 @@ export class PortfolioService {
}) })
.map((order) => ({ .map((order) => ({
currency: order.currency, currency: order.currency,
dataSource: order.SymbolProfile?.dataSource ?? order.dataSource, dataSource: order.SymbolProfile.dataSource,
date: format(order.date, DATE_FORMAT), date: format(order.date, DATE_FORMAT),
fee: new Big(order.fee), fee: new Big(order.fee),
name: order.SymbolProfile?.name, name: order.SymbolProfile?.name,
@ -1081,7 +1081,7 @@ export class PortfolioService {
const portfolioOrders: PortfolioOrder[] = orders.map((order) => ({ const portfolioOrders: PortfolioOrder[] = orders.map((order) => ({
currency: order.currency, currency: order.currency,
dataSource: order.SymbolProfile?.dataSource ?? order.dataSource, dataSource: order.SymbolProfile.dataSource,
date: format(order.date, DATE_FORMAT), date: format(order.date, DATE_FORMAT),
fee: new Big( fee: new Big(
this.exchangeRateDataService.toCurrency( this.exchangeRateDataService.toCurrency(

17
apps/api/src/services/data-gathering.service.ts

@ -552,15 +552,22 @@ export class DataGatheringService {
const distinctOrders = await this.prismaService.order.findMany({ const distinctOrders = await this.prismaService.order.findMany({
distinct: ['symbol'], distinct: ['symbol'],
orderBy: [{ symbol: 'asc' }], orderBy: [{ symbol: 'asc' }],
select: { dataSource: true, symbol: true } select: { SymbolProfile: true }
}); });
return distinctOrders.filter((distinctOrder) => { return distinctOrders
.filter((distinctOrder) => {
return ( return (
distinctOrder.dataSource !== DataSource.GHOSTFOLIO && distinctOrder.SymbolProfile.dataSource !== DataSource.GHOSTFOLIO &&
distinctOrder.dataSource !== DataSource.MANUAL && distinctOrder.SymbolProfile.dataSource !== DataSource.MANUAL &&
distinctOrder.dataSource !== DataSource.RAKUTEN distinctOrder.SymbolProfile.dataSource !== DataSource.RAKUTEN
); );
})
.map((distinctOrder) => {
return {
dataSource: distinctOrder.SymbolProfile.dataSource,
symbol: distinctOrder.SymbolProfile.symbol
};
}); });
} }

1
prisma/schema.prisma

@ -75,7 +75,6 @@ model Order {
accountUserId String? accountUserId String?
createdAt DateTime @default(now()) createdAt DateTime @default(now())
currency String? currency String?
dataSource DataSource?
date DateTime date DateTime
fee Float fee Float
id String @default(uuid()) id String @default(uuid())

Loading…
Cancel
Save