63 lines
2.5 KiB
Python
Executable File
63 lines
2.5 KiB
Python
Executable File
from sqlalchemy import Column, Integer, String, Boolean, ForeignKey, DateTime
|
|
from sqlalchemy.orm import relationship
|
|
from sqlalchemy.sql import func
|
|
from sqlalchemy.dialects.postgresql import ENUM as PG_ENUM, UUID
|
|
from app.db.base import Base
|
|
import enum
|
|
|
|
# A Python enum marad, de a Column definíciónál pontosítunk
|
|
class CompanyRole(str, enum.Enum):
|
|
OWNER = "owner"
|
|
MANAGER = "manager"
|
|
DRIVER = "driver"
|
|
|
|
class Company(Base):
|
|
__tablename__ = "companies"
|
|
__table_args__ = {"schema": "data"}
|
|
|
|
id = Column(Integer, primary_key=True, index=True)
|
|
name = Column(String, nullable=False)
|
|
tax_number = Column(String, nullable=True)
|
|
subscription_tier = Column(String, default="free")
|
|
owner_id = Column(Integer, ForeignKey("data.users.id"), nullable=False)
|
|
|
|
members = relationship("CompanyMember", back_populates="company", cascade="all, delete-orphan")
|
|
assignments = relationship("VehicleAssignment", back_populates="company")
|
|
|
|
class CompanyMember(Base):
|
|
__tablename__ = "company_members"
|
|
__table_args__ = {"schema": "data"}
|
|
|
|
id = Column(Integer, primary_key=True, index=True)
|
|
company_id = Column(Integer, ForeignKey("data.companies.id"), nullable=False)
|
|
user_id = Column(Integer, ForeignKey("data.users.id"), nullable=False)
|
|
|
|
# JAVÍTÁS: Kifejezetten megadjuk a natív Postgres típust
|
|
role = Column(
|
|
PG_ENUM('owner', 'manager', 'driver', name='companyrole', schema='data', create_type=False),
|
|
nullable=False
|
|
)
|
|
|
|
can_edit_service = Column(Boolean, default=False)
|
|
can_see_costs = Column(Boolean, default=False)
|
|
is_active = Column(Boolean, default=True)
|
|
|
|
company = relationship("Company", back_populates="members")
|
|
user = relationship("User")
|
|
|
|
class VehicleAssignment(Base):
|
|
__tablename__ = "vehicle_assignments"
|
|
__table_args__ = {"schema": "data"}
|
|
|
|
id = Column(Integer, primary_key=True, index=True)
|
|
company_id = Column(Integer, ForeignKey("data.companies.id"), nullable=False)
|
|
vehicle_id = Column(UUID(as_uuid=True), ForeignKey("data.vehicles.id"), nullable=False)
|
|
driver_id = Column(Integer, ForeignKey("data.users.id"), nullable=False)
|
|
|
|
start_date = Column(DateTime(timezone=True), server_default=func.now())
|
|
end_date = Column(DateTime(timezone=True), nullable=True)
|
|
notes = Column(String, nullable=True)
|
|
|
|
company = relationship("Company", back_populates="assignments")
|
|
vehicle = relationship("Vehicle") # Itt már a Vehicle-re hivatkozunk
|
|
driver = relationship("User", foreign_keys=[driver_id]) |