2021-12-29 17:03:37 +01:00
|
|
|
import { UpdateMarketDataDto } from '@ghostfolio/api/app/admin/update-market-data.dto';
|
2021-11-28 19:46:34 +01:00
|
|
|
import { DateQuery } from '@ghostfolio/api/app/portfolio/interfaces/date-query.interface';
|
2021-07-03 16:37:33 +02:00
|
|
|
import { PrismaService } from '@ghostfolio/api/services/prisma.service';
|
2021-07-09 20:25:42 +02:00
|
|
|
import { resetHours } from '@ghostfolio/common/helper';
|
2021-07-03 16:37:33 +02:00
|
|
|
import { Injectable } from '@nestjs/common';
|
2021-12-29 17:03:37 +01:00
|
|
|
import { DataSource, MarketData, Prisma } from '@prisma/client';
|
2021-07-03 16:37:33 +02:00
|
|
|
|
|
|
|
@Injectable()
|
|
|
|
export class MarketDataService {
|
2021-08-07 22:38:07 +02:00
|
|
|
public constructor(private readonly prismaService: PrismaService) {}
|
2021-07-03 16:37:33 +02:00
|
|
|
|
|
|
|
public async get({
|
|
|
|
date,
|
|
|
|
symbol
|
|
|
|
}: {
|
|
|
|
date: Date;
|
|
|
|
symbol: string;
|
|
|
|
}): Promise<MarketData> {
|
2021-08-07 22:38:07 +02:00
|
|
|
return await this.prismaService.marketData.findFirst({
|
2021-07-08 00:02:25 +02:00
|
|
|
where: {
|
2021-07-28 15:32:36 +02:00
|
|
|
symbol,
|
|
|
|
date: resetHours(date)
|
2021-07-08 00:02:25 +02:00
|
|
|
}
|
2021-07-03 16:37:33 +02:00
|
|
|
});
|
|
|
|
}
|
2021-07-09 21:35:54 +02:00
|
|
|
|
|
|
|
public async getRange({
|
2021-07-26 22:13:09 +02:00
|
|
|
dateQuery,
|
2021-07-20 20:42:56 +02:00
|
|
|
symbols
|
2021-07-09 21:35:54 +02:00
|
|
|
}: {
|
2021-07-26 22:13:09 +02:00
|
|
|
dateQuery: DateQuery;
|
2021-07-20 20:42:56 +02:00
|
|
|
symbols: string[];
|
2021-07-09 21:35:54 +02:00
|
|
|
}): Promise<MarketData[]> {
|
2021-08-07 22:38:07 +02:00
|
|
|
return await this.prismaService.marketData.findMany({
|
2021-07-20 21:07:17 +02:00
|
|
|
orderBy: [
|
|
|
|
{
|
|
|
|
date: 'asc'
|
|
|
|
},
|
|
|
|
{
|
|
|
|
symbol: 'asc'
|
|
|
|
}
|
|
|
|
],
|
2021-07-09 21:35:54 +02:00
|
|
|
where: {
|
2021-07-26 22:13:09 +02:00
|
|
|
date: dateQuery,
|
2021-07-20 20:42:56 +02:00
|
|
|
symbol: {
|
|
|
|
in: symbols
|
|
|
|
}
|
2021-07-09 21:35:54 +02:00
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
2021-11-28 19:46:34 +01:00
|
|
|
|
|
|
|
public async marketDataItems(params: {
|
|
|
|
skip?: number;
|
|
|
|
take?: number;
|
|
|
|
cursor?: Prisma.MarketDataWhereUniqueInput;
|
|
|
|
where?: Prisma.MarketDataWhereInput;
|
2021-12-05 16:52:24 +01:00
|
|
|
orderBy?: Prisma.MarketDataOrderByWithRelationInput;
|
2021-11-28 19:46:34 +01:00
|
|
|
}): Promise<MarketData[]> {
|
|
|
|
const { skip, take, cursor, where, orderBy } = params;
|
|
|
|
|
|
|
|
return this.prismaService.marketData.findMany({
|
|
|
|
cursor,
|
|
|
|
orderBy,
|
|
|
|
skip,
|
|
|
|
take,
|
|
|
|
where
|
|
|
|
});
|
|
|
|
}
|
2021-12-19 10:57:50 +01:00
|
|
|
|
|
|
|
public async updateMarketData(params: {
|
2021-12-29 17:03:37 +01:00
|
|
|
data: { dataSource: DataSource } & UpdateMarketDataDto;
|
2021-12-19 10:57:50 +01:00
|
|
|
where: Prisma.MarketDataWhereUniqueInput;
|
|
|
|
}): Promise<MarketData> {
|
|
|
|
const { data, where } = params;
|
|
|
|
|
2021-12-29 17:03:37 +01:00
|
|
|
return this.prismaService.marketData.upsert({
|
|
|
|
where,
|
|
|
|
create: {
|
|
|
|
dataSource: data.dataSource,
|
|
|
|
date: where.date_symbol.date,
|
|
|
|
marketPrice: data.marketPrice,
|
|
|
|
symbol: where.date_symbol.symbol
|
|
|
|
},
|
|
|
|
update: { marketPrice: data.marketPrice }
|
2021-12-19 10:57:50 +01:00
|
|
|
});
|
|
|
|
}
|
2021-07-03 16:37:33 +02:00
|
|
|
}
|