diff --git a/database.py b/database.py new file mode 100644 index 0000000..1c9efbf --- /dev/null +++ b/database.py @@ -0,0 +1,25 @@ +from sqlalchemy import create_engine +from sqlalchemy.orm import sessionmaker, declarative_base + +DATABASE_URL = "postgresql://postgres:postgres@172.16.10.178:5444/postgres" + +engine = create_engine( + DATABASE_URL, + pool_pre_ping=True +) + +SessionLocal = sessionmaker( + autocommit=False, + autoflush=False, + bind=engine +) + +Base = declarative_base() + + +def get_db(): + db = SessionLocal() + try: + yield db + finally: + db.close() \ No newline at end of file diff --git a/main.py b/main.py index b862ba1..e0d54df 100644 --- a/main.py +++ b/main.py @@ -7,6 +7,10 @@ import psycopg2 from psycopg2.extras import RealDictCursor import asyncio from fastapi.middleware.cors import CORSMiddleware + +from database import Base, engine,SessionLocal +# import models +from models import NodeInterface origins = [ "http://localhost:5173", "http://127.0.0.1:5173", @@ -15,6 +19,8 @@ origins = [ app = FastAPI() +Base.metadata.create_all(bind=engine) + app.add_middleware( CORSMiddleware, allow_origins=origins, @@ -213,8 +219,13 @@ def register_node(data: RegisterNodeRequest, token_data: dict = Depends(verify_t # 5. Show registered nodes cur.execute(""" - SELECT node_id, node_name - FROM spock.node; + SELECT + n.node_id, + n.node_name, + ni.if_id + FROM spock.node n + LEFT JOIN spock.node_interface ni + ON ni.if_nodeid = n.node_id; """) rows = cur.fetchall() @@ -222,10 +233,34 @@ def register_node(data: RegisterNodeRequest, token_data: dict = Depends(verify_t nodes = [ { "node_id": row[0], - "node_name": row[1] + "node_name": row[1], + "if_id": row[2] } for row in rows ] + registered_node = next( + node for node in nodes + if node["node_id"] == node_id + ) + + db = SessionLocal() + + try: + node_interface = NodeInterface( + if_id=registered_node["if_id"], + if_name=registered_node["node_name"], + if_nodeid=registered_node["node_id"], + host=data.host, + port=data.port, + dbname=data.dbname, + user=data.user + ) + + db.add(node_interface) + db.commit() + + finally: + db.close() return { "status": "success", diff --git a/models.py b/models.py new file mode 100644 index 0000000..a448872 --- /dev/null +++ b/models.py @@ -0,0 +1,41 @@ +from sqlalchemy import Column, BigInteger, Integer, String +from database import Base + + +class NodeInterface(Base): + __tablename__ = "fastAPI_node_interface" + + if_id = Column( + BigInteger, + primary_key=True + ) + + if_name = Column( + String, + nullable=False + ) + + if_nodeid = Column( + Integer, + nullable=False + ) + + host = Column( + String, + nullable=False + ) + + port = Column( + Integer, + nullable=False + ) + + dbname = Column( + String, + nullable=False + ) + + user = Column( + String, + nullable=False + ) \ No newline at end of file