Refactor code structure for improved readability and maintainability
This commit is contained in:
Binary file not shown.
+1
-1
@@ -14,7 +14,7 @@ Base = declarative_base()
|
|||||||
# Get absolute path to the preprocessor database
|
# Get absolute path to the preprocessor database
|
||||||
# APP_DIR = Path(__file__).parent.parent
|
# APP_DIR = Path(__file__).parent.parent
|
||||||
# PREPROCESSOR_DB = APP_DIR.parent / "preprocessor" / "version_two.db"
|
# PREPROCESSOR_DB = APP_DIR.parent / "preprocessor" / "version_two.db"
|
||||||
DATABASE_URL = os.getenv("DATABASE_URL", "sqlite:///./version_two.db")
|
DATABASE_URL = os.getenv("DATABASE_URL", "sqlite:///./investors.db")
|
||||||
|
|
||||||
# Create engine
|
# Create engine
|
||||||
engine = create_engine(DATABASE_URL, echo=False)
|
engine = create_engine(DATABASE_URL, echo=False)
|
||||||
|
|||||||
Binary file not shown.
@@ -18,22 +18,24 @@ router = APIRouter(tags=["Investor Routes"])
|
|||||||
class InvestorCreate(BaseModel):
|
class InvestorCreate(BaseModel):
|
||||||
name: str
|
name: str
|
||||||
description: Optional[str] = None
|
description: Optional[str] = None
|
||||||
|
website: Optional[str] = None
|
||||||
|
headquarters: Optional[str] = None
|
||||||
aum: int
|
aum: int
|
||||||
check_size_lower: int
|
check_size_lower: int
|
||||||
check_size_upper: int
|
check_size_upper: int
|
||||||
geographic_focus: str
|
geographic_focus: str
|
||||||
stage_focus: InvestmentStage
|
|
||||||
number_of_investments: int = 0
|
number_of_investments: int = 0
|
||||||
|
|
||||||
|
|
||||||
class InvestorUpdate(BaseModel):
|
class InvestorUpdate(BaseModel):
|
||||||
name: Optional[str] = None
|
name: Optional[str] = None
|
||||||
description: Optional[str] = None
|
description: Optional[str] = None
|
||||||
|
website: Optional[str] = None
|
||||||
|
headquarters: Optional[str] = None
|
||||||
aum: Optional[int] = None
|
aum: Optional[int] = None
|
||||||
check_size_lower: Optional[int] = None
|
check_size_lower: Optional[int] = None
|
||||||
check_size_upper: Optional[int] = None
|
check_size_upper: Optional[int] = None
|
||||||
geographic_focus: Optional[str] = None
|
geographic_focus: Optional[str] = None
|
||||||
stage_focus: Optional[InvestmentStage] = None
|
|
||||||
number_of_investments: Optional[int] = None
|
number_of_investments: Optional[int] = None
|
||||||
|
|
||||||
|
|
||||||
@@ -155,8 +157,9 @@ def filter_investors(
|
|||||||
)
|
)
|
||||||
|
|
||||||
# Apply filters
|
# Apply filters
|
||||||
if stage:
|
# Note: stage filtering is now done at fund level via fund.investment_stages
|
||||||
query = query.filter(InvestorTable.stage_focus == stage)
|
# if stage:
|
||||||
|
# query = query.filter(InvestorTable.stage_focus == stage)
|
||||||
|
|
||||||
if min_check_size is not None:
|
if min_check_size is not None:
|
||||||
query = query.filter(InvestorTable.check_size_lower >= min_check_size)
|
query = query.filter(InvestorTable.check_size_lower >= min_check_size)
|
||||||
@@ -413,9 +416,10 @@ def find_similar_investors(
|
|||||||
for candidate in candidates:
|
for candidate in candidates:
|
||||||
score = 0
|
score = 0
|
||||||
|
|
||||||
# Stage focus match (30 points)
|
# Stage focus match is now handled at fund level
|
||||||
if candidate.stage_focus == target_investor.stage_focus:
|
# Skip stage matching at investor level since stage_focus no longer exists
|
||||||
score += 30
|
# if candidate.stage_focus == target_investor.stage_focus:
|
||||||
|
# score += 30
|
||||||
|
|
||||||
# Geographic focus match (20 points for exact, 10 for partial)
|
# Geographic focus match (20 points for exact, 10 for partial)
|
||||||
if candidate.geographic_focus and target_investor.geographic_focus:
|
if candidate.geographic_focus and target_investor.geographic_focus:
|
||||||
|
|||||||
Binary file not shown.
@@ -1,6 +1,6 @@
|
|||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
from typing import List, Optional
|
from typing import Any, List, Optional
|
||||||
|
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
|
|
||||||
@@ -89,11 +89,20 @@ class InvestorSchema(BaseModel):
|
|||||||
id: int
|
id: int
|
||||||
name: str
|
name: str
|
||||||
description: Optional[str]
|
description: Optional[str]
|
||||||
|
website: Optional[str] = None
|
||||||
|
headquarters: Optional[str] = None
|
||||||
aum: int | None
|
aum: int | None
|
||||||
|
aum_as_of_date: str | None = None
|
||||||
|
aum_source_url: str | None = None
|
||||||
check_size_lower: int | None
|
check_size_lower: int | None
|
||||||
check_size_upper: int | None
|
check_size_upper: int | None
|
||||||
geographic_focus: str | None
|
geographic_focus: str | None
|
||||||
stage_focus: InvestmentStage
|
investment_thesis: Any = (
|
||||||
|
None # Flexible JSON field - can be list, dict, or list of dicts
|
||||||
|
)
|
||||||
|
portfolio_highlights: Any = (
|
||||||
|
None # Flexible JSON field - can be list, dict, or list of dicts
|
||||||
|
)
|
||||||
number_of_investments: int | None
|
number_of_investments: int | None
|
||||||
created_at: Optional[datetime] = None
|
created_at: Optional[datetime] = None
|
||||||
updated_at: Optional[datetime] = None
|
updated_at: Optional[datetime] = None
|
||||||
@@ -131,8 +140,8 @@ class InvestorFundData(BaseModel):
|
|||||||
aum: int | None
|
aum: int | None
|
||||||
aum_as_of_date: str | None
|
aum_as_of_date: str | None
|
||||||
aum_source_url: str | None
|
aum_source_url: str | None
|
||||||
investment_thesis: List[str] | None
|
investment_thesis: Any = None # Flexible JSON field
|
||||||
portfolio_highlights: List[str] | None
|
portfolio_highlights: Any = None # Flexible JSON field
|
||||||
number_of_investments: int | None
|
number_of_investments: int | None
|
||||||
|
|
||||||
# Fund fields
|
# Fund fields
|
||||||
|
|||||||
Binary file not shown.
Reference in New Issue
Block a user