28 Commits

Author SHA1 Message Date
95f97eeef9 feat: add transactions API with holdings update 2026-02-03 07:08:21 +09:00
8ad2a62466 feat: add targets and holdings API endpoints 2026-02-03 07:07:22 +09:00
5558d96cb9 feat: add portfolio CRUD API endpoints 2026-02-03 07:06:55 +09:00
a3d9819175 feat: add portfolio Pydantic schemas 2026-02-03 07:06:22 +09:00
914f0f7367 docs: add Phase 3 portfolio management implementation plan
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 06:42:06 +09:00
68f9974cd6 fix: add error feedback and accessibility to data management page
- Add user-facing error state with red alert box for failed operations
- Improve error handling in fetchJobs and runCollector functions
- Add aria-labels to collector buttons for better accessibility
- Add scope="col" to table headers for proper semantic HTML
- Add refresh loading state with disabled button styling
- Create handleRefresh function for proper state management during refresh

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 00:04:50 +09:00
11e5158378 feat: add data management admin page
Add frontend page for admin data collection management at /admin/data.
The page displays available collectors (stocks, sectors, prices, valuations)
with buttons to trigger collection jobs, and shows recent job history
with status, timing, record counts, and error information.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 00:02:15 +09:00
aec8541563 fix: add parameter validation to admin API
Add Query parameter validation with regex patterns for date fields (YYYYMMDD format) and numeric constraints for limit parameter. Update JobLogResponse to use datetime types instead of strings for proper date serialization.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 00:00:18 +09:00
d2c5f91b2b feat: add admin API for data collection management
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 23:57:47 +09:00
8cc2d3fa41 fix: add validation and rate limiting to ValuationCollector
- Add time import and RATE_LIMIT_DELAY constant for rate limiting between HTTP requests
- Add 1-second delay after OTP request to respect API rate limits
- Validate OTP response is not empty before using it
- Add CSV column structure validation with required columns check
- Add data quality check to skip records where all metrics are None
- Improve error handling and data integrity

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 23:56:05 +09:00
3e723b6146 feat: add valuation data collector
Add ValuationCollector class that fetches PER, PBR, and dividend yield
data from KRX for all listed stocks. Includes business day validation,
safe float conversion, and upsert logic for the valuations table.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 23:48:08 +09:00
29f727970d fix: add transaction safety and type validation to PriceCollector
- Implement per-ticker commits to ensure atomic operations per data source
- Add rollback on exception to prevent partial data corruption
- Add _safe_float() and _safe_int() helper methods for defensive type conversion
- Validate column count after DataFrame reset to catch schema issues early
- Skip records with missing essential values (close price) with debug logging
- Remove final db.commit() since commits now happen per ticker in the loop

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 23:46:16 +09:00
135d55b488 feat: add price data collector using pykrx
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 23:44:04 +09:00
aed636f2b3 fix: add error handling, validation, and logging to collectors
- Add REQUEST_TIMEOUT and RATE_LIMIT_DELAY constants to StockCollector
- Add timeout parameter to all HTTP requests
- Wrap HTTP requests in try-except with proper error handling
- Add _validate_biz_day() method to both collectors
- Add validation for required fields (ticker, name) before insert
- Replace generic Exception with specific exception types in SectorCollector
- Add logging module and logger to both collectors
- Remove unused numpy import from StockCollector

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 23:42:24 +09:00
5479c36985 feat: add stock and sector data collectors
Implement StockCollector to fetch stock master data from KRX
(Korea Exchange) including market cap, EPS, BPS, and dividend info.
Implement SectorCollector to fetch WICS sector classification from
WISEindex. Both collectors use PostgreSQL upsert for efficient updates.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 23:38:45 +09:00
52d9fdf1f7 fix: add transaction rollback and session validation to BaseCollector
- Add session validation in __init__ to ensure database session is not None
- Implement transaction rollback handling in complete_job() for exception safety
- Implement transaction rollback handling in fail_job() for exception safety
- Improve exception handling in run() to gracefully handle fail_job failures while preserving original exception

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 23:36:39 +09:00
3abbdfa5b6 feat: add base collector infrastructure for data collection jobs
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 23:34:41 +09:00
61e2748e9d docs: add Phase 2 data collection implementation plan
Detailed plan for implementing:
- Base collector infrastructure with job logging
- Stock, sector, price, valuation collectors
- Admin API for data collection management
- Frontend data management page

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 23:31:59 +09:00
19d5527a71 feat: add frontend base layout with sidebar, header, and login page
- Add API client utility (frontend/src/lib/api.ts) with JWT authentication
- Add Sidebar component with navigation menu (Korean labels)
- Add Header component with logout functionality
- Update globals.css with Tailwind CSS configuration
- Update layout.tsx with Inter font and Korean language
- Update page.tsx with dashboard layout and auth check
- Add login page with form validation and error handling
- Fix .gitignore to not exclude frontend/src/lib/

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 23:24:06 +09:00
39edc202f8 feat: add authentication API with login, register, and user endpoints
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 23:20:32 +09:00
01aa339d76 feat: add Alembic migration setup with initial tables
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 23:18:13 +09:00
46c9f752ee feat: add database models for users, portfolios, and market data
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 23:14:57 +09:00
4c667677c9 feat: add core configuration, database, and security modules
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 23:11:27 +09:00
6885dbd580 fix: add dockerignore files and fix docker-compose config
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 23:10:01 +09:00
b60aa558cc feat: add Docker Compose configuration for all services
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 23:05:41 +09:00
e8c17f9e4d feat: initialize project structure with backend and frontend scaffolding
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 22:55:26 +09:00
5c2f92438f docs: add Phase 1 foundation implementation plan
Detailed step-by-step plan for:
- Project structure initialization
- Docker Compose configuration
- Database models and migrations
- Authentication API
- Frontend base layout

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 22:40:38 +09:00
0b89449472 Add galaxy-po design document
Comprehensive design for integrated quant portfolio management app
combining make-quant-py and pension management features.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 22:35:58 +09:00