Add some models; minor changes

This commit is contained in:
Daniil Fajnberg 2022-08-11 12:33:39 +02:00
parent 9f487d515d
commit 3f6be9adbc

View File

@ -20,6 +20,7 @@ __all__ = [
'LegalForm',
'LegalFormSubcategory',
'Industry',
'Executive',
'Company',
'CompanyName',
]
@ -66,13 +67,21 @@ class LegalFormSubcategory(AbstractBase, table=True):
class CompanyIndustryLink(AbstractBase, table=True):
__tablename__ = 'company_industries'
__tablename__ = 'company_industry'
# Relationships
company_id: Optional[int] = Field(foreign_key='company.id', default=None, nullable=False, primary_key=True)
industry_id: Optional[int] = Field(foreign_key='industry.id', default=None, nullable=False, primary_key=True)
class CompanyExecutiveLink(AbstractBase, table=True):
__tablename__ = 'company_executive'
# Relationships
company_id: Optional[int] = Field(foreign_key='company.id', default=None, nullable=False, primary_key=True)
executive_id: Optional[int] = Field(foreign_key='executive.id', default=None, nullable=False, primary_key=True)
class Industry(AbstractBase, table=True):
__tablename__ = 'industry'
@ -88,6 +97,24 @@ class Industry(AbstractBase, table=True):
return str(self.name)
class Executive(AbstractBase, table=True):
__tablename__ = 'executive'
__MAX_LENGTH_NAME__: int = 255
# Fields
name: str = Field(
max_length=__MAX_LENGTH_NAME__, sa_column=Column(Unicode(__MAX_LENGTH_NAME__), nullable=False, index=True)
)
# Relationships
companies: list['Company'] = Relationship(
back_populates='executives', link_model=CompanyExecutiveLink, sa_relationship_kwargs={'lazy': 'selectin'}
)
def __str__(self) -> str:
return str(self.name)
class Company(AbstractBase, table=True):
__tablename__ = 'company'
@ -96,7 +123,8 @@ class Company(AbstractBase, table=True):
insolvent: bool = Field(default=False, nullable=False, index=True)
founding_data: Optional[date]
liquidation_date: Optional[date]
city: str = Field(max_length=255, index=True) # TODO: Get rid of city; implement address properly
# TODO: Get rid of city; implement address properly
city: Optional[str] = Field(max_length=255, nullable=True, index=True)
# Relationships
legal_form_id: Optional[int] = Field(
@ -114,6 +142,10 @@ class Company(AbstractBase, table=True):
back_populates='companies', link_model=CompanyIndustryLink, sa_relationship_kwargs={'lazy': 'selectin'}
)
executives: list[Executive] = Relationship(
back_populates='companies', link_model=CompanyExecutiveLink, sa_relationship_kwargs={'lazy': 'selectin'}
)
names: list['CompanyName'] = Relationship(
back_populates='company', sa_relationship_kwargs={'lazy': 'selectin'}
)
@ -128,12 +160,12 @@ class Company(AbstractBase, table=True):
class CompanyName(AbstractBase, table=True):
__tablename__ = 'company_name'
__MAX_NAME_LENGTH__: int = 768
__MAX_LENGTH_NAME__: int = 768
__MAX_SLUG_LENGTH__: int = 255
# Fields
name: str = Field(
max_length=__MAX_NAME_LENGTH__, sa_column=Column(Unicode(__MAX_NAME_LENGTH__), nullable=False, index=True)
max_length=__MAX_LENGTH_NAME__, sa_column=Column(Unicode(__MAX_LENGTH_NAME__), nullable=False, index=True)
)
date_registered: Optional[date]
slug: Optional[str] = Field(default=None, max_length=__MAX_SLUG_LENGTH__, index=True)