51 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from datetime import datetime
 | 
						|
from typing import TYPE_CHECKING
 | 
						|
 | 
						|
from sqlalchemy.orm import mapped_column, Mapped, relationship
 | 
						|
 | 
						|
from models.base import BaseModel
 | 
						|
 | 
						|
if TYPE_CHECKING:
 | 
						|
    from board import Board
 | 
						|
    from attribute import Attribute
 | 
						|
    from module import Module
 | 
						|
    from card_tag import CardTag
 | 
						|
 | 
						|
 | 
						|
class Project(BaseModel):
 | 
						|
    __tablename__ = 'projects'
 | 
						|
 | 
						|
    id: Mapped[int] = mapped_column(primary_key=True)
 | 
						|
    name: Mapped[str] = mapped_column(nullable=False)
 | 
						|
    created_at: Mapped[datetime] = mapped_column(nullable=False)
 | 
						|
    is_deleted: Mapped[bool] = mapped_column(default=False)
 | 
						|
 | 
						|
    boards: Mapped[list['Board']] = relationship(
 | 
						|
        'Board',
 | 
						|
        back_populates='project',
 | 
						|
        lazy='noload',
 | 
						|
    )
 | 
						|
 | 
						|
    attributes: Mapped[list['Attribute']] = relationship(
 | 
						|
        'Attribute',
 | 
						|
        secondary='project_attribute',
 | 
						|
        back_populates='projects',
 | 
						|
        lazy='selectin',
 | 
						|
    )
 | 
						|
 | 
						|
    modules: Mapped[list['Module']] = relationship(
 | 
						|
        'Module',
 | 
						|
        secondary='project_module',
 | 
						|
        back_populates='projects',
 | 
						|
        lazy='selectin',
 | 
						|
        order_by='asc(Module.id)',
 | 
						|
    )
 | 
						|
 | 
						|
    tags: Mapped[list['CardTag']] = relationship(
 | 
						|
        'CardTag',
 | 
						|
        back_populates='project',
 | 
						|
        primaryjoin="and_(Project.id == CardTag.project_id, CardTag.is_deleted == False)",
 | 
						|
        order_by='asc(CardTag.id)',
 | 
						|
        lazy='selectin',
 | 
						|
    )
 |