35 lines
897 B
Python
35 lines
897 B
Python
from typing import TYPE_CHECKING
|
|
|
|
from sqlalchemy import Table, Column, ForeignKey
|
|
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
|
|
|
from models.base import BaseModel
|
|
|
|
if TYPE_CHECKING:
|
|
from models import Project
|
|
|
|
|
|
project_module = Table(
|
|
'project_module',
|
|
BaseModel.metadata,
|
|
Column('project_id', ForeignKey('projects.id')),
|
|
Column('module_id', ForeignKey('modules.id')),
|
|
)
|
|
|
|
|
|
class Module(BaseModel):
|
|
__tablename__ = 'modules'
|
|
|
|
id: Mapped[int] = mapped_column(primary_key=True)
|
|
key: Mapped[str] = mapped_column(unique=True, nullable=False)
|
|
label: Mapped[str] = mapped_column(nullable=False)
|
|
is_deleted: Mapped[bool] = mapped_column(default=False)
|
|
|
|
projects: Mapped[list['Project']] = relationship(
|
|
'Project',
|
|
uselist=True,
|
|
secondary='project_module',
|
|
back_populates='modules',
|
|
lazy='noload',
|
|
)
|