mutual-fund / app /models /fund_models.py
lucifer7210's picture
Upload 21 files
eb606e1 verified
from pydantic import BaseModel, Field, field_validator
from typing import List, Dict, Optional, Any
from datetime import datetime
class FundMeta(BaseModel):
fund_house: Optional[str] = None
scheme_type: Optional[str] = None
scheme_category: Optional[str] = None
scheme_code: Optional[str] = None
@field_validator('scheme_code', mode='before')
@classmethod
def convert_scheme_code_to_str(cls, v):
if v is not None:
return str(v)
return v
class NAVData(BaseModel):
date: datetime
nav: float
class FundNAVResponse(BaseModel):
meta: FundMeta
data: List[NAVData]
class MarketIndex(BaseModel):
name: str
symbol: str
current_price: float
change: float
change_pct: float
class MarketIndicesResponse(BaseModel):
indices: List[MarketIndex]
last_updated: datetime
class FundAnalysisRequest(BaseModel):
fund_names: List[str]
investment_amount: float = Field(gt=0)
start_date: datetime
end_date: datetime
class FundReturn(BaseModel):
start_nav: float
end_nav: float
units: float
final_value: float
total_return: float
investment_amount: float
class FundAnalysisResult(BaseModel):
fund_name: str
category: str
scheme_code: str
fund_house: str
returns_data: FundReturn
nav_data: List[NAVData]
fund_meta: FundMeta
class FundAnalysisResponse(BaseModel):
results: List[FundAnalysisResult]
comparison_data: List[Dict[str, Any]]