|
|
@ -1,4 +1,10 @@ |
|
|
import { ExportResponse } from '@ghostfolio/common/interfaces'; |
|
|
import { PortfolioCalculator } from '@ghostfolio/api/app/portfolio/calculator/portfolio-calculator'; |
|
|
|
|
|
import { getIntervalFromDateRange } from '@ghostfolio/common/calculation-helper'; |
|
|
|
|
|
import { |
|
|
|
|
|
ExportResponse, |
|
|
|
|
|
HistoricalDataItem |
|
|
|
|
|
} from '@ghostfolio/common/interfaces'; |
|
|
|
|
|
import { DateRange } from '@ghostfolio/common/types'; |
|
|
|
|
|
|
|
|
import { readFileSync } from 'node:fs'; |
|
|
import { readFileSync } from 'node:fs'; |
|
|
|
|
|
|
|
|
@ -38,6 +44,33 @@ export const userDummyData = { |
|
|
id: 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' |
|
|
id: 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* Returns the last chart item of getPerformance() for each date range |
|
|
|
|
|
*/ |
|
|
|
|
|
export async function getPerformanceByDateRange({ |
|
|
|
|
|
dateRanges, |
|
|
|
|
|
portfolioCalculator |
|
|
|
|
|
}: { |
|
|
|
|
|
dateRanges: DateRange[]; |
|
|
|
|
|
portfolioCalculator: PortfolioCalculator; |
|
|
|
|
|
}): Promise<{ [dateRange: string]: HistoricalDataItem }> { |
|
|
|
|
|
const performanceByDateRange: { [dateRange: string]: HistoricalDataItem } = |
|
|
|
|
|
{}; |
|
|
|
|
|
|
|
|
|
|
|
for (const dateRange of dateRanges) { |
|
|
|
|
|
const { endDate, startDate } = getIntervalFromDateRange({ dateRange }); |
|
|
|
|
|
|
|
|
|
|
|
const { chart } = await portfolioCalculator.getPerformance({ |
|
|
|
|
|
end: endDate, |
|
|
|
|
|
start: startDate |
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
performanceByDateRange[dateRange] = chart.at(-1); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return performanceByDateRange; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
export function loadExportFile(filePath: string): ExportResponse { |
|
|
export function loadExportFile(filePath: string): ExportResponse { |
|
|
return JSON.parse(readFileSync(filePath, 'utf8')); |
|
|
return JSON.parse(readFileSync(filePath, 'utf8')); |
|
|
} |
|
|
} |
|
|
|