diff --git a/backend/routers/business.py b/backend/routers/business.py index 71720d68..797fb4b4 100644 --- a/backend/routers/business.py +++ b/backend/routers/business.py @@ -4,7 +4,7 @@ from pydantic import BaseModel import mih_database import mih_database.mihDbConnections from mih_database.mihDbObjects import User, Business, BusinessRating, BookmarkedBusiness -from sqlalchemy import desc +from sqlalchemy import desc, or_ from sqlalchemy.orm import Session #SuperToken Auth from front end from supertokens_python.recipe.session.framework.fastapi import verify_session @@ -64,43 +64,115 @@ class businessUpdateRequestV2(BaseModel): # Get List of all files -@router.get("/businesses/search/{search}", tags=["MIH Business"]) -async def read_all_businesses(search: str, session: SessionContainer = Depends(verify_session())): #, session: SessionContainer = Depends(verify_session()) - db = mih_database.dbConnection.dbAppDataConnect() - cursor = db.cursor() - query = "SELECT business.business_id, business.Name, business.type, business.registration_no, " - query += "business.logo_name, business.logo_path, business.contact_no, business.bus_email, " - query += "business.gps_location, " - query += "practice_no, vat_no, " - query += "website, rating, mission_vision " - query += "FROM business " - query += "WHERE LOWER(business.Name) LIKE %s OR LOWER(business.type) LIKE %s " - query += "OR LOWER(business.bus_email) LIKE %s OR LOWER(business.mission_vision) LIKE %s" - search_term = f"%{search.lower()}%" # Add wildcards and lowercase - cursor.execute(query, (search_term, search_term, search_term, search_term)) - items = [ - { - "business_id": item[0], - "Name": item[1], - "type": item[2], - "registration_no": item[3], - "logo_name": item[4], - "logo_path": item[5], - "contact_no": item[6], - "bus_email": item[7], - "app_id": "", - "gps_location": item[8], - "practice_no": item[9], - "vat_no": item[10], - "website": item[11], - "rating": item[12], - "mission_vision": item[13], - } - for item in cursor.fetchall() - ] - cursor.close() - db.close() - return items +@router.get("/business/types/", tags=["MIH Business"]) +async def read_business_by_business_id(session: SessionContainer = Depends(verify_session())): #, session: SessionContainer = Depends(verify_session()) + dbEngine = mih_database.mihDbConnections.dbAllConnect() + dbSession = Session(dbEngine) + try: + queryResults = dbSession.query(Business.type).distinct().order_by(Business.type).all() + response_data = [{"type": t[0]} for t in queryResults] + return response_data + except Exception as e: + print(f"An error occurred during the ORM query: {e}") + if dbSession.is_active: + dbSession.rollback() + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail="Failed to retrieve records due to an internal server error." + ) + finally: + dbSession.close() + +# Get List of all files +@router.get("/business/search/{type}/{search}", tags=["MIH Business"]) +async def read_all_businesses(search: str, type: str, session: SessionContainer = Depends(verify_session())): #, session: SessionContainer = Depends(verify_session()) + dbEngine = mih_database.mihDbConnections.dbAllConnect() + dbSession = Session(dbEngine) + try: + queryResults = dbSession.query(Business) + type_term_with_wildcards = "" + if type != "All": + type_term_with_wildcards = f"%{type.lower()}%" + queryResults = queryResults.filter( + Business.type.ilike(type_term_with_wildcards) + ) + search_term_with_wildcards = "" + if search != "All": + search_term_with_wildcards = f"%{search.lower()}%" + queryResults = queryResults.filter( + or_( + Business.Name.ilike(search_term_with_wildcards), + Business.bus_email.ilike(search_term_with_wildcards), + Business.mission_vision.ilike(search_term_with_wildcards), + ) + ) + queryResults = queryResults.all() + response_data = [] + for business in queryResults: + response_data.append({ + "business_id": business.business_id, + "Name": business.Name, + "type": business.type, + "registration_no": business.registration_no, + "logo_name": business.logo_name, + "logo_path": business.logo_path, + "contact_no": business.contact_no, + "bus_email": business.bus_email, + "app_id": "", + "gps_location": business.gps_location, + "practice_no": business.practice_no, + "vat_no": business.vat_no, + "website": business.website, + "rating": business.rating, + "mission_vision": business.mission_vision, + }) + + return response_data + except Exception as e: + print(f"An error occurred during the ORM query: {e}") + if dbSession.is_active: + dbSession.rollback() + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail="Failed to retrieve records due to an internal server error." + ) + finally: + dbSession.close() + # db = mih_database.dbConnection.dbAppDataConnect() + # cursor = db.cursor() + # query = "SELECT business.business_id, business.Name, business.type, business.registration_no, " + # query += "business.logo_name, business.logo_path, business.contact_no, business.bus_email, " + # query += "business.gps_location, " + # query += "practice_no, vat_no, " + # query += "website, rating, mission_vision " + # query += "FROM business " + # query += "WHERE LOWER(business.Name) LIKE %s OR LOWER(business.type) LIKE %s " + # query += "OR LOWER(business.bus_email) LIKE %s OR LOWER(business.mission_vision) LIKE %s" + # search_term = f"%{search.lower()}%" # Add wildcards and lowercase + # cursor.execute(query, (search_term, search_term, search_term, search_term)) + # items = [ + # { + # "business_id": item[0], + # "Name": item[1], + # "type": item[2], + # "registration_no": item[3], + # "logo_name": item[4], + # "logo_path": item[5], + # "contact_no": item[6], + # "bus_email": item[7], + # "app_id": "", + # "gps_location": item[8], + # "practice_no": item[9], + # "vat_no": item[10], + # "website": item[11], + # "rating": item[12], + # "mission_vision": item[13], + # } + # for item in cursor.fetchall() + # ] + # cursor.close() + # db.close() + # return items # Get List of all files @router.get("/business/business_id/{business_id}", tags=["MIH Business"])