Model/backend/app/db/models/solar.py
2026-02-23 12:13:59 +00:00

43 lines
1.5 KiB
Python

import datetime
import pytz
from enum import Enum as PyEnum
from sqlalchemy import Column, Integer, Float, DateTime, JSON, BigInteger, ForeignKey, Enum, Boolean
from backend.app.db.base import Base
class Solar(Base):
__tablename__ = 'solar'
id = Column(Integer, primary_key=True, autoincrement=True)
longitude = Column(Float, nullable=False)
latitude = Column(Float, nullable=False)
uprn = Column(Integer, 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), onupdate=datetime.datetime.now(pytz.utc)
)
google_api_response = Column(JSON, nullable=False)
class ScenarioType(PyEnum):
unit = "unit"
building = "building"
class SolarScenario(Base):
__tablename__ = 'solar_scenario'
id = Column(BigInteger, primary_key=True, autoincrement=True)
solar_id = Column(BigInteger, ForeignKey('solar.id'), nullable=False)
scenario_type = Column(Enum(ScenarioType), nullable=False)
number_panels = Column(Integer, nullable=False)
array_kwhp = Column(Integer, nullable=False)
lifetime_dc_kwh = Column(Float, nullable=False)
yearly_dc_kwh = Column(Float, nullable=False)
lifetime_ac_kwh = Column(Float)
yearly_ac_kwh = Column(Float)
cost = Column(Float, nullable=False)
expected_payback_years = Column(Float)
panelled_roof_area = Column(Float, nullable=False)
is_default = Column(Boolean, nullable=False)