36 lines
		
	
	
		
			989 B
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			36 lines
		
	
	
		
			989 B
		
	
	
	
		
			Python
		
	
	
	
	
	
from typing import TYPE_CHECKING, Optional
 | 
						|
 | 
						|
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)
 | 
						|
    icon_name: Mapped[Optional[str]] = mapped_column(unique=True, 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',
 | 
						|
    )
 |