add asset trends in statistics & analysis (#314)

This commit is contained in:
MaysWind
2025-11-09 22:51:46 +08:00
parent d3abb279e3
commit 4c8bb5a0b7
52 changed files with 1917 additions and 266 deletions
+47 -1
View File
@@ -1,5 +1,5 @@
import { type PartialRecord, itemAndIndex } from '@/core/base.ts';
import type { Year1BasedMonth, TextualYearMonthDay, StartEndTime, WeekDay } from '@/core/datetime.ts';
import type { TextualYearMonthDay, Year1BasedMonth, YearMonthDay, StartEndTime, WeekDay } from '@/core/datetime.ts';
import { type Coordinate, getNormalizedCoordinate } from '@/core/coordinate.ts';
import { TransactionType } from '@/core/transaction.ts';
@@ -581,6 +581,11 @@ export interface TransactionStatisticTrendsRequest extends YearMonthRangeRequest
readonly useTransactionTimezone: boolean;
}
export interface TransactionStatisticAssetTrendsRequest {
readonly startTime: number;
readonly endTime: number;
}
export const ALL_TRANSACTION_AMOUNTS_REQUEST_TYPE = [
'today',
'thisWeek',
@@ -710,12 +715,31 @@ export interface TransactionStatisticTrendsResponseItem {
readonly items: TransactionStatisticResponseItem[];
}
export interface TransactionStatisticAssetTrendsResponseItem extends YearMonthDay {
readonly year: number;
readonly month: number; // 1-based (1 = January, 12 = December)
readonly day: number;
readonly items: TransactionStatisticAssetTrendsResponseDataItem[];
}
export interface TransactionStatisticAssetTrendsResponseDataItem {
readonly accountId: string;
readonly accountOpeningBalance: number;
readonly accountClosingBalance: number;
}
export interface YearMonthDataItem extends Year1BasedMonth, Record<string, unknown> {}
export interface YearMonthDayDataItem extends YearMonthDay, Record<string, unknown> {}
export interface YearMonthItems<T extends Year1BasedMonth> extends Record<string, unknown> {
readonly items: T[];
}
export interface YearMonthDayItems<T extends YearMonthDay> extends Record<string, unknown> {
readonly items: T[];
}
export interface SortableTransactionStatisticDataItem {
readonly name: string;
readonly displayOrders: number[];
@@ -749,6 +773,13 @@ export interface TransactionStatisticTrendsResponseItemWithInfo {
readonly items: TransactionStatisticResponseItemWithInfo[];
}
export interface TransactionStatisticAssetTrendsResponseItemWithInfo {
readonly year: number;
readonly month: number; // 1-based (1 = January, 12 = December)
readonly day: number;
readonly items: TransactionStatisticResponseItemWithInfo[];
}
export type TransactionStatisticDataItemType = 'category' | 'account' | 'total';
export interface TransactionStatisticDataItemBase extends SortableTransactionStatisticDataItem {
@@ -820,6 +851,21 @@ export interface TransactionTrendsAnalysisDataAmount extends Record<string, unkn
readonly totalAmount: number;
}
export interface TransactionAssetTrendsAnalysisData {
readonly items: TransactionAssetTrendsAnalysisDataItem[];
}
export interface TransactionAssetTrendsAnalysisDataItem extends Record<string, unknown>, TransactionStatisticDataItemBase {
readonly items: TransactionAssetTrendsAnalysisDataAmount[];
}
export interface TransactionAssetTrendsAnalysisDataAmount extends Record<string, unknown>, YearMonthDay {
readonly year: number;
readonly month: number;
readonly day: number;
readonly totalAmount: number;
}
export type TransactionAmountsResponse = PartialRecord<TransactionAmountsRequestType, TransactionAmountsResponseItem>;
export interface TransactionAmountsResponseItem {