from sqlalchemy import Column, BigInteger, Integer, String from database import Base, engine import uuid from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.orm import relationship from sqlalchemy import ForeignKey from sqlalchemy import text class NodeInterface(Base): __tablename__ = "fastAPI_node_interface" uuid = Column( UUID(as_uuid=True), primary_key=True, default=uuid.uuid4, nullable=False ) if_id = Column( BigInteger, unique=True, nullable=False ) if_name = Column( String, unique=True, nullable=False ) if_nodeid = Column( Integer, nullable=False ) host = Column( String, unique=True, nullable=False ) port = Column( Integer, nullable=False ) dbname = Column( String, nullable=False ) user = Column( String, nullable=False ) cluster_id = Column( UUID(as_uuid=True), ForeignKey("fastAPI_cluster.uuid"), nullable=True ) cluster = relationship( "Cluster", back_populates="nodes" ) class Cluster(Base): __tablename__ = "fastAPI_cluster" uuid = Column( UUID(as_uuid=True), primary_key=True, default=uuid.uuid4, nullable=False ) cluster_name = Column( String, unique=True, nullable=False ) nodes = relationship( "NodeInterface", back_populates="cluster" ) #EXPERIMENTAL def add_cluster_id_column(): with engine.begin() as conn: conn.execute(text(""" ALTER TABLE "fastAPI_node_interface" ADD COLUMN IF NOT EXISTS cluster_id UUID; """)) conn.execute(text(""" ALTER TABLE "fastAPI_node_interface" ADD CONSTRAINT fk_node_interface_cluster FOREIGN KEY (cluster_id) REFERENCES "fastAPI_cluster"(uuid); """)) # add_cluster_id_column() # ALTER TABLE "fastAPI_node_interface" # DROP CONSTRAINT fk_node_interface_cluster; # ALTER TABLE "fastAPI_node_interface" # ADD CONSTRAINT fk_node_interface_cluster # FOREIGN KEY (cluster_id) # REFERENCES "fastAPI_cluster"(uuid) # ON DELETE SET NULL; #\d "fastAPI_node_interface"