56 lines
2.4 KiB
Python
56 lines
2.4 KiB
Python
from datetime import date, datetime
|
|
from decimal import Decimal
|
|
|
|
from sqlalchemy import Date, DateTime, ForeignKey, Numeric, String, UniqueConstraint, func
|
|
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
|
|
|
from app.db.base import Base
|
|
|
|
|
|
class Car(Base):
|
|
__tablename__ = "cars"
|
|
|
|
id: Mapped[int] = mapped_column(primary_key=True)
|
|
owner_id: Mapped[int] = mapped_column(ForeignKey("users.id", ondelete="CASCADE"), index=True)
|
|
name: Mapped[str] = mapped_column(String(160))
|
|
make: Mapped[str | None] = mapped_column(String(80))
|
|
model: Mapped[str | None] = mapped_column(String(80))
|
|
year: Mapped[int | None]
|
|
plate_number: Mapped[str | None] = mapped_column(String(32))
|
|
vin: Mapped[str | None] = mapped_column(String(32))
|
|
fuel_type: Mapped[str | None] = mapped_column(String(32))
|
|
purchase_date: Mapped[date | None] = mapped_column(Date)
|
|
purchase_price: Mapped[Decimal | None] = mapped_column(Numeric(12, 2))
|
|
current_odometer: Mapped[int | None]
|
|
created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now())
|
|
updated_at: Mapped[datetime] = mapped_column(
|
|
DateTime(timezone=True), server_default=func.now(), onupdate=func.now()
|
|
)
|
|
|
|
owner = relationship("User", back_populates="cars")
|
|
fuel_entries = relationship("FuelEntry", back_populates="car", cascade="all, delete-orphan")
|
|
service_entries = relationship("ServiceEntry", back_populates="car", cascade="all, delete-orphan")
|
|
|
|
|
|
class CarMake(Base):
|
|
__tablename__ = "car_makes"
|
|
|
|
id: Mapped[int] = mapped_column(primary_key=True)
|
|
name: Mapped[str] = mapped_column(String(80), unique=True, index=True)
|
|
country: Mapped[str | None] = mapped_column(String(80))
|
|
created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now())
|
|
|
|
models = relationship("CarModel", back_populates="make", cascade="all, delete-orphan")
|
|
|
|
|
|
class CarModel(Base):
|
|
__tablename__ = "car_models"
|
|
__table_args__ = (UniqueConstraint("make_id", "name", name="uq_car_models_make_name"),)
|
|
|
|
id: Mapped[int] = mapped_column(primary_key=True)
|
|
make_id: Mapped[int] = mapped_column(ForeignKey("car_makes.id", ondelete="CASCADE"), index=True)
|
|
name: Mapped[str] = mapped_column(String(100), index=True)
|
|
created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now())
|
|
|
|
make = relationship("CarMake", back_populates="models")
|