feat: modules dependencies

This commit is contained in:
2025-03-15 09:37:14 +04:00
parent d4b6720188
commit a466e46f28
3 changed files with 59 additions and 5 deletions

View File

@@ -12,8 +12,16 @@ if TYPE_CHECKING:
project_module = Table(
'project_module',
BaseModel.metadata,
Column('project_id', ForeignKey('projects.id')),
Column('module_id', ForeignKey('modules.id')),
Column('project_id', ForeignKey('projects.id'), primary_key=True),
Column('module_id', ForeignKey('modules.id'), primary_key=True),
)
module_dependencies = Table(
'module_dependencies',
BaseModel.metadata,
Column('module_id', ForeignKey('modules.id'), primary_key=True),
Column('depends_on_id', ForeignKey('modules.id'), primary_key=True),
)
@@ -26,6 +34,24 @@ class Module(BaseModel):
icon_name: Mapped[Optional[str]] = mapped_column(unique=True, nullable=False)
is_deleted: Mapped[bool] = mapped_column(default=False)
depends_on: Mapped[list['Module']] = relationship(
'Module',
secondary=module_dependencies,
primaryjoin='Module.id == module_dependencies.c.module_id',
secondaryjoin='Module.id == module_dependencies.c.depends_on_id',
back_populates='depended_on_by',
lazy='immediate',
)
depended_on_by: Mapped[list['Module']] = relationship(
'Module',
secondary='module_dependencies',
primaryjoin='Module.id == module_dependencies.c.depends_on_id',
secondaryjoin='Module.id == module_dependencies.c.module_id',
back_populates='depends_on',
lazy='noload',
)
projects: Mapped[list['Project']] = relationship(
'Project',
uselist=True,