Untitled

 avatar
unknown
plain_text
5 months ago
3.9 kB
2
Indexable
@strawberry.type
class Query:
    @strawberry.field
    def products(self, user: str) -> List[ProductType]:
        session = SessionLocal()
        try:
            # Fetch user details
            user_obj = session.query(User).filter(User.MDM_LOGIN == user).first()
            if not user_obj:
                raise HTTPException(status_code=404, detail="User not found")
            
            # Get associated countries and therapeutic areas
            country_ids = [uc.COUNTRY_ID for uc in user_obj.countries]
            ta_ids = [ut.TA_ID for ut in user_obj.therapeutics]

            # Apply filters on Product records
            products = (
                session.query(Product)
                .filter(
                    Product.is_deleted != 2,  # Check if product is not marked as deleted
                    or_(
                        Product.last_active > 0,  # Last active condition
                        Product.current_record == 1,  # Current record condition
                        Product.is_deleted == 1  # Allow deleted product if marked with 1
                    ),
                    Product.country_id.in_(country_ids) if country_ids else True,
                    Product.th_area.in_(ta_ids) if ta_ids else True
                )
                .options(
                    joinedload(Product.status),
                    joinedload(Product.country),
                    joinedload(Product.therapeutic_area),
                    joinedload(Product.product_fields)  # Load product_fields relationship
                )
                #.limit(10)
                .all()
            )

            # Construct product response
            response = []
            for product in products:
                product_fields = [
                    ProductFieldType(
                        record_id=pf.record_id,  # Corrected to use product_field_id
                        field_id=pf.field_id,
                        max_field_value=pf.field_value,  # Set field_value as max_field_value
                        field_detail=FieldDetailType(
                            field_id=pf.field_detail.field_id,
                            field_name=pf.field_detail.field_name
                        )
                    )
                    for pf in product.product_fields
                ]
                
                response.append(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,
                    status=StatusType(
                        status_id=product.status.STATUS_ID,
                        status_desc=product.status.STATUS_DESC
                    ),
                    country=CountryType(
                        country_id=product.country.COUNTRY_ID,
                        country_name=product.country.COUNTRY_NAME
                    ),
                    therapeutic_area=TherapeuticAreaType(
                        ta_id=product.therapeutic_area.TA_ID,
                        ta_name=product.therapeutic_area.TA_NAME
                    ),
                    product_fields=product_fields  # Add product_fields to the response
                ))

            return response

        finally:
            session.close()
Editor is loading...
Leave a Comment