def get_filtered_records()

in src/api/main.py [0:0]


def get_filtered_records(params: FilterParameters = Depends()):
    results_atel = data_atel
    results_gcn = data_gcn
    if params.object_name:
        items_before = len(results_atel) + len(results_gcn)
        results_atel = match_object_name(params.object_name, results_atel)
        results_gcn = match_object_name(params.object_name, results_gcn)
        logger.info(f"object_name: filtered {items_before} items to {len(results_atel) + len(results_gcn)}")
    if params.event_type:
        items_before = len(results_atel) + len(results_gcn)
        results_atel = {key: value for key, value in results_atel.items()
                        if params.event_type.lower() in results_atel[key].event_type}
        results_gcn = {key: value for key, value in results_gcn.items()
                       if params.event_type.lower() in results_gcn[key].event_type}
        logger.info(f"event_type: filtered {items_before} items to {len(results_atel) + len(results_gcn)}")
    if params.object_type:
        items_before = len(results_atel) + len(results_gcn)
        results_atel = {key: value for key, value in results_atel.items()
                        if params.object_type.lower() in results_atel[key].object_type}
        results_gcn = {key: value for key, value in results_gcn.items()
                       if params.object_type.lower() in results_gcn[key].object_type}
        logger.info(f"object_type: filtered {items_before} items to {len(results_atel) + len(results_gcn)}")
    if params.messenger_type:
        items_before = len(results_atel) + len(results_gcn)
        results_atel = {key: value for key, value in results_atel.items()
                        if params.messenger_type.lower() in results_atel[key].messenger_type}
        results_gcn = {key: value for key, value in results_gcn.items()
                       if params.messenger_type.lower() in results_gcn[key].messenger_type}
        logger.info(f"messenger_type: filtered {items_before} items to {len(results_atel) + len(results_gcn)}")
    if params.coordinates:
        if not params.radius:
            raise HTTPException(status_code=400, detail="Radius is required when searching by coordinates.")
        try:
            sky_coord = SkyCoord(params.coordinates, frame='icrs', unit=(u.hour, u.deg))
        except:
            raise HTTPException(status_code=400,
                                detail=f"Invalid coordinates: {params.coordinates}. Please, use ICRS format.")
        items_before = len(results_atel) + len(results_gcn)
        results_atel = _search_by_coordinates(tree_atel, coords_atel, sky_coord, params.radius, results_atel)
        results_gcn = _search_by_coordinates(tree_gcn, coords_gcn, sky_coord, params.radius, results_gcn)
        logger.info(f"coordinates: filtered {items_before} items to {len(results_atel) + len(results_gcn)}")
    return {'atel': results_atel, 'gcn': results_gcn}