Untitled
unknown
plain_text
a year ago
3.7 kB
4
Indexable
from sqlalchemy import create_engine, text
from sqlalchemy.orm import sessionmaker, declarative_base
from fastapi import FastAPI, HTTPException
import strawberry
from strawberry.fastapi import GraphQLRouter
from typing import List, Optional
from strawberry.schema.config import StrawberryConfig
# Database setup
DATABASE_URL = ""
Base = declarative_base()
engine = create_engine(DATABASE_URL)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
# SQLAlchemy models (for views created by the stored procedure)
class ProductView(Base):
__tablename__ = "mdm_product_view"
record_id = Column("RECORD_ID", Integer, primary_key=True)
janssen_mstr_prdct_nm = Column(String)
product_phase = Column(String)
jnj_full_compound_id = Column(String)
generic_name = Column(String)
jnj_flag = Column(String)
product_status = Column(String)
current_record = Column(Integer)
last_active = Column(Integer)
created_date = Column(String)
updated_date = Column(String)
ta_name = Column("TA_NAME", String)
country_name = Column("COUNTRY_NAME", String)
status_desc = Column("REQUEST_STATUS", String)
delete_state = Column("DELETE_STATE", String)
# GraphQL types
@strawberry.type
class StatusType:
status_desc: str
@strawberry.type
class TherapeuticAreaType:
ta_name: str
@strawberry.type
class CountryType:
country_name: str
@strawberry.type
class ProductType:
record_id: int
janssen_mstr_prdct_nm: Optional[str]
product_phase: str
jnj_full_compound_id: str
generic_name: str
jnj_flag: Optional[str]
product_status: str
current_record: int
last_active: int
created_date: str
updated_date: str
delete_state: str
status: StatusType
country: CountryType
therapeutic_area: TherapeuticAreaType
# GraphQL query
@strawberry.type
class Query:
@strawberry.field
def products(self, user: str) -> List[ProductType]:
session = SessionLocal()
try:
# Execute the stored procedure
session.execute(text("CALL jsamdm_qa.productViewSP()"))
session.commit()
# Fetch products from the view created by the stored procedure
products = session.query(ProductView).all()
# Construct product response
response = [
ProductType(
record_id=product.record_id,
janssen_mstr_prdct_nm=product.janssen_mstr_prdct_nm,
product_phase=product.product_phase,
jnj_full_compound_id=product.jnj_full_compound_id,
generic_name=product.generic_name,
jnj_flag=product.jnj_flag,
product_status=product.product_status,
current_record=product.current_record,
last_active=product.last_active,
created_date=product.created_date,
updated_date=product.updated_date,
delete_state=product.delete_state,
status=StatusType(status_desc=product.status_desc),
country=CountryType(country_name=product.country_name),
therapeutic_area=TherapeuticAreaType(ta_name=product.ta_name)
)
for product in products
]
return response
finally:
session.close()
# GraphQL setup
schema = strawberry.Schema(query=Query, config=StrawberryConfig(auto_camel_case=False))
graphql_app = GraphQLRouter(schema)
app = FastAPI()
app.include_router(graphql_app, prefix="/graphql")
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)
Editor is loading...
Leave a Comment