|
|
|
@ -4,7 +4,11 @@ import { HasPermissionGuard } from '@ghostfolio/api/guards/has-permission.guard' |
|
|
|
import { MarketDataService } from '@ghostfolio/api/services/market-data/market-data.service'; |
|
|
|
import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service'; |
|
|
|
import { UpdateBulkMarketDataDto } from '@ghostfolio/common/dtos'; |
|
|
|
import { getCurrencyFromSymbol, isCurrency } from '@ghostfolio/common/helper'; |
|
|
|
import { |
|
|
|
getCurrencyFromSymbol, |
|
|
|
getStartOfUtcDate, |
|
|
|
isCurrency |
|
|
|
} from '@ghostfolio/common/helper'; |
|
|
|
import { MarketDataOfMarketsResponse } from '@ghostfolio/common/interfaces'; |
|
|
|
import { hasPermission, permissions } from '@ghostfolio/common/permissions'; |
|
|
|
import { RequestWithUser } from '@ghostfolio/common/types'; |
|
|
|
@ -24,7 +28,7 @@ import { |
|
|
|
import { REQUEST } from '@nestjs/core'; |
|
|
|
import { AuthGuard } from '@nestjs/passport'; |
|
|
|
import { DataSource, Prisma } from '@prisma/client'; |
|
|
|
import { parseISO } from 'date-fns'; |
|
|
|
import { isValid } from 'date-fns'; |
|
|
|
import { getReasonPhrase, StatusCodes } from 'http-status-codes'; |
|
|
|
|
|
|
|
@Controller('market-data') |
|
|
|
@ -95,13 +99,24 @@ export class MarketDataController { |
|
|
|
} |
|
|
|
|
|
|
|
const dataBulkUpdate: Prisma.MarketDataUpdateInput[] = data.marketData.map( |
|
|
|
({ date, marketPrice }) => ({ |
|
|
|
({ date, marketPrice }) => { |
|
|
|
const startOfUtcDate = getStartOfUtcDate(date); |
|
|
|
|
|
|
|
if (!isValid(startOfUtcDate)) { |
|
|
|
throw new HttpException( |
|
|
|
getReasonPhrase(StatusCodes.BAD_REQUEST), |
|
|
|
StatusCodes.BAD_REQUEST |
|
|
|
); |
|
|
|
} |
|
|
|
|
|
|
|
return { |
|
|
|
dataSource, |
|
|
|
marketPrice, |
|
|
|
symbol, |
|
|
|
date: parseISO(date), |
|
|
|
date: startOfUtcDate, |
|
|
|
state: 'CLOSE' |
|
|
|
}) |
|
|
|
}; |
|
|
|
} |
|
|
|
); |
|
|
|
|
|
|
|
return this.marketDataService.updateMany({ |
|
|
|
|