import enum from sqlalchemy import ( Column, Integer, Float, Enum, TIMESTAMP, BigInteger, ForeignKey, ) from sqlalchemy.sql import func from backend.app.db.base import Base from backend.app.db.models.recommendations import PlanModel from backend.app.db.models.materials import MaterialType, Material class SchemeEnum(enum.Enum): eco4 = "eco4" gbis = "gbis" whlg = "whlg" none = "none" class FundingPackage(Base): __tablename__ = "funding_package" id = Column(Integer, primary_key=True, autoincrement=True) plan_id = Column(BigInteger, ForeignKey(PlanModel.id), nullable=False) scheme = Column( Enum( SchemeEnum, values_callable=lambda x: [e.value for e in x], create_constraint=False, ), nullable=False, ) created_at = Column(TIMESTAMP, nullable=False, server_default=func.now()) project_funding = Column(Float) total_uplift = Column(Float) full_project_score = Column(Float) partial_project_score = Column(Float) uplift_project_score = Column(Float) class FundingPackageMeasures(Base): __tablename__ = "funding_package_measures" id = Column(Integer, primary_key=True, autoincrement=True) funding_package_id = Column( BigInteger, ForeignKey(FundingPackage.id), nullable=False ) measure = Column( Enum( MaterialType, values_callable=lambda x: [e.value for e in x], create_constraint=False, ), nullable=False, ) material_id = Column( BigInteger, ForeignKey(Material.id), nullable=False ) # Assuming material table exists innovation_uplift = Column(Float) partial_project_score = Column(Float) uplift_project_score = Column(Float)