Files
gartenmanager/backend/app/models/bed.py

67 lines
2.0 KiB
Python
Raw Normal View History

import enum
import uuid
from datetime import datetime, timezone
from sqlalchemy import Boolean, DateTime, Enum, ForeignKey, Numeric, String, Text, func
from sqlalchemy.orm import Mapped, mapped_column, relationship
from app.db.base import Base
class LocationType(str, enum.Enum):
SONNIG = "sonnig"
HALBSCHATTEN = "halbschatten"
SCHATTEN = "schatten"
class SoilType(str, enum.Enum):
NORMAL = "normal"
SANDIG = "sandig"
LEHMIG = "lehmig"
HUMUSREICH = "humusreich"
class Bed(Base):
__tablename__ = "beds"
id: Mapped[uuid.UUID] = mapped_column(
primary_key=True, default=uuid.uuid4, index=True
)
tenant_id: Mapped[uuid.UUID] = mapped_column(
ForeignKey("tenants.id", ondelete="CASCADE"),
nullable=False,
index=True,
)
name: Mapped[str] = mapped_column(String(255), nullable=False)
width_m: Mapped[float] = mapped_column(Numeric(5, 2), nullable=False)
length_m: Mapped[float] = mapped_column(Numeric(5, 2), nullable=False)
location: Mapped[LocationType] = mapped_column(
Enum(LocationType, name="location_type"),
nullable=False,
)
soil_type: Mapped[SoilType] = mapped_column(
Enum(SoilType, name="soil_type"),
nullable=False,
default=SoilType.NORMAL,
)
notes: Mapped[str | None] = mapped_column(Text, nullable=True)
is_active: Mapped[bool] = mapped_column(Boolean, default=True, nullable=False)
created_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True),
server_default=func.now(),
nullable=False,
)
updated_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True),
server_default=func.now(),
onupdate=lambda: datetime.now(timezone.utc),
nullable=False,
)
# Relationships
tenant: Mapped["Tenant"] = relationship("Tenant", back_populates="beds") # noqa: F821
plantings: Mapped[list["BedPlanting"]] = relationship( # noqa: F821
"BedPlanting", back_populates="bed", cascade="all, delete-orphan"
)