@@ -41,26 +41,44 @@ pub async fn register_model(
4141 Json ( req) : Json < SdkRegisterModelRequest > ,
4242) -> AppResult < Json < SdkRegisterModelResponse > > {
4343 let framework = req. framework . unwrap_or_else ( || "pytorch" . into ( ) ) ;
44- let project_id = req. project_id . unwrap_or_else ( Uuid :: nil ) ;
44+ let project_id: Option < Uuid > = req. project_id . filter ( |id| !id . is_nil ( ) ) ;
4545 let workspace_id: Option < Uuid > = None ;
4646
47- // Check if a model with the same name (or registry_name) already exists in this project
47+ // Check if a model with the same name (or registry_name) already exists
4848 let existing: Option < crate :: models:: model:: Model > = if req. registry_name . is_some ( ) {
49- sqlx:: query_as (
50- "SELECT * FROM models WHERE registry_name = $1 AND project_id = $2 ORDER BY version DESC LIMIT 1"
51- )
52- . bind ( & req. registry_name )
53- . bind ( project_id)
54- . fetch_optional ( & state. db )
55- . await ?
49+ if let Some ( pid) = project_id {
50+ sqlx:: query_as (
51+ "SELECT * FROM models WHERE registry_name = $1 AND project_id = $2 ORDER BY version DESC LIMIT 1"
52+ )
53+ . bind ( & req. registry_name )
54+ . bind ( pid)
55+ . fetch_optional ( & state. db )
56+ . await ?
57+ } else {
58+ sqlx:: query_as (
59+ "SELECT * FROM models WHERE registry_name = $1 AND project_id IS NULL ORDER BY version DESC LIMIT 1"
60+ )
61+ . bind ( & req. registry_name )
62+ . fetch_optional ( & state. db )
63+ . await ?
64+ }
5665 } else {
57- sqlx:: query_as (
58- "SELECT * FROM models WHERE name = $1 AND project_id = $2 ORDER BY version DESC LIMIT 1"
59- )
60- . bind ( & req. name )
61- . bind ( project_id)
62- . fetch_optional ( & state. db )
63- . await ?
66+ if let Some ( pid) = project_id {
67+ sqlx:: query_as (
68+ "SELECT * FROM models WHERE name = $1 AND project_id = $2 ORDER BY version DESC LIMIT 1"
69+ )
70+ . bind ( & req. name )
71+ . bind ( pid)
72+ . fetch_optional ( & state. db )
73+ . await ?
74+ } else {
75+ sqlx:: query_as (
76+ "SELECT * FROM models WHERE name = $1 AND project_id IS NULL ORDER BY version DESC LIMIT 1"
77+ )
78+ . bind ( & req. name )
79+ . fetch_optional ( & state. db )
80+ . await ?
81+ }
6482 } ;
6583
6684 let from_registry = req. registry_name . is_some ( ) ;
@@ -351,7 +369,7 @@ pub async fn create_dataset(
351369
352370 let dataset_id = Uuid :: new_v4 ( ) ;
353371 let format = req. format . unwrap_or_else ( || "csv" . into ( ) ) ;
354- let project_id = req. project_id . unwrap_or_else ( Uuid :: nil ) ;
372+ let project_id: Option < Uuid > = req. project_id . filter ( |id| !id . is_nil ( ) ) ;
355373
356374 // Decode base64
357375 let bytes = base64:: engine:: general_purpose:: STANDARD
@@ -592,12 +610,12 @@ pub async fn create_features(
592610 AuthUser ( claims) : AuthUser ,
593611 Json ( req) : Json < SdkCreateFeaturesRequest > ,
594612) -> AppResult < Json < serde_json:: Value > > {
595- let project_id = req. project_id . unwrap_or_else ( Uuid :: nil ) ;
613+ let project_id: Option < Uuid > = req. project_id . filter ( |id| !id . is_nil ( ) ) ;
596614 let entity = req. entity . unwrap_or_else ( || "default" . into ( ) ) ;
597615
598616 // Create or find feature group
599617 let group_id: Uuid = match sqlx:: query_scalar :: < _ , Uuid > (
600- "SELECT id FROM feature_groups WHERE name = $1 AND project_id = $2"
618+ "SELECT id FROM feature_groups WHERE name = $1 AND ( project_id = $2 OR ($2::uuid IS NULL AND project_id IS NULL)) "
601619 )
602620 . bind ( & req. group_name )
603621 . bind ( project_id)
@@ -708,7 +726,7 @@ pub async fn create_hyperparameters(
708726 Json ( req) : Json < CreateHpSetRequest > ,
709727) -> AppResult < Json < HyperparameterSet > > {
710728 let id = Uuid :: new_v4 ( ) ;
711- let project_id = req. project_id . unwrap_or_else ( Uuid :: nil ) ;
729+ let project_id: Option < Uuid > = req. project_id . filter ( |id| !id . is_nil ( ) ) ;
712730
713731 let hp: HyperparameterSet = sqlx:: query_as (
714732 "INSERT INTO hyperparameter_sets (id, project_id, name, description, parameters, model_id, created_by, created_at, updated_at)
@@ -1117,7 +1135,7 @@ pub async fn create_pipeline(
11171135 Json ( req) : Json < CreatePipelineRequest > ,
11181136) -> AppResult < Json < Pipeline > > {
11191137 let pipeline_id = Uuid :: new_v4 ( ) ;
1120- let project_id = req. project_id . unwrap_or_else ( Uuid :: nil ) ;
1138+ let project_id: Option < Uuid > = req. project_id . filter ( |id| !id . is_nil ( ) ) ;
11211139
11221140 let pipeline: Pipeline = sqlx:: query_as (
11231141 "INSERT INTO pipelines (id, project_id, name, description, status, created_by, created_at, updated_at)
0 commit comments