Untitled
unknown
plain_text
a year ago
5.5 kB
8
Indexable
from typing import List, Optional
from sqlalchemy import or_
from sqlalchemy.orm import Session, joinedload
from app.graphql.schema import Info
from app.graphql.types.field_detail_type import FieldDetailType
from app.graphql.types.product_type import (
CountryType,
ProductFieldType,
ProductType,
StatusType,
TherapeuticType,
)
from app.models import Product, User
async def product_data(
self, info: Info, user: str = None, page: int = 1, rows: int = 10
) -> List[ProductType]:
session: Session = info.context.session
try:
# Fetch user details
user_obj = session.query(User)
if user:
user_obj = user_obj.filter_by(login=user).first()
if not user_obj:
return "User not found"
# Get associated countries and therapeutic areas
country_ids = [uc.country_id for uc in user_obj.users_countries]
ta_ids = [ut.ta_id for ut in user_obj.users_therapeutics]
print(f"IDs: {country_ids}, {ta_ids}")
# Apply filters on Product records
products_query = session.query(Product).filter(Product.is_deleted != 2)
print(f"Products after is_deleted filter: {products_query.count()}")
products_query = products_query.filter(
or_(
Product.last_active > 0,
Product.current_record == 1,
Product.is_deleted == 1,
)
)
print(f"Products after last active filter: {products_query.count()}")
if country_ids:
products_query = products_query.filter(Product.country_id.in_(country_ids))
print(f"Products after country filter: {products_query.count()}")
if ta_ids:
products_query = products_query.filter(Product.th_area.in_(ta_ids))
print(f"Products after therapeutic area filter: {products_query.count()}")
products = products_query.options(
joinedload(Product.status),
joinedload(Product.users_country),
joinedload(Product.therapeutic),
joinedload(Product.product_fields),
).all()
# Construct product response
response = []
for product in products:
product_fields = [
ProductFieldType(
id=pf.id,
record_id=pf.record_id, # Corrected to use product_field_id
field_id=pf.field_id,
field_value=pf.field_value, # Set field_value as max_field_value
field_detail=FieldDetailType(
id=pf.field_detail.id,
name=pf.field_detail.name,
label=pf.field_detail.label,
type=pf.field_detail.type,
order=pf.field_detail.order,
field_format=pf.field_detail.format,
validation_id=pf.field_detail.validation_id,
options=pf.field_detail.options,
rcvd_from_reltio=pf.field_detail.rcvd_frm_reltio,
is_dynamic=pf.field_detail.is_dynamic,
is_active=pf.field_detail.is_active,
is_editable=pf.field_detail.is_editable,
is_deleted=pf.field_detail.is_deleted,
is_visible=pf.field_detail.is_visible,
is_downstream=pf.field_detail.is_downstream,
is_published=pf.field_detail.is_published,
default_option=pf.field_detail.default_option,
created_date=pf.field_detail.created_date,
created_by_id=pf.field_detail.created_by_id,
updated_by_id=pf.field_detail.updated_by_id,
),
)
for pf in product.product_fields
]
response.append(
ProductType(
id=product.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,
mdm_id=product.mdm_id,
series_id=product.series_id,
country_id=product.country_id,
product_name=product.product_name,
request_status_id=product.request_status_id,
is_deleted=product.is_deleted,
created_by_id=product.created_by_id,
updated_by_id=product.updated_by_id,
reltio_id=product.reltio_id,
group_type=product.group_type,
th_area=product.th_area,
ta_sub_type=product.ta_sub_type,
)
)
print("RESPONSE: ", response)
return response
finally:
session.close()
Editor is loading...
Leave a Comment