213 Commits

Author SHA1 Message Date
bd6b2589c0 feat: expose tbank broker portfolio 2026-06-16 22:43:40 +03:00
ddeab01b9e feat: expose tbank broker accounts 2026-06-16 22:34:12 +03:00
4ef2f8d05e feat: add tbank grpc client service 2026-06-16 22:23:33 +03:00
825095106c feat: add tbank domain mappers 2026-06-16 22:20:01 +03:00
7a8bc7c90a feat: configure tbank integration 2026-06-16 22:15:31 +03:00
526e5dc5f3 feat: add tbank invest proto contracts 2026-06-16 22:10:54 +03:00
a971d0c8bf docs: require russian specs 2026-06-16 06:01:48 +03:00
a3817edfc7 docs: add tbank broker portfolios design 2026-06-16 05:40:53 +03:00
106467e5c4 docs: translate docs to russian
All checks were successful
CI / lint (pull_request) Successful in 2m8s
CI / test (pull_request) Successful in 1m57s
CI / build (pull_request) Successful in 2m5s
CI / lint (push) Successful in 2m1s
CI / test (push) Successful in 1m51s
CI / build (push) Successful in 2m9s
2026-06-16 05:13:34 +03:00
739405a597 docs: consolidate SDD documentation
Some checks failed
CI / lint (pull_request) Successful in 2m10s
CI / build (pull_request) Has been cancelled
CI / test (pull_request) Has been cancelled
CI / lint (push) Has been cancelled
CI / test (push) Has been cancelled
CI / build (push) Has been cancelled
2026-06-15 21:04:24 +03:00
117f182851 docs: refresh project documentation
Some checks failed
CI / lint (pull_request) Successful in 2m14s
CI / test (pull_request) Successful in 1m52s
CI / build (pull_request) Failing after 2m15s
CI / test (push) Has been cancelled
CI / lint (push) Has been cancelled
CI / build (push) Has been cancelled
2026-06-15 20:02:50 +03:00
c062850e83 docs: refine openapi null response schema 2026-06-15 19:54:31 +03:00
835686d886 docs: improve openapi schema metadata 2026-06-15 05:58:45 +03:00
143b4758c3 docs: refresh openapi contract artifacts 2026-06-15 05:31:55 +03:00
44e13cc67e test: cover checked-in openapi artifacts 2026-06-15 05:05:13 +03:00
974c83d67e test: make backend service specs deterministic 2026-06-15 04:56:53 +03:00
c994b6a2fb test: split moex live integration checks 2026-06-15 04:47:13 +03:00
bc2d2af141 docs: add quality gate implementation plan 2026-06-14 22:01:36 +03:00
2e79e69403 docs: translate quality gate spec to russian 2026-06-14 21:50:58 +03:00
ee88b29181 docs: add quality gate contract docs spec 2026-06-14 21:46:38 +03:00
96f003852d feat: implement portfolio analytics, PnL calculation, and security screener
Some checks failed
CI / lint (pull_request) Failing after 1m48s
CI / test (pull_request) Successful in 1m47s
CI / build (pull_request) Successful in 1m53s
CI / lint (push) Failing after 1m59s
CI / test (push) Successful in 1m56s
CI / build (push) Successful in 1m50s
- Add buyPrice and buyDate to positions for PnL tracking
- Implement backend analytics service for real-time portfolio performance
- Add server-side security screener with filtering, sorting, and pagination
- Update frontend UI with analytics summaries and sortable screener table
- Optimize MOEX API calls with batch fetching and portfolio-specific caching
- Add unit tests for analytics and screener services
2026-06-14 15:59:25 +03:00
1017fd4f08 docs: add spec and plan for portfolio list enrichment
All checks were successful
CI / lint (pull_request) Successful in 2m31s
CI / test (pull_request) Successful in 1m37s
CI / build (pull_request) Successful in 1m57s
CI / lint (push) Successful in 1m57s
CI / test (push) Successful in 1m48s
CI / build (push) Successful in 1m54s
2026-06-14 14:18:29 +03:00
2d2089915d feat(frontend): display enriched data in PortfolioCard 2026-06-14 14:13:31 +03:00
7b3b77f35e feat(frontend): add enrichment fields to Portfolio type 2026-06-14 14:12:20 +03:00
a8b3b55896 feat(backend): add Swagger decorators for enriched portfolio list 2026-06-14 14:11:05 +03:00
f0e5e36b7d feat(backend): enrich portfolio list with MOEX batch data 2026-06-14 14:08:43 +03:00
25a6d22a0c test(backend): add failing tests for portfolio list enrichment 2026-06-14 14:08:11 +03:00
461a5b1ca6 feat(backend): add PortfolioListResponseDto 2026-06-14 14:02:01 +03:00
38729249f3 fix: exclude test files from frontend tsc build
All checks were successful
CI / lint (pull_request) Successful in 1m46s
CI / test (pull_request) Successful in 1m48s
CI / build (pull_request) Successful in 1m56s
CI / lint (push) Successful in 1m51s
CI / test (push) Successful in 1m51s
CI / build (push) Successful in 1m46s
Test files use vitest globals (vi, describe, afterEach) not available
to tsc. Exclude them from build type-check via tsconfig exclude block.
2026-06-14 13:41:17 +03:00
60e456fbb5 perf: reduce portfolio enrichment from 298 to 2 MOEX API calls (-99.3%)
Three optimizations:
1. Merge getBondData + getBondMarketData into single batch call
   (same endpoint, parse both tables)
2. Remove redundant getSecurityDescription for shortName
   (shortName already in market data responses)
3. Batch by market: 1 call for all shares, 1 call for all bonds
   (instead of N individual calls)

Before: 298 API calls for 104 positions -> ~29.8s
After:  2 API calls for 104 positions -> ~0.3s
2026-06-14 13:19:22 +03:00
4c15bda30e feat: add allocation donut chart to portfolio summary
Some checks failed
CI / lint (pull_request) Successful in 1m54s
CI / test (pull_request) Successful in 1m51s
CI / build (pull_request) Failing after 1m51s
CI / lint (push) Successful in 1m54s
CI / test (push) Successful in 1m36s
CI / build (push) Failing after 1m54s
2026-06-14 13:02:24 +03:00
a980520261 feat: portfolio management with share/bond separation
Some checks failed
CI / lint (pull_request) Successful in 1m59s
CI / test (pull_request) Successful in 1m45s
CI / build (pull_request) Failing after 1m54s
CI / lint (push) Successful in 1m50s
CI / test (push) Successful in 1m47s
CI / build (push) Failing after 2m3s
- Add Portfolio + Position models (Prisma + migrations)
- Backend: PortfolioModule with CRUD, enrichment, type detection
- Backend: enrichBondPosition returns 13 financial fields (YTM, duration,
  coupon, NCD, accrued interest, bid/offer, bondType, offerDate, etc.)
- Frontend: portfolio pages, 4 TanStack Query hooks, split share/bond tables
- Fix: MOEX bond marketdata board fallback (TQCB → TQOB for OFZ)
- Frontend: clickable ticker links to /stocks/:secid and /bonds/:secid
- Remove: target allocation, deviation, tags display from Phase 1
- Docs: ADR-009 (domain model), ADR-010 (price computation),
  portfolio backend doc, superpowers spec + plan
2026-06-14 11:14:04 +03:00
ca4a8b35f3 fix: null safety for market data components and backend CI
Some checks failed
CI / lint (pull_request) Successful in 1m54s
CI / test (pull_request) Successful in 1m46s
CI / build (pull_request) Failing after 1m50s
2026-06-14 09:22:02 +03:00
a14e24d8e8 chore: commit docs and lockfile changes
Some checks failed
CI / lint (pull_request) Successful in 1m58s
CI / test (pull_request) Failing after 1m43s
CI / build (pull_request) Failing after 1m42s
CI / lint (push) Successful in 1m44s
CI / test (push) Failing after 1m46s
CI / build (push) Failing after 1m32s
2026-06-14 09:10:33 +03:00
5ff9cd6190 fix: remove unused parserOptions.project in frontend ESLint, fix prettier glob pattern 2026-06-14 09:05:57 +03:00
6a7706f7be chore: update root lint script to cover both workspaces 2026-06-14 09:03:39 +03:00
515e59600f feat: add Husky pre-commit hook with lint-staged 2026-06-14 09:02:48 +03:00
090a2b613f feat: add ESLint config for frontend 2026-06-14 08:58:55 +03:00
729e94b4db test: add 95 frontend unit tests with vitest, RTL, and MSW
Some checks failed
CI / lint (pull_request) Failing after 1m53s
CI / test (pull_request) Failing after 1m45s
CI / build (pull_request) Failing after 1m44s
CI / lint (push) Failing after 1m39s
CI / test (push) Failing after 1m40s
CI / build (push) Failing after 1m34s
95 tests across 22 files covering all frontend modules:
- API layer: client, auth
- Components: BondDetails, Layout, PriceChart, ProtectedRoute, SearchBar, StockDetails
- Context: AuthContext
- Hooks: useAuth, useBond, useBondCandles, useSearch, useStock, useStockCandles, useStockDividends
- Pages: BondPage, HomePage, LoginPage, ProfilePage, RegisterPage, StockPage

Infrastructure:
- vitest + @testing-library/react + MSW v2 with 13 API handlers
- Co-located test files alongside source files
- Test utilities: setup, server, factories, test-utils
- BrowserRouter future flags for MemoryRouter test compatibility
- Root test:frontend script for workspace-wide execution
2026-06-14 08:27:15 +03:00
c2478277e6 feat: add authentication system with JWT + RBAC
Some checks failed
CI / lint (pull_request) Failing after 1m45s
CI / test (pull_request) Failing after 1m42s
CI / build (pull_request) Failing after 1m31s
CI / lint (push) Failing after 1m46s
CI / test (push) Failing after 1m34s
CI / build (push) Failing after 1m35s
Backend:
- AuthModule with register, login, logout, refresh, profile endpoints
- JwtAuthGuard (global, opt-out via @Public) + RolesGuard (@Roles)
- PrismaModule with SQLite via @prisma/adapter-libsql (Prisma 7)
- Auth configuration in configuration.ts

Frontend:
- Auth context with session restoration via refresh cookie
- Login, Register, Profile pages with ProtectedRoute
- Auto-refresh on 401 with token rotation
- API client refactored for auth headers

Russian text: auth flows translated to Russian
All text translated: auth pages, profile, layout, loading states
2026-06-13 22:24:46 +03:00
aac5b2f873 docs: add Docusaurus documentation site as npm workspace
All checks were successful
CI / lint (pull_request) Successful in 1m32s
CI / test (pull_request) Successful in 1m23s
CI / build (pull_request) Successful in 1m27s
CI / lint (push) Successful in 1m16s
CI / test (push) Successful in 1m23s
CI / build (push) Successful in 1m32s
- Create apps/docs/ with Docusaurus 3.7.0
- Add documentation: architecture, backend, frontend, infrastructure, development, ADR
- Include 5 Mermaid diagrams (system architecture, request flow, modules, caching, deployment)
- Configure as npm workspace with dev:docs/build:docs scripts
- Copy existing ADR documents from docs/architecture/adr/
2026-06-13 21:37:10 +03:00
a6d4b25afe ci: change ci/cd settings
All checks were successful
CI / lint (pull_request) Successful in 58s
CI / test (pull_request) Successful in 56s
CI / build (pull_request) Successful in 1m5s
CI / lint (push) Successful in 57s
CI / test (push) Successful in 49s
CI / build (push) Successful in 1m1s
2026-06-13 21:02:17 +03:00
b79c8210dc style: apply prettier formatting across the codebase
Some checks failed
CI / lint (pull_request) Successful in 9m42s
CI / build (pull_request) Has been cancelled
CI / test (pull_request) Has been cancelled
2026-06-13 20:32:34 +03:00
d32ca22acd ci: add Gitea Actions pipeline with lint, test, build
Some checks failed
CI / lint (pull_request) Failing after 5m47s
CI / test (pull_request) Successful in 9m46s
CI / build (pull_request) Successful in 9m52s
2026-06-13 19:57:30 +03:00
9d191763e1 docs: add AGENTS.md with dev instructions and SDD workflow 2026-06-13 19:36:05 +03:00
d4a7ccf1c9 feat: Sprint 6 - documentation and infrastructure
- Docker setup (Dockerfile.backend, Dockerfile.frontend, nginx, docker-compose)
- Architecture overview with Mermaid sequence diagram
- README with quick start and Docker instructions
- Verify OpenAPI spec and ADR docs
2026-06-13 19:27:52 +03:00
9ae3906971 feat: Sprint 5 - frontend detail pages with charts
- Add useStock, useStockCandles, useStockDividends, useBond, useBondCandles hooks
- Add StockDetails component with full share info
- Add BondDetails component with full bond info (NKD, YTM, duration, coupon)
- Add PriceChart component using lightweight-charts (candlestick chart)
- Update StockPage and BondPage with details, charts, and dividends table
2026-06-13 19:21:03 +03:00
4b753266b3 feat: frontend API layer, Layout, SearchBar, HomePage
- Add typed API response types and fetch client (responses.ts + client.ts)
- Add useSearch hook with TanStack Query
- Add Layout with header and search bar
- Add SearchBar with debounced search and dropdown
- Implement HomePage, StockPage, BondPage with data loading
2026-06-13 19:16:10 +03:00
49437817a5 fix: bind middleware logger context; generate OpenAPI types for frontend
- Fix RequestLoggingMiddleware this.logger crash by binding the use() method to the instance
- Generate src/api/types.ts from live backend via openapi-typescript
2026-06-13 19:13:08 +03:00
5d80c510eb feat: scaffold React + Vite frontend with routing 2026-06-13 19:10:42 +03:00