193 lines
3.7 KiB
TypeScript
193 lines
3.7 KiB
TypeScript
export interface ApiResponseMeta {
|
|
cachedAt: string | null;
|
|
fromCache: boolean;
|
|
}
|
|
|
|
export interface ApiEnvelope<T> {
|
|
data: T;
|
|
meta: ApiResponseMeta;
|
|
}
|
|
|
|
export interface StockMarketData {
|
|
price: number | null;
|
|
change: number | null;
|
|
changePercent: number | null;
|
|
open: number | null;
|
|
high: number | null;
|
|
low: number | null;
|
|
volume: number;
|
|
value: number;
|
|
issueCapitalization: number | null;
|
|
updatedAt: string;
|
|
}
|
|
|
|
export interface ShareResponse {
|
|
secid: string;
|
|
isin: string;
|
|
name: string;
|
|
shortName: string;
|
|
latName: string | null;
|
|
listLevel: number;
|
|
issueSize: number;
|
|
faceValue: number;
|
|
faceUnit: string;
|
|
type: string;
|
|
marketData: StockMarketData;
|
|
}
|
|
|
|
export interface DividendItem {
|
|
registryCloseDate: string;
|
|
value: number;
|
|
currency: string;
|
|
}
|
|
|
|
export interface ShareHistoryItem {
|
|
date: string;
|
|
open: number;
|
|
high: number;
|
|
low: number;
|
|
close: number;
|
|
volume: number;
|
|
value: number;
|
|
}
|
|
|
|
export interface BondMarketData {
|
|
price: number | null;
|
|
yieldToMaturity: number | null;
|
|
duration: number | null;
|
|
accruedInt: number | null;
|
|
couponValue: number | null;
|
|
couponPercent: number | null;
|
|
nextCouponDate: string | null;
|
|
open: number;
|
|
high: number | null;
|
|
low: number | null;
|
|
volume: number;
|
|
updatedAt: string;
|
|
}
|
|
|
|
export interface BondResponse {
|
|
secid: string;
|
|
isin: string;
|
|
name: string;
|
|
shortName: string;
|
|
latName: string | null;
|
|
listLevel: number;
|
|
issueSize: number;
|
|
faceValue: number;
|
|
faceUnit: string;
|
|
matDate: string;
|
|
couponValue: number;
|
|
couponPercent: number | null;
|
|
couponPeriod: number;
|
|
nextCoupon: string | null;
|
|
accruedInt: number;
|
|
bondType: string;
|
|
bondSubType: string;
|
|
offerDate: string | null;
|
|
buybackDate: string | null;
|
|
marketData: BondMarketData;
|
|
}
|
|
|
|
export interface BondHistoryItem {
|
|
date: string;
|
|
closePrice: number;
|
|
yieldClose: number | null;
|
|
duration: number | null;
|
|
}
|
|
|
|
export interface CandleItem {
|
|
open: number;
|
|
high: number;
|
|
low: number;
|
|
close: number;
|
|
volume: number;
|
|
value: number;
|
|
begin: string;
|
|
end: string;
|
|
}
|
|
|
|
export interface SearchResultItem {
|
|
secid: string;
|
|
isin: string;
|
|
shortName: string;
|
|
type: 'share' | 'bond';
|
|
listLevel: number;
|
|
currency: string | null;
|
|
price: number | null;
|
|
}
|
|
|
|
export interface HealthResponse {
|
|
status: string;
|
|
timestamp: string;
|
|
uptime: number;
|
|
}
|
|
|
|
export interface UserResponse {
|
|
id: number;
|
|
email: string;
|
|
name: string | null;
|
|
role: string;
|
|
}
|
|
|
|
export interface AuthResponse {
|
|
user: UserResponse;
|
|
accessToken: string;
|
|
}
|
|
|
|
export interface Portfolio {
|
|
id: number;
|
|
name: string;
|
|
description: string | null;
|
|
currency: string;
|
|
createdAt: string;
|
|
updatedAt: string;
|
|
totalValue: number;
|
|
positionCount: number;
|
|
shareCount: number;
|
|
bondCount: number;
|
|
}
|
|
|
|
export interface PositionWithPrice {
|
|
id: number;
|
|
secid: string;
|
|
shortName: string | null;
|
|
type: 'share' | 'bond';
|
|
quantity: number;
|
|
notes: string | null;
|
|
tags: string[] | null;
|
|
currentPrice: number | null;
|
|
currentValue: number | null;
|
|
weightPercent: number;
|
|
change?: number | null;
|
|
changePercent?: number | null;
|
|
yieldToMaturity?: number | null;
|
|
duration?: number | null;
|
|
couponValue?: number | null;
|
|
couponPercent?: number | null;
|
|
nextCouponDate?: string | null;
|
|
matDate?: string | null;
|
|
accruedInt?: number | null;
|
|
bid?: number | null;
|
|
offer?: number | null;
|
|
couponPeriod?: number | null;
|
|
bondType?: string | null;
|
|
offerDate?: string | null;
|
|
}
|
|
|
|
export interface PortfolioDetail extends Portfolio {
|
|
positions: PositionWithPrice[];
|
|
totalValue: number;
|
|
}
|
|
|
|
export interface Position {
|
|
id: number;
|
|
secid: string;
|
|
quantity: number;
|
|
notes: string | null;
|
|
tags: string[] | null;
|
|
portfolioId: number;
|
|
createdAt: string;
|
|
updatedAt: string;
|
|
}
|