Skip to main content

Portfolio Service

Purpose

Investment portfolio management — holdings, orders, positions, and P&L tracking.

Responsibilities

  • Portfolio CRUD
  • Holdings and positions
  • Order management
  • Cost basis tracking
  • P&L calculation (realized/unrealized)

Non-Responsibilities

  • Market prices (Market Data Service)
  • Trade execution (external)
  • Analytics aggregation (Analytics Service)

APIs

MethodEndpointAuthDescription
POST/api/v1/portfoliosBearerCreate portfolio
GET/api/v1/portfolios/{id}BearerGet portfolio
GET/api/v1/portfolios/{id}/holdingsBearerList holdings
POST/api/v1/portfolios/{id}/ordersBearerPlace order
GET/api/v1/portfolios/{id}/pnlBearerP&L summary

Database

TableKey ColumnsDescription
portfoliosid, customer_id, name, currencyPortfolio records
holdingsid, portfolio_id, security_id, quantity, cost_basisPositions
ordersid, portfolio_id, security_id, side, quantity, statusOrders
pnl_snapshotsportfolio_id, realized, unrealized, dateDaily P&L

Kafka

Produces: PortfolioUpdated, OrderPlaced, OrderFilled Consumes: MarketPriceUpdated

Dependencies

Sync: Market Data Service Async: Price updates via Kafka

Failure Handling

  • Stale prices → flag holdings with last_price_date
  • Order rejection → status update + notification

Scaling

Moderate traffic. Cache market prices in Redis.

Security

Customers access own portfolios. PORTFOLIO_MANAGER for managed portfolios.

Observability

Metrics: portfolio_orders_total, pnl_calculation_duration.