diff --git a/backend/app/models/chargepoint.py b/backend/app/models/chargepoint.py index e24e180..c41d0d3 100644 --- a/backend/app/models/chargepoint.py +++ b/backend/app/models/chargepoint.py @@ -25,3 +25,4 @@ class ChargePoint(Base): connectors = relationship("Connector", cascade="delete, delete-orphan") transactions = relationship("Transaction", cascade="delete, delete-orphan") variables = relationship("ChargepointVariable", cascade="delete, delete-orphan") + firmware_updates = relationship("FirmwareUpdate", cascade="delete, delete-orphan") diff --git a/backend/app/models/firmware_update.py b/backend/app/models/firmware_update.py index 9e4fc4b..5d0d9f7 100644 --- a/backend/app/models/firmware_update.py +++ b/backend/app/models/firmware_update.py @@ -1,5 +1,6 @@ import uuid from sqlalchemy import Column, DateTime, Enum, ForeignKey, Integer, String, Text, Uuid +from sqlalchemy.orm import relationship from app.database import Base from app.schemas.firmware_update import FirmwareUpdateStatus @@ -20,3 +21,4 @@ class FirmwareUpdate(Base): signature = Column(String, nullable=True) chargepoint_id = Column(Uuid, ForeignKey("chargepoints.id"), index=True) + chargepoint = relationship("ChargePoint", back_populates="firmware_updates") diff --git a/backend/app/models/meter_value.py b/backend/app/models/meter_value.py index e2528ed..5adf6a1 100644 --- a/backend/app/models/meter_value.py +++ b/backend/app/models/meter_value.py @@ -1,5 +1,6 @@ import uuid from sqlalchemy import Uuid, Column, DateTime, Enum, Float, ForeignKey, String +from sqlalchemy.orm import relationship from app.database import Base from app.schemas.meter_value import Measurand, PhaseType @@ -14,4 +15,5 @@ class MeterValue(Base): unit = Column(String, nullable=True) value = Column(Float) - transaction_id = Column(String, ForeignKey("transactions.id"), index=True) \ No newline at end of file + transaction_id = Column(String, ForeignKey("transactions.id"), index=True) + transaction = relationship("Transaction", back_populates="meter_values") \ No newline at end of file diff --git a/backend/app/models/session.py b/backend/app/models/session.py index cd0c5ba..d9c0ce2 100644 --- a/backend/app/models/session.py +++ b/backend/app/models/session.py @@ -1,5 +1,6 @@ import uuid from sqlalchemy import Column, DateTime, ForeignKey, String, Uuid +from sqlalchemy.orm import relationship from app.database import Base @@ -11,4 +12,5 @@ class Session(Base): refresh_token = Column(String, nullable=False, unique=True, index=True) last_used = Column(DateTime(timezone=True)) - user_id = Column(Uuid, ForeignKey("users.id"), nullable=False, index=True) \ No newline at end of file + user_id = Column(Uuid, ForeignKey("users.id"), nullable=False, index=True) + user = relationship("User", back_populates="sessions") \ No newline at end of file diff --git a/backend/app/models/transaction.py b/backend/app/models/transaction.py index a918430..b4dcbce 100644 --- a/backend/app/models/transaction.py +++ b/backend/app/models/transaction.py @@ -1,4 +1,5 @@ from sqlalchemy import String, Uuid, Column, DateTime, Enum, Numeric, ForeignKey +from sqlalchemy.orm import relationship from app.schemas.transaction import TransactionEventTriggerReason, TransactionStatus from app.database import Base @@ -16,4 +17,9 @@ class Transaction(Base): price = Column(Numeric(10,2)) user_id = Column(Uuid, ForeignKey("users.id"), nullable=True, index=True) + user = relationship("User", back_populates="transactions") + chargepoint_id = Column(Uuid, ForeignKey("chargepoints.id"), index=True) + chargepoint = relationship("ChargePoint", back_populates="transactions") + + meter_values = relationship("MeterValue", cascade="delete, delete-orphan") diff --git a/backend/app/models/user.py b/backend/app/models/user.py index 75cf5da..bfdefb9 100644 --- a/backend/app/models/user.py +++ b/backend/app/models/user.py @@ -17,3 +17,4 @@ class User(Base): id_tokens = relationship("IdToken", back_populates="owner", cascade="delete, delete-orphan") transactions = relationship("Transaction", cascade="delete, delete-orphan") + sessions = relationship("Session", cascade="delete, delete-orphan") diff --git a/backend/app/schemas/chargepoint.py b/backend/app/schemas/chargepoint.py index 2493315..a7d4972 100644 --- a/backend/app/schemas/chargepoint.py +++ b/backend/app/schemas/chargepoint.py @@ -36,6 +36,15 @@ class ChargePoint(ChargePointBase): from_attributes = True json_encoders = {Decimal: decimal_encoder} +class ChargePointThumb(BaseModel): + id: UUID + identity: str + price: Decimal + + class Config: + from_attributes = True + json_encoders = {Decimal: decimal_encoder} + class ChargePointPassword(BaseModel): password: str diff --git a/backend/app/schemas/transaction.py b/backend/app/schemas/transaction.py index 0188f91..7ad8b8d 100644 --- a/backend/app/schemas/transaction.py +++ b/backend/app/schemas/transaction.py @@ -1,10 +1,11 @@ +import enum from datetime import datetime from decimal import Decimal -import enum from typing import Optional -from uuid import UUID from pydantic import BaseModel +from app.schemas.chargepoint import ChargePointThumb +from app.schemas.user import UserThumb from app.util.encoders import decimal_encoder class TransactionStatus(enum.Enum): @@ -47,8 +48,8 @@ class Transaction(BaseModel): meter_end: Optional[Decimal] = None end_reason: Optional[TransactionEventTriggerReason] = None price: Decimal - user_id: Optional[UUID] = None - chargepoint_id: UUID + user: UserThumb + chargepoint: ChargePointThumb class Config: from_attributes = True diff --git a/backend/app/schemas/user.py b/backend/app/schemas/user.py index 8737aa4..c113e88 100644 --- a/backend/app/schemas/user.py +++ b/backend/app/schemas/user.py @@ -30,6 +30,13 @@ class User(UserBase): class Config: from_attributes = True +class UserThumb(BaseModel): + id: UUID + friendly_name: str + + class Config: + from_attributes = True + class PasswordUpdate(BaseModel): old_password: str = Field(max_length=100) new_password: str = Field(max_length=100)