@@ -31,7 +31,7 @@ pub fn batch_add_experts(env: Env, experts: Vec<Address>) -> Result<(), Registry
3131 }
3232 // Default empty URI for batch adds
3333 let empty_uri = String :: from_str ( & env, "" ) ;
34- storage:: set_expert_record ( & env, & expert, ExpertStatus :: Verified , empty_uri) ;
34+ storage:: set_expert_record ( & env, & expert, ExpertStatus :: Verified , empty_uri, 0 ) ;
3535 storage:: add_expert_to_index ( & env, & expert) ;
3636 events:: emit_status_change ( & env, expert, status, ExpertStatus :: Verified , admin. clone ( ) ) ;
3737 }
@@ -54,7 +54,7 @@ pub fn batch_ban_experts(env: Env, experts: Vec<Address>) -> Result<(), Registry
5454 return Err ( RegistryError :: AlreadyBanned ) ;
5555 }
5656 let existing = storage:: get_expert_record ( & env, & expert) ;
57- storage:: set_expert_record ( & env, & expert, ExpertStatus :: Banned , existing. data_uri ) ;
57+ storage:: set_expert_record ( & env, & expert, ExpertStatus :: Banned , existing. data_uri , existing . category_id ) ;
5858 events:: emit_status_change ( & env, expert, status, ExpertStatus :: Banned , admin. clone ( ) ) ;
5959 }
6060
@@ -82,6 +82,7 @@ pub fn verify_expert(
8282 caller : & Address ,
8383 expert : & Address ,
8484 data_uri : String ,
85+ category_id : u32 ,
8586) -> Result < ( ) , RegistryError > {
8687 let admin = storage:: get_admin ( env) . ok_or ( RegistryError :: NotInitialized ) ?;
8788
@@ -104,7 +105,7 @@ pub fn verify_expert(
104105 return Err ( RegistryError :: UriTooLong ) ;
105106 }
106107
107- storage:: set_expert_record ( env, expert, ExpertStatus :: Verified , data_uri) ;
108+ storage:: set_expert_record ( env, expert, ExpertStatus :: Verified , data_uri, category_id ) ;
108109 storage:: add_expert_to_index ( env, expert) ;
109110
110111 events:: emit_status_change (
@@ -136,9 +137,9 @@ pub fn ban_expert(env: &Env, caller: &Address, expert: &Address) -> Result<(), R
136137 return Err ( RegistryError :: AlreadyBanned ) ;
137138 }
138139
139- // Preserve existing data_uri when banning
140+ // Preserve existing data_uri and category_id when banning
140141 let existing = storage:: get_expert_record ( env, expert) ;
141- storage:: set_expert_record ( env, expert, ExpertStatus :: Banned , existing. data_uri ) ;
142+ storage:: set_expert_record ( env, expert, ExpertStatus :: Banned , existing. data_uri , existing . category_id ) ;
142143
143144 events:: emit_status_change (
144145 env,
@@ -162,9 +163,9 @@ pub fn unban_expert(env: &Env, expert: &Address) -> Result<(), RegistryError> {
162163 return Err ( RegistryError :: NotBanned ) ;
163164 }
164165
165- // Preserve existing data_uri when unbanning
166+ // Preserve existing data_uri and category_id when unbanning
166167 let existing = storage:: get_expert_record ( env, expert) ;
167- storage:: set_expert_record ( env, expert, ExpertStatus :: Verified , existing. data_uri ) ;
168+ storage:: set_expert_record ( env, expert, ExpertStatus :: Verified , existing. data_uri , existing . category_id ) ;
168169
169170 events:: emit_status_change (
170171 env,
@@ -199,7 +200,7 @@ pub fn is_verified(env: &Env, expert: &Address) -> bool {
199200}
200201
201202/// Allow a verified expert to update their own profile URI
202- pub fn update_profile ( env : & Env , expert : & Address , new_uri : String ) -> Result < ( ) , RegistryError > {
203+ pub fn update_profile ( env : & Env , expert : & Address , new_uri : String , category_id : u32 ) -> Result < ( ) , RegistryError > {
203204 expert. require_auth ( ) ;
204205
205206 // Validate URI length
@@ -213,7 +214,7 @@ pub fn update_profile(env: &Env, expert: &Address, new_uri: String) -> Result<()
213214 }
214215
215216 // Update record preserving status
216- storage:: set_expert_record ( env, expert, status, new_uri. clone ( ) ) ;
217+ storage:: set_expert_record ( env, expert, status, new_uri. clone ( ) , category_id ) ;
217218 events:: emit_profile_updated ( env, expert. clone ( ) , new_uri) ;
218219 Ok ( ( ) )
219220}
@@ -222,7 +223,7 @@ pub fn update_profile(env: &Env, expert: &Address, new_uri: String) -> Result<()
222223/// Allows admins to update multiple expert metadata URIs in a single transaction
223224pub fn batch_update_profiles (
224225 env : & Env ,
225- updates : Vec < ( Address , String , u32 ) > ,
226+ updates : Vec < ( Address , String , u32 , u32 ) > ,
226227) -> Result < ( ) , RegistryError > {
227228 // Limit batch size to prevent DoS
228229 if updates. len ( ) > 20 {
@@ -233,7 +234,7 @@ pub fn batch_update_profiles(
233234 admin. require_auth ( ) ;
234235
235236 for update in updates {
236- let ( expert, new_uri, status_u32) = update;
237+ let ( expert, new_uri, status_u32, category_id ) = update;
237238
238239 // Validate URI length
239240 if new_uri. len ( ) > 64 {
@@ -249,7 +250,7 @@ pub fn batch_update_profiles(
249250 } ;
250251
251252 // Update the expert record
252- storage:: set_expert_record ( env, & expert, status, new_uri) ;
253+ storage:: set_expert_record ( env, & expert, status, new_uri, category_id ) ;
253254 }
254255
255256 Ok ( ( ) )
0 commit comments