From 7fde580b376e51637df422f60920a9dcfdbe4aca Mon Sep 17 00:00:00 2001 From: Khalim Conn-Kowlessar Date: Tue, 25 Nov 2025 13:43:36 +0000 Subject: [PATCH] set up epc model and already installed model --- backend/app/db/models/epc.py | 29 +++++++++++++++++++++++++++++ backend/app/db/models/portfolio.py | 16 ++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 backend/app/db/models/epc.py diff --git a/backend/app/db/models/epc.py b/backend/app/db/models/epc.py new file mode 100644 index 00000000..5a216040 --- /dev/null +++ b/backend/app/db/models/epc.py @@ -0,0 +1,29 @@ +from sqlalchemy import ( + Column, + Integer, + String, + JSON, + TIMESTAMP, + UniqueConstraint, +) +from sqlalchemy.orm import declarative_base + +Base = declarative_base() + + +class EpcStore(Base): + """ + Stores EPC data retrieved from the EPC API and EPC web pages. + """ + __tablename__ = "epc_store" + + id = Column(Integer, primary_key=True, autoincrement=True) + uprn = Column(Integer) + epc_api_created_at = Column(TIMESTAMP(timezone=False)) + epc_api = Column(JSON, nullable=False) + epc_page_created_at = Column(TIMESTAMP(timezone=False)) + epc_page = Column(String) + epc_page_rrn = Column(String) + + def __repr__(self): + return f"" diff --git a/backend/app/db/models/portfolio.py b/backend/app/db/models/portfolio.py index 953e7b3d..fbe9661b 100644 --- a/backend/app/db/models/portfolio.py +++ b/backend/app/db/models/portfolio.py @@ -4,6 +4,7 @@ import datetime from sqlalchemy import Column, Integer, Text, Boolean, Float, DateTime, Enum, ForeignKey, CheckConstraint from sqlalchemy.ext.declarative import declarative_base from backend.app.db.models.users import UserModel # noqa +from backend.app.db.models.materials import MaterialType Base = declarative_base() @@ -225,3 +226,18 @@ class PortfolioUsers(Base): role = Column(Text, nullable=False) created_at = Column(DateTime, nullable=False, default=datetime.datetime.now(pytz.utc)) updated_at = Column(DateTime, nullable=False, default=datetime.datetime.now(pytz.utc)) + + +class PropertyInstalledMeasures(Base): + """ + This model keeps a record of the installed measures for each property, at the UPRN level + """ + __tablename__ = 'property_installed_measures' + id = Column(Integer, primary_key=True, autoincrement=True) + uprn = Column(Integer, nullable=False) + measure_type = Column( + Enum(MaterialType, values_callable=lambda x: [e.value for e in x], create_constraint=False), + nullable=False + ) + created_at = Column(DateTime, nullable=False, default=datetime.datetime.now(pytz.utc)) + installed_at = Column(DateTime, nullable=False, default=datetime.datetime.now(pytz.utc))