Skip to content
Merged
2 changes: 2 additions & 0 deletions api/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ class Settings:
"production" if os.getenv("APPDB_ENV") == ".env_production" else "development",
)
ALLOW_IMPERSONATION: bool = APP_ENV in {"development", "pre-production"}
OSE_BULK_EXPORT_URL: Optional[str] = os.getenv("OSE_BULK_EXPORT_URL")
OSE_BULK_EXPORT_LIMIT: int = int(os.getenv("OSE_BULK_EXPORT_LIMIT", "100"))
DATABASE_URL = f"postgresql+psycopg://{POSTGRES_USER}:{POSTGRES_PASSWORD}@{POSTGRES_HOST}:{POSTGRES_PORT}/{POSTGRES_DB}"


Expand Down
4 changes: 4 additions & 0 deletions api/models/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@
from api.models.location import LandOwners, Locations, LocationTypeLU
from api.models.meter import (
ActivityTypeLU,
MeterContacts,
MeterActivities,
MeterActivityPhotos,
MeterOwnerChangeRequests,
MeterObservations,
MeterStatusLU,
MeterTypeLU,
Expand Down Expand Up @@ -40,7 +42,9 @@
"LocationTypeLU",
"MeterActivities",
"MeterActivityPhotos",
"MeterContacts",
"MeterObservations",
"MeterOwnerChangeRequests",
"MeterStatusLU",
"MeterTypeLU",
"Meters",
Expand Down
57 changes: 56 additions & 1 deletion api/models/meter.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
from typing import List, Optional
from __future__ import annotations

from typing import TYPE_CHECKING, List, Optional

from sqlalchemy import (
Boolean,
Expand All @@ -12,10 +14,18 @@
Table,
func,
)
from sqlalchemy.dialects.postgresql import JSONB
from sqlalchemy.orm import Mapped, mapped_column, relationship

from api.models.base import Base

if TYPE_CHECKING:
from api.models.location import Locations
from api.models.part import PartsUsed
from api.models.user import Users
from api.models.well import Wells
from api.models.work_order import workOrders


class ServiceTypeLU(Base):
__tablename__ = "ServiceTypeLU"
Expand Down Expand Up @@ -78,6 +88,51 @@ class Meters(Base):
status: Mapped["MeterStatusLU"] = relationship()
well: Mapped["Wells"] = relationship("Wells", back_populates="meters")
location: Mapped["Locations"] = relationship()
contacts: Mapped[List["MeterContacts"]] = relationship(
"MeterContacts",
back_populates="meter",
cascade="all, delete-orphan",
order_by="MeterContacts.id",
)


class MeterContacts(Base):
__tablename__ = "meter_contacts"

meter_id: Mapped[int] = mapped_column(
Integer, ForeignKey("Meters.id", ondelete="CASCADE", onupdate="CASCADE"), index=True
)
name: Mapped[Optional[str]] = mapped_column(String)
address: Mapped[Optional[str]] = mapped_column(String)

meter: Mapped["Meters"] = relationship("Meters", back_populates="contacts")


class MeterOwnerChangeRequests(Base):
__tablename__ = "meter_owner_change_requests"

meter_id: Mapped[int] = mapped_column(
Integer, ForeignKey("Meters.id", ondelete="CASCADE", onupdate="CASCADE"), index=True
)
serial_number: Mapped[str] = mapped_column(String, nullable=False)
ose_meter_id: Mapped[Optional[int]] = mapped_column(Integer)
old_water_users: Mapped[Optional[str]] = mapped_column(String)
new_water_users: Mapped[Optional[str]] = mapped_column(String)
old_contacts: Mapped[list[dict]] = mapped_column(JSONB, nullable=False, default=list)
new_contacts: Mapped[list[dict]] = mapped_column(JSONB, nullable=False, default=list)
status: Mapped[str] = mapped_column(String(20), nullable=False, default="pending")
created_by: Mapped[Optional[int]] = mapped_column(
Integer, ForeignKey("Users.id", ondelete="SET NULL", onupdate="CASCADE"), index=True
)
resolved_by: Mapped[Optional[int]] = mapped_column(
Integer, ForeignKey("Users.id", ondelete="SET NULL", onupdate="CASCADE"), index=True
)
created_at: Mapped[DateTime] = mapped_column(
DateTime, nullable=False, server_default=func.now(), index=True
)
resolved_at: Mapped[Optional[DateTime]] = mapped_column(DateTime)

meter: Mapped["Meters"] = relationship()


class MeterTypeLU(Base):
Expand Down
Loading
Loading