Untitled
unknown
plain_text
5 months ago
5.5 kB
4
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