This commit was merged in pull request #154.
This commit is contained in:
@@ -4,6 +4,8 @@ import {
|
||||
} from '@nestjs/common';
|
||||
import { randomUUID } from 'node:crypto';
|
||||
|
||||
import type { Prisma } from '../../../../../generated/prisma/client';
|
||||
|
||||
import { StructuredLogger } from '../../../../common/logging/structured-logger.service';
|
||||
import { isTbankErrorCode, TbankErrorCode } from '../../../../integrations/tbank/tbank-error-code';
|
||||
import {
|
||||
@@ -26,6 +28,7 @@ import { sumMoneyByCurrency } from '../domain/portfolio-totals';
|
||||
import {
|
||||
portfolioFreshForMs,
|
||||
PortfolioRepository,
|
||||
portfolioSnapshot,
|
||||
portfolioWorkKey,
|
||||
} from '../infrastructure/portfolio.repository';
|
||||
import { mapPortfolio } from '../infrastructure/tbank-portfolio.mapper';
|
||||
@@ -88,18 +91,7 @@ export class PortfolioService {
|
||||
type: account.type,
|
||||
openedOn: account.openedOn,
|
||||
snapshot: account.portfolio
|
||||
? {
|
||||
...(account.portfolio.payload as unknown as PortfolioDto),
|
||||
positions: (account.portfolio.payload as unknown as PortfolioDto).positions.map((position) => ({
|
||||
...position,
|
||||
sector: position.sector ?? null,
|
||||
issuer: position.issuer ?? null,
|
||||
})),
|
||||
lastSuccessfulAt: account.portfolio.fetchedAt.toISOString(),
|
||||
isStale:
|
||||
Date.now() - account.portfolio.fetchedAt.valueOf() >=
|
||||
portfolioFreshForMs,
|
||||
}
|
||||
? savedSnapshot(account.portfolio)
|
||||
: null,
|
||||
meta: investmentResourceMeta({
|
||||
resourceKey: `portfolio/${encodeURIComponent(account.accountId)}`,
|
||||
@@ -326,3 +318,17 @@ export class PortfolioService {
|
||||
return mapPortfolio(upstream, money, savedMetadata, lastSuccessfulAt, classifications);
|
||||
}
|
||||
}
|
||||
|
||||
function savedSnapshot(saved: { fetchedAt: Date; payload: Prisma.JsonValue }): PortfolioDto {
|
||||
const snapshot = portfolioSnapshot(saved.payload);
|
||||
return {
|
||||
...snapshot,
|
||||
positions: snapshot.positions.map((position) => ({
|
||||
...position,
|
||||
sector: position.sector ?? null,
|
||||
issuer: position.issuer ?? null,
|
||||
})),
|
||||
lastSuccessfulAt: saved.fetchedAt.toISOString(),
|
||||
isStale: Date.now() - saved.fetchedAt.valueOf() >= portfolioFreshForMs,
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user