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: {
accountId: true,
currency: true,
dataSource: true,
date: true,
fee: 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 { Order } from '@prisma/client';
import { Type } from 'class-transformer';
import { IsArray, ValidateNested } from 'class-validator';
@ -7,5 +6,5 @@ export class ImportDataDto {
@IsArray()
@Type(() => CreateOrderDto)
@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 { DataProviderService } from '@ghostfolio/api/services/data-provider/data-provider.service';
import { Injectable } from '@nestjs/common';
import { Order } from '@prisma/client';
import { isSameDay, parseISO } from 'date-fns';
import { CreateOrderDto } from '@ghostfolio/api/app/order/create-order.dto';
@Injectable()
export class ImportService {
@ -19,7 +19,7 @@ export class ImportService {
orders,
userId
}: {
orders: Partial<Order>[];
orders: Partial<CreateOrderDto>[];
userId: string;
}): Promise<void> {
for (const order of orders) {
@ -85,7 +85,7 @@ export class ImportService {
orders,
userId
}: {
orders: Partial<Order>[];
orders: Partial<CreateOrderDto>[];
userId: string;
}) {
if (
@ -99,6 +99,7 @@ export class ImportService {
}
const existingOrders = await this.orderService.orders({
include: { SymbolProfile: true },
orderBy: { date: 'desc' },
where: { userId }
});
@ -110,7 +111,7 @@ export class ImportService {
const duplicateOrder = existingOrders.find((order) => {
return (
order.currency === currency &&
order.dataSource === dataSource &&
order.SymbolProfile.dataSource === dataSource &&
isSameDay(order.date, parseISO(<string>(<unknown>date))) &&
order.fee === fee &&
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 }
}
},
SymbolProfile: {
connect: {
dataSource_symbol: {
dataSource: data.dataSource,
symbol: data.symbol
}
}
},
User: { connect: { id: this.request.user.id } }
},
where: {

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

@ -53,7 +53,11 @@ export class OrderService {
}
public async createOrder(
data: Prisma.OrderCreateInput & { accountId?: string; userId: string }
data: Prisma.OrderCreateInput & {
accountId?: string;
dataSource: DataSource;
userId: string;
}
): Promise<Order> {
const defaultAccount = (
await this.accountService.getAccounts(data.userId)
@ -228,9 +232,9 @@ export class OrderService {
// Gather symbol data of order in the background, if not draft
this.dataGatheringService.gatherSymbols([
{
dataSource: <DataSource>data.dataSource,
dataSource: data.SymbolProfile.connect.dataSource_symbol.dataSource,
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) => ({
currency: order.currency,
dataSource: order.SymbolProfile?.dataSource ?? order.dataSource,
dataSource: order.SymbolProfile.dataSource,
date: format(order.date, DATE_FORMAT),
fee: new Big(order.fee),
name: order.SymbolProfile?.name,
@ -1118,7 +1118,7 @@ export class PortfolioServiceNew {
const portfolioOrders: PortfolioOrder[] = orders.map((order) => ({
currency: order.currency,
dataSource: order.SymbolProfile?.dataSource ?? order.dataSource,
dataSource: order.SymbolProfile.dataSource,
date: format(order.date, DATE_FORMAT),
fee: new Big(
this.exchangeRateDataService.toCurrency(

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

@ -449,7 +449,7 @@ export class PortfolioService {
})
.map((order) => ({
currency: order.currency,
dataSource: order.SymbolProfile?.dataSource ?? order.dataSource,
dataSource: order.SymbolProfile.dataSource,
date: format(order.date, DATE_FORMAT),
fee: new Big(order.fee),
name: order.SymbolProfile?.name,
@ -1081,7 +1081,7 @@ export class PortfolioService {
const portfolioOrders: PortfolioOrder[] = orders.map((order) => ({
currency: order.currency,
dataSource: order.SymbolProfile?.dataSource ?? order.dataSource,
dataSource: order.SymbolProfile.dataSource,
date: format(order.date, DATE_FORMAT),
fee: new Big(
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({
distinct: ['symbol'],
orderBy: [{ symbol: 'asc' }],
select: { dataSource: true, symbol: true }
select: { SymbolProfile: true }
});
return distinctOrders.filter((distinctOrder) => {
return distinctOrders
.filter((distinctOrder) => {
return (
distinctOrder.dataSource !== DataSource.GHOSTFOLIO &&
distinctOrder.dataSource !== DataSource.MANUAL &&
distinctOrder.dataSource !== DataSource.RAKUTEN
distinctOrder.SymbolProfile.dataSource !== DataSource.GHOSTFOLIO &&
distinctOrder.SymbolProfile.dataSource !== DataSource.MANUAL &&
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?
createdAt DateTime @default(now())
currency String?
dataSource DataSource?
date DateTime
fee Float
id String @default(uuid())

Loading…
Cancel
Save