118 lines
2.6 KiB
Python
118 lines
2.6 KiB
Python
from datetime import datetime
|
|
from enum import Enum
|
|
from typing import List, Optional
|
|
|
|
from pydantic import BaseModel
|
|
|
|
|
|
class InvestmentStage(str, Enum):
|
|
SEED = "SEED"
|
|
SERIES_A = "SERIES_A"
|
|
SERIES_B = "SERIES_B"
|
|
SERIES_C = "SERIES_C"
|
|
GROWTH = "GROWTH"
|
|
LATE_STAGE = "LATE_STAGE"
|
|
|
|
|
|
class SectorSchema(BaseModel):
|
|
id: int
|
|
name: str
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
class InvestorSchema(BaseModel):
|
|
id: int
|
|
name: str
|
|
description: Optional[str]
|
|
aum: int | None
|
|
check_size_lower: int | None
|
|
check_size_upper: int | None
|
|
geographic_focus: str | None
|
|
stage_focus: InvestmentStage
|
|
number_of_investments: int | None
|
|
created_at: Optional[datetime] = None
|
|
updated_at: Optional[datetime] = None
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
class CompanySchema(BaseModel):
|
|
id: int
|
|
name: str
|
|
industry: str | None
|
|
location: str | None
|
|
description: Optional[str]
|
|
founded_year: Optional[int]
|
|
website: Optional[str]
|
|
created_at: Optional[datetime] = None
|
|
updated_at: Optional[datetime] = None
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
class ProjectSchema(BaseModel):
|
|
id: int
|
|
name: str
|
|
valuation: int | None
|
|
stage: InvestmentStage | None
|
|
location: str | None
|
|
description: Optional[str]
|
|
start_date: Optional[datetime]
|
|
end_date: Optional[datetime]
|
|
created_at: Optional[datetime] = None
|
|
updated_at: Optional[datetime] = None
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
class ProjectCreate(BaseModel):
|
|
name: str
|
|
valuation: Optional[int] = None
|
|
stage: Optional[InvestmentStage] = None
|
|
location: Optional[str] = None
|
|
description: Optional[str] = None
|
|
start_date: Optional[datetime] = None
|
|
end_date: Optional[datetime] = None
|
|
|
|
|
|
class ProjectUpdate(BaseModel):
|
|
name: Optional[str] = None
|
|
valuation: Optional[int] = None
|
|
stage: Optional[InvestmentStage] = None
|
|
location: Optional[str] = None
|
|
description: Optional[str] = None
|
|
start_date: Optional[datetime] = None
|
|
end_date: Optional[datetime] = None
|
|
|
|
|
|
class ProjectData(BaseModel):
|
|
"""Comprehensive project data schema"""
|
|
|
|
project: ProjectSchema
|
|
sector: List[SectorSchema]
|
|
investors: List[InvestorSchema]
|
|
companies: List[CompanySchema]
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
class ProjectInvestorAssociation(BaseModel):
|
|
project_id: int
|
|
investor_id: int
|
|
|
|
|
|
class ProjectCompanyAssociation(BaseModel):
|
|
project_id: int
|
|
company_id: int
|
|
|
|
|
|
class ProjectSectorAssociation(BaseModel):
|
|
project_id: int
|
|
sector_id: int
|