Model/backend/app/db/models/solar.py
2024-07-10 17:52:22 +01:00

45 lines
1.6 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 sqlalchemy.ext.declarative import declarative_base
Base = declarative_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)