1919use std:: collections:: HashSet ;
2020
2121use actix_web:: http:: StatusCode ;
22- use actix_web:: { HttpResponse , web} ;
22+ use actix_web:: { HttpRequest , HttpResponse , web} ;
2323use serde:: { Deserialize , Serialize } ;
2424
25+ use crate :: utils:: get_tenant_id_from_request;
2526use crate :: {
2627 handlers:: DatasetTag ,
2728 parseable:: PARSEABLE ,
@@ -39,12 +40,13 @@ struct CorrelatedDataset {
3940/// GET /api/v1/datasets/{name}/correlated
4041/// Returns all datasets sharing at least one tag or label with the named dataset.
4142pub async fn get_correlated_datasets (
43+ req : HttpRequest ,
4244 path : web:: Path < String > ,
4345) -> Result < HttpResponse , DatasetsError > {
4446 let dataset_name = path. into_inner ( ) ;
45-
47+ let tenant_id = get_tenant_id_from_request ( & req ) ;
4648 let stream = PARSEABLE
47- . get_stream ( & dataset_name)
49+ . get_stream ( & dataset_name, & tenant_id )
4850 . map_err ( |_| DatasetsError :: DatasetNotFound ( dataset_name. clone ( ) ) ) ?;
4951
5052 let target_tags: HashSet < DatasetTag > = stream. get_dataset_tags ( ) . into_iter ( ) . collect ( ) ;
@@ -54,14 +56,14 @@ pub async fn get_correlated_datasets(
5456 return Ok ( HttpResponse :: Ok ( ) . json ( Vec :: < CorrelatedDataset > :: new ( ) ) ) ;
5557 }
5658
57- let all_streams = PARSEABLE . streams . list ( ) ;
59+ let all_streams = PARSEABLE . streams . list ( & tenant_id ) ;
5860 let mut correlated = Vec :: new ( ) ;
5961
6062 for name in all_streams {
6163 if name == dataset_name {
6264 continue ;
6365 }
64- if let Ok ( s) = PARSEABLE . get_stream ( & name) {
66+ if let Ok ( s) = PARSEABLE . get_stream ( & name, & tenant_id ) {
6567 // Skip internal streams
6668 if s. get_stream_type ( ) == StreamType :: Internal {
6769 continue ;
@@ -89,16 +91,20 @@ pub async fn get_correlated_datasets(
8991
9092/// GET /api/v1/datasets/tags/{tag}
9193/// Returns all datasets that have the specified tag.
92- pub async fn get_datasets_by_tag ( path : web:: Path < String > ) -> Result < HttpResponse , DatasetsError > {
94+ pub async fn get_datasets_by_tag (
95+ req : HttpRequest ,
96+ path : web:: Path < String > ,
97+ ) -> Result < HttpResponse , DatasetsError > {
98+ let tenant_id = get_tenant_id_from_request ( & req) ;
9399 let tag_str = path. into_inner ( ) ;
94100 let tag =
95101 DatasetTag :: try_from ( tag_str. as_str ( ) ) . map_err ( |_| DatasetsError :: InvalidTag ( tag_str) ) ?;
96102
97- let all_streams = PARSEABLE . streams . list ( ) ;
103+ let all_streams = PARSEABLE . streams . list ( & tenant_id ) ;
98104 let mut matching = Vec :: new ( ) ;
99105
100106 for name in all_streams {
101- if let Ok ( s) = PARSEABLE . get_stream ( & name) {
107+ if let Ok ( s) = PARSEABLE . get_stream ( & name, & tenant_id ) {
102108 if s. get_stream_type ( ) == StreamType :: Internal {
103109 continue ;
104110 }
@@ -121,14 +127,16 @@ pub struct PutDatasetMetadataBody {
121127/// Replaces the dataset's tags and/or labels.
122128/// Only fields present in the body are updated; absent fields are left unchanged.
123129pub async fn put_dataset_metadata (
130+ req : HttpRequest ,
124131 path : web:: Path < String > ,
125132 body : web:: Json < PutDatasetMetadataBody > ,
126133) -> Result < HttpResponse , DatasetsError > {
127134 let dataset_name = path. into_inner ( ) ;
128135 let body = body. into_inner ( ) ;
136+ let tenant_id = get_tenant_id_from_request ( & req) ;
129137
130138 let stream = PARSEABLE
131- . get_stream ( & dataset_name)
139+ . get_stream ( & dataset_name, & tenant_id )
132140 . map_err ( |_| DatasetsError :: DatasetNotFound ( dataset_name. clone ( ) ) ) ?;
133141
134142 let final_tags = match body. tags {
@@ -151,7 +159,12 @@ pub async fn put_dataset_metadata(
151159 // Update storage first, then in-memory
152160 let storage = PARSEABLE . storage . get_object_store ( ) ;
153161 storage
154- . update_dataset_tags_and_labels_in_stream ( & dataset_name, & final_tags, & final_labels)
162+ . update_dataset_tags_and_labels_in_stream (
163+ & dataset_name,
164+ & final_tags,
165+ & final_labels,
166+ & tenant_id,
167+ )
155168 . await
156169 . map_err ( DatasetsError :: Storage ) ?;
157170
0 commit comments