4141from app .routers .files import add_file_entry , add_local_file_entry , remove_file_entry
4242from app .routers .licenses import delete_license
4343from app .search .connect import delete_document_by_id
44- from app .search .index import index_dataset , index_file
44+ from app .search .index import (
45+ index_dataset ,
46+ index_file ,
47+ index_folder ,
48+ remove_folder_index ,
49+ )
4550from beanie import PydanticObjectId
4651from beanie .odm .operators .update .general import Inc
4752from beanie .operators import And , Or
@@ -341,6 +346,13 @@ async def edit_dataset(
341346
342347 # Update entry to the dataset index
343348 await index_dataset (es , DatasetOut (** dataset .dict ()), update = True )
349+
350+ # Update folders index since its using dataset downloads and status to index
351+ async for folder in FolderDB .find (
352+ FolderDB .dataset_id == PydanticObjectId (dataset_id )
353+ ):
354+ await index_folder (es , FolderOut (** folder .dict ()), update = True )
355+
344356 return dataset .dict ()
345357 raise HTTPException (status_code = 404 , detail = f"Dataset { dataset_id } not found" )
346358
@@ -379,6 +391,13 @@ async def patch_dataset(
379391
380392 # Update entry to the dataset index
381393 await index_dataset (es , DatasetOut (** dataset .dict ()), update = True )
394+
395+ # Update folders index since its using dataset downloads and status to index
396+ async for folder in FolderDB .find (
397+ FolderDB .dataset_id == PydanticObjectId (dataset_id )
398+ ):
399+ await index_folder (es , FolderOut (** folder .dict ()), update = True )
400+
382401 return dataset .dict ()
383402
384403
@@ -423,6 +442,7 @@ async def add_folder(
423442 dataset_id : str ,
424443 folder_in : FolderIn ,
425444 user = Depends (get_current_user ),
445+ es : Elasticsearch = Depends (dependencies .get_elasticsearchclient ),
426446 allow : bool = Depends (Authorization ("uploader" )),
427447):
428448 if (await DatasetDB .get (PydanticObjectId (dataset_id ))) is not None :
@@ -436,6 +456,7 @@ async def add_folder(
436456 ** folder_in .dict (), creator = user , dataset_id = PydanticObjectId (dataset_id )
437457 )
438458 await new_folder .insert ()
459+ await index_folder (es , FolderOut (** new_folder .dict ()))
439460 return new_folder .dict ()
440461 raise HTTPException (status_code = 404 , detail = f"Dataset { dataset_id } not found" )
441462
@@ -595,9 +616,11 @@ async def _delete_nested_folders(parent_folder_id):
595616 await remove_file_entry (file .id , fs , es )
596617 await _delete_nested_folders (subfolder .id )
597618 await subfolder .delete ()
619+ await remove_folder_index (subfolder .id , es )
598620
599621 await _delete_nested_folders (folder_id )
600622 await folder .delete ()
623+ await remove_folder_index (folder .id , es )
601624 return {"deleted" : folder_id }
602625 else :
603626 raise HTTPException (status_code = 404 , detail = f"Folder { folder_id } not found" )
@@ -623,6 +646,7 @@ async def patch_folder(
623646 dataset_id : str ,
624647 folder_id : str ,
625648 folder_info : FolderPatch ,
649+ es : Elasticsearch = Depends (dependencies .get_elasticsearchclient ),
626650 user = Depends (get_current_user ),
627651 allow : bool = Depends (Authorization ("editor" )),
628652):
@@ -640,6 +664,8 @@ async def patch_folder(
640664 folder .parent_folder = folder_info .parent_folder
641665 folder .modified = datetime .datetime .utcnow ()
642666 await folder .save ()
667+ await index_folder (es , FolderOut (** folder .dict ()), update = True )
668+
643669 return folder .dict ()
644670 else :
645671 raise HTTPException (status_code = 404 , detail = f"Folder { folder_id } not found" )
@@ -894,6 +920,7 @@ async def create_dataset_from_zip(
894920@router .get ("/{dataset_id}/download" , response_model = DatasetOut )
895921async def download_dataset (
896922 dataset_id : str ,
923+ es : Elasticsearch = Depends (dependencies .get_elasticsearchclient ),
897924 user = Depends (get_current_user ),
898925 fs : Minio = Depends (dependencies .get_fs ),
899926 allow : bool = Depends (Authorization ("viewer" )),
@@ -1043,6 +1070,15 @@ async def download_dataset(
10431070 response .headers ["Content-Disposition" ] = "attachment; filename=%s" % zip_name
10441071 # Increment download count
10451072 await dataset .update (Inc ({DatasetDB .downloads : 1 }))
1073+
1074+ # reindex
1075+ await index_dataset (es , DatasetOut (** dataset .dict ()), update = True )
1076+ # Update folders index since its using dataset downloads and status to index
1077+ async for folder in FolderDB .find (
1078+ FolderDB .dataset_id == PydanticObjectId (dataset_id )
1079+ ):
1080+ await index_folder (es , FolderOut (** folder .dict ()), update = True )
1081+
10461082 return response
10471083 raise HTTPException (status_code = 404 , detail = f"Dataset { dataset_id } not found" )
10481084
0 commit comments