sumaq/backend/app/models/project.py

39 lines
1.5 KiB
Python

from sqlalchemy import Column, Integer, String, ForeignKey, DateTime, Table
from sqlalchemy.orm import relationship
from app.db.database import Base
import datetime
# Junction Tables
project_specialties = Table(
'project_specialties',
Base.metadata,
Column('project_id', Integer, ForeignKey('projects.id'), primary_key=True),
Column('specialty_id', Integer, ForeignKey('specialties.id'), primary_key=True)
)
project_contractors = Table(
'project_contractors',
Base.metadata,
Column('project_id', Integer, ForeignKey('projects.id'), primary_key=True),
Column('contractor_id', Integer, ForeignKey('contractors.id'), primary_key=True)
)
class Project(Base):
__tablename__ = "projects"
id = Column(Integer, primary_key=True, index=True)
name = Column(String, index=True, nullable=False)
code = Column(String, unique=True, index=True)
location = Column(String)
start_date = Column(DateTime)
end_date = Column(DateTime)
status = Column(String, default="active")
parent_id = Column(Integer, ForeignKey("projects.id"), nullable=True)
# Relationships
parent = relationship("Project", remote_side=[id], back_populates="subprojects")
subprojects = relationship("Project", back_populates="parent")
activities = relationship("Activity", back_populates="project")
specialties = relationship("app.models.specialty.Specialty", secondary=project_specialties)
contractors = relationship("app.models.contractor.Contractor", secondary=project_contractors)