# delght/assignment architecture

> Architecture diagram of the GitHub repository delght/assignment, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/delght/assignment
- Repository: https://github.com/delght/assignment

## Overview

Coinance imports trade histories, combines them with a fixed price snapshot, computes portfolio positions and valuation, and exposes the results to a dashboard. The frontend presents summary figures, holdings, charts, dataset controls, and a filterable transaction explorer; it formats API values rather than calculating P&L. The graph emphasizes the documented workflow and relationships visible in excerpts or the source index; unsampled feature internals and HTTP wiring are represented only where documented.

Main entry points: [`frontend/src/app/PortfolioView.tsx`](https://github.com/delght/assignment/blob/main/frontend/src/app/PortfolioView.tsx) (Dashboard view), [`backend/src/dataset/dataset.service.ts`](https://github.com/delght/assignment/blob/main/backend/src/dataset/dataset.service.ts) (Dataset service), [`backend/src/api/transactions/transactions.controller.ts`](https://github.com/delght/assignment/blob/main/backend/src/api/transactions/transactions.controller.ts) (Transactions API), [`frontend/src/api/client.ts`](https://github.com/delght/assignment/blob/main/frontend/src/api/client.ts) (API client)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_portfolio["Portfolio data and calculation"]
  node_tradeparser["Trade parser<br/>[trades.ts]"]
  node_analysis["Portfolio analysis<br/>[index.ts]"]
  node_ledger["Weighted cost ledger<br/>[ledger.ts]"]
  node_valuation["Portfolio valuation<br/>[valuation.ts]"]
end

subgraph group_server["Backend dataset and API"]
  node_samplefiles["Sample file reader<br/>[sample-files.ts]"]
  node_datasetservice["Dataset service<br/>[dataset.service.ts]"]
  node_datasetbuilder["Dataset builder<br/>[dataset.ts]"]
  node_datasetapi["Dataset import API"]
  node_portfolioapi["Portfolio API"]
  node_transactionapi["Transactions API"]
  node_queryparser["Transaction query parser"]
  node_transactionselect["Transaction selector"]
  node_serializer["Response serializer<br/>[serialize.ts]"]
end

subgraph group_web["Dashboard interface"]
  node_apiclient["API client<br/>[client.ts]"]
  node_dashboard["Dashboard view<br/>[PortfolioView.tsx]"]
  node_datasetcontrols["Dataset controls<br/>[DatasetActions.tsx]"]
  node_summary["Portfolio summary<br/>[SummaryCards.tsx]"]
  node_holdings["Holdings display<br/>[HoldingsTable.tsx]"]
  node_charts["Portfolio charts<br/>[PnlChart.tsx]"]
  node_transactions["Transaction explorer"]
  node_formatting["Value formatting<br/>[format.ts]"]
end

node_visitor(("Portfolio user"))
node_tradefile["Trade CSV"]
node_pricefile["Price snapshot"]

node_visitor -->|"views"| node_dashboard
node_tradefile -->|"uploads"| node_datasetapi
node_pricefile -->|"loads snapshot"| node_samplefiles
node_samplefiles -->|"reads samples"| node_datasetservice
node_datasetapi -->|"imports or resets"| node_datasetservice
node_datasetservice -->|"parses trades"| node_tradeparser
node_datasetservice -->|"builds dataset"| node_datasetbuilder
node_datasetbuilder -->|"analyses trades"| node_analysis
node_analysis -->|"builds ledger"| node_ledger
node_analysis -->|"values positions"| node_valuation
node_portfolioapi -->|"gets dataset"| node_datasetservice
node_portfolioapi -->|"serializes response"| node_serializer
node_datasetapi -->|"serializes dataset"| node_serializer
node_transactionapi -->|"gets dataset"| node_datasetservice
node_transactionapi -->|"parses filters"| node_queryparser
node_transactionapi -->|"selects rows"| node_transactionselect
node_transactionselect -->|"serializes rows"| node_serializer
node_apiclient -.->|"calls import API"| node_datasetapi
node_apiclient -.->|"requests portfolio"| node_portfolioapi
node_apiclient -.->|"requests transactions"| node_transactionapi
node_dashboard -.->|"fetches data"| node_apiclient
node_dashboard -.->|"shows controls"| node_datasetcontrols
node_dashboard -.->|"shows summary"| node_summary
node_dashboard -.->|"shows holdings"| node_holdings
node_dashboard -.->|"shows charts"| node_charts
node_dashboard -.->|"shows transactions"| node_transactions
node_summary -.->|"formats values"| node_formatting
node_holdings -.->|"formats values"| node_formatting
node_charts -.->|"formats values"| node_formatting

click node_samplefiles "https://github.com/delght/assignment/blob/main/backend/src/dataset/sample-files.ts"
click node_tradeparser "https://github.com/delght/assignment/blob/main/backend/src/portfolio/import/trades.ts"
click node_datasetservice "https://github.com/delght/assignment/blob/main/backend/src/dataset/dataset.service.ts"
click node_datasetbuilder "https://github.com/delght/assignment/blob/main/backend/src/dataset/dataset.ts"
click node_analysis "https://github.com/delght/assignment/blob/main/backend/src/portfolio/index.ts"
click node_ledger "https://github.com/delght/assignment/blob/main/backend/src/portfolio/calculation/ledger.ts"
click node_valuation "https://github.com/delght/assignment/blob/main/backend/src/portfolio/calculation/valuation.ts"
click node_datasetapi "https://github.com/delght/assignment/blob/main/backend/src/api/dataset.controller.ts"
click node_portfolioapi "https://github.com/delght/assignment/blob/main/backend/src/api/portfolio.controller.ts"
click node_transactionapi "https://github.com/delght/assignment/blob/main/backend/src/api/transactions/transactions.controller.ts"
click node_queryparser "https://github.com/delght/assignment/blob/main/backend/src/api/transactions/transactions.query.ts"
click node_transactionselect "https://github.com/delght/assignment/blob/main/backend/src/api/transactions/select-transactions.ts"
click node_serializer "https://github.com/delght/assignment/blob/main/backend/src/api/serialize.ts"
click node_apiclient "https://github.com/delght/assignment/blob/main/frontend/src/api/client.ts"
click node_dashboard "https://github.com/delght/assignment/blob/main/frontend/src/app/PortfolioView.tsx"
click node_datasetcontrols "https://github.com/delght/assignment/blob/main/frontend/src/features/dataset/DatasetActions.tsx"
click node_summary "https://github.com/delght/assignment/blob/main/frontend/src/features/overview/SummaryCards.tsx"
click node_holdings "https://github.com/delght/assignment/blob/main/frontend/src/features/holdings/HoldingsTable.tsx"
click node_charts "https://github.com/delght/assignment/blob/main/frontend/src/features/charts/PnlChart.tsx"
click node_transactions "https://github.com/delght/assignment/blob/main/frontend/src/features/transactions/TransactionExplorer.tsx"
click node_formatting "https://github.com/delght/assignment/blob/main/frontend/src/format/format.ts"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_tradeparser,node_analysis,node_ledger,node_valuation,node_visitor toneBlue
class node_samplefiles,node_datasetservice,node_datasetbuilder,node_datasetapi,node_portfolioapi,node_transactionapi,node_queryparser,node_transactionselect,node_serializer toneAmber
class node_apiclient,node_dashboard,node_datasetcontrols,node_summary,node_holdings,node_charts,node_transactions,node_formatting toneMint
class node_tradefile,node_pricefile toneIndigo
```

## Components

### Portfolio data and calculation

- [Trade parser](https://github.com/delght/assignment/blob/main/backend/src/portfolio/import/trades.ts): `backend/src/portfolio/import/trades.ts`
- [Portfolio analysis](https://github.com/delght/assignment/blob/main/backend/src/portfolio/index.ts): `backend/src/portfolio/index.ts`
- [Weighted cost ledger](https://github.com/delght/assignment/blob/main/backend/src/portfolio/calculation/ledger.ts): `backend/src/portfolio/calculation/ledger.ts`
- [Portfolio valuation](https://github.com/delght/assignment/blob/main/backend/src/portfolio/calculation/valuation.ts): `backend/src/portfolio/calculation/valuation.ts`

### Backend dataset and API

- [Sample file reader](https://github.com/delght/assignment/blob/main/backend/src/dataset/sample-files.ts): `backend/src/dataset/sample-files.ts`
- [Dataset service](https://github.com/delght/assignment/blob/main/backend/src/dataset/dataset.service.ts): `backend/src/dataset/dataset.service.ts`
- [Dataset builder](https://github.com/delght/assignment/blob/main/backend/src/dataset/dataset.ts): `backend/src/dataset/dataset.ts`
- [Dataset import API](https://github.com/delght/assignment/blob/main/backend/src/api/dataset.controller.ts): `backend/src/api/dataset.controller.ts`
- [Portfolio API](https://github.com/delght/assignment/blob/main/backend/src/api/portfolio.controller.ts): `backend/src/api/portfolio.controller.ts`
- [Transactions API](https://github.com/delght/assignment/blob/main/backend/src/api/transactions/transactions.controller.ts): `backend/src/api/transactions/transactions.controller.ts`
- [Transaction query parser](https://github.com/delght/assignment/blob/main/backend/src/api/transactions/transactions.query.ts): `backend/src/api/transactions/transactions.query.ts`
- [Transaction selector](https://github.com/delght/assignment/blob/main/backend/src/api/transactions/select-transactions.ts): `backend/src/api/transactions/select-transactions.ts`
- [Response serializer](https://github.com/delght/assignment/blob/main/backend/src/api/serialize.ts): `backend/src/api/serialize.ts`

### Dashboard interface

- [API client](https://github.com/delght/assignment/blob/main/frontend/src/api/client.ts): `frontend/src/api/client.ts`
- [Dashboard view](https://github.com/delght/assignment/blob/main/frontend/src/app/PortfolioView.tsx): `frontend/src/app/PortfolioView.tsx`
- [Dataset controls](https://github.com/delght/assignment/blob/main/frontend/src/features/dataset/DatasetActions.tsx): `frontend/src/features/dataset/DatasetActions.tsx`
- [Portfolio summary](https://github.com/delght/assignment/blob/main/frontend/src/features/overview/SummaryCards.tsx): `frontend/src/features/overview/SummaryCards.tsx`
- [Holdings display](https://github.com/delght/assignment/blob/main/frontend/src/features/holdings/HoldingsTable.tsx): `frontend/src/features/holdings/HoldingsTable.tsx`
- [Portfolio charts](https://github.com/delght/assignment/blob/main/frontend/src/features/charts/PnlChart.tsx): `frontend/src/features/charts/PnlChart.tsx`
- [Transaction explorer](https://github.com/delght/assignment/blob/main/frontend/src/features/transactions/TransactionExplorer.tsx): `frontend/src/features/transactions/TransactionExplorer.tsx`
- [Value formatting](https://github.com/delght/assignment/blob/main/frontend/src/format/format.ts): `frontend/src/format/format.ts`

### Other components

- **Portfolio user**
- **Trade CSV**
- **Price snapshot**

## Connections

- Portfolio user → Dashboard view: views (evidence: `README.md`)
- Trade CSV → Dataset import API: uploads (evidence: `README.md`)
- Price snapshot → Sample file reader: loads snapshot (evidence: `README.md`)
- Sample file reader → Dataset service: reads samples (evidence: `backend/src/dataset/dataset.service.ts`)
- Dataset import API → Dataset service: imports or resets (evidence: `backend/src/api/dataset.controller.ts`)
- Dataset service → Trade parser: parses trades (evidence: `backend/src/dataset/dataset.service.ts`)
- Dataset service → Dataset builder: builds dataset (evidence: `backend/src/dataset/dataset.service.ts`)
- Dataset builder → Portfolio analysis: analyses trades (evidence: `backend/src/dataset/dataset.ts`)
- Portfolio analysis → Weighted cost ledger: builds ledger (evidence: `backend/src/portfolio/index.ts`)
- Portfolio analysis → Portfolio valuation: values positions (evidence: `backend/src/portfolio/index.ts`)
- Portfolio API → Dataset service: gets dataset (evidence: `backend/src/api/portfolio.controller.ts`)
- Portfolio API → Response serializer: serializes response (evidence: `backend/src/api/portfolio.controller.ts`)
- Dataset import API → Response serializer: serializes dataset (evidence: `backend/src/api/dataset.controller.ts`)
- Transactions API → Dataset service: gets dataset (evidence: `backend/src/api/transactions/transactions.controller.ts`)
- Transactions API → Transaction query parser: parses filters (evidence: `backend/src/api/transactions/transactions.controller.ts`)
- Transactions API → Transaction selector: selects rows (evidence: `backend/src/api/transactions/transactions.controller.ts`)
- Transaction selector → Response serializer: serializes rows (evidence: `backend/src/api/transactions/select-transactions.ts`)
- API client → Dataset import API: calls import API
- API client → Portfolio API: requests portfolio
- API client → Transactions API: requests transactions
- Dashboard view → API client: fetches data
- Dashboard view → Dataset controls: shows controls
- Dashboard view → Portfolio summary: shows summary
- Dashboard view → Holdings display: shows holdings
- Dashboard view → Portfolio charts: shows charts
- Dashboard view → Transaction explorer: shows transactions
- Portfolio summary → Value formatting: formats values
- Holdings display → Value formatting: formats values
- Portfolio charts → Value formatting: formats values
