diff --git a/src/index.ts b/src/index.ts index 87a110b..4a66d9b 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,14 +1,23 @@ -import { createLogger, transports, format } from "winston"; +import { PortfolioProvider } from "./interface/portfolio"; +import { QuoteProvider } from "./interface/quote"; -const logger = createLogger({ - transports: [new transports.Console()], - format: format.combine( - format.colorize(), - format.timestamp(), - format.printf(({ timestamp, level, message }) => { - return `[${timestamp}] ${level}: ${message}`; - }) - ), - }); - -logger.info("Hello world!"); \ No newline at end of file +/** + * Represents an exchange, which provides access to a portfolio provider and a quote provider. + */ +export interface Exchange { + + /** + * The portfolio provider for the exchange. + */ + readonly portfolioProvider: PortfolioProvider; + + /** + * The quote provider for the exchange. + */ + readonly quoteProvider: QuoteProvider; + + /** + * The name of the exchange. + */ + readonly name: string; +} diff --git a/src/interface/portfolio.ts b/src/interface/portfolio.ts new file mode 100644 index 0000000..f65e153 --- /dev/null +++ b/src/interface/portfolio.ts @@ -0,0 +1,99 @@ +/** + * Represents a financial position in a portfolio. + */ +export class Position { + /** + * The price of the last trade made for this position. + */ + readonly lastTrade: number; + + /** + * The date and time of the last trade made for this position. + */ + readonly lastTradeTime: Date; + + /** + * The change in the position value. + */ + readonly change: number; + + /** + * The percentage change in the position value. + */ + readonly changePercent: number; + + /** + * The earnings per share of the position. + */ + readonly earningsPerShare: number; + + /** + * The market capitalization of the position. + */ + readonly marketCap: number; + + /** + * The symbol of the position. + */ + readonly symbol: string; + + /** + * Represents a position in a portfolio. + * @constructor + * @param {number} lastTrade - The price of the last trade made for this position. + * @param {Date} lastTradeTime - The date and time of the last trade made for this position. + * @param {number} change - The change in the position value. + * @param {number} changePercent - The percentage change in the position value. + * @param {number} earningsPerShare - The earnings per share of the position. + * @param {number} marketCap - The market capitalization of the position. + * @param {string} symbol - The symbol of the position. + */ + constructor( + lastTrade: number, + lastTradeTime: Date, + change: number, + changePercent: number, + earningsPerShare: number, + marketCap: number, + symbol: string + ) { + this.lastTrade = lastTrade; + this.lastTradeTime = lastTradeTime; + this.change = change; + this.changePercent = changePercent; + this.earningsPerShare = earningsPerShare; + this.marketCap = marketCap; + this.symbol = symbol; + } +} + +/** + * Represents a portfolio of financial positions. + */ +export class Portfolio { + /** + * An array of positions held in the portfolio. + */ + readonly positions: Position[]; + + /** + * Creates a new Portfolio instance. + * @constructor + * @param {Position[]} positions - An array of Position objects representing the positions in the portfolio. + */ + constructor(positions: Position[]) { + this.positions = positions; + } +} + +/** + * A provider for fetching a portfolio. + */ +export interface PortfolioProvider { + + /** + * Fetches the portfolio. + * @returns A promise that resolves with the fetched portfolio. + */ + readonly fetchPortfolio: () => Promise; +} diff --git a/src/interface/quote.ts b/src/interface/quote.ts new file mode 100644 index 0000000..62b32e0 --- /dev/null +++ b/src/interface/quote.ts @@ -0,0 +1,65 @@ +/** + * Represents a stock quote. + */ +export class Quote { + /** + * The name of the company associated with this quote. + */ + readonly companyName: string; + + /** + * The earnings per share of a company. + */ + readonly earningsPerShare: number; + + /** + * The estimated earnings for a stock. + */ + readonly estimatedEarnings: number; + + /** + * The price of the last trade for the security. + */ + readonly lastTrade: number; + + /** + * The symbol of the financial instrument being quoted. + */ + readonly symbol: string; + + /** + * Represents a quote for a particular stock. + * @constructor + * @param {string} companyName - The name of the company associated with the stock. + * @param {number} earningsPerShare - The earnings per share for the stock. + * @param {number} estimatedEarnings - The estimated earnings for the stock. + * @param {number} lastTrade - The last trade price for the stock. + * @param {string} symbol - The symbol for the stock. + */ + constructor( + companyName: string, + earningsPerShare: number, + estimatedEarnings: number, + lastTrade: number, + symbol: string + ) { + this.companyName = companyName; + this.earningsPerShare = earningsPerShare; + this.estimatedEarnings = estimatedEarnings; + this.lastTrade = lastTrade; + this.symbol = symbol; + } +} + +/** + * A provider for fetching stock quotes. + */ +export interface QuoteProvider { + + /** + * Fetches a quote for the given stock symbol. + * @param symbol The stock symbol to fetch the quote for. + * @returns A Promise that resolves to a Quote object. + */ + readonly fetchQuote: (symbol: string) => Promise; +}