@@ -283,24 +283,32 @@ def create(self, request: Any) -> Response:
283
283
adapter_metadata_b = serializer .validated_data .get (AdapterKeys .ADAPTER_METADATA_B )
284
284
decrypted_metadata = self ._decrypt_and_validate_metadata (adapter_metadata_b )
285
285
286
- # Validate URLs for security
286
+ # Validate URLs for security (pre-mutation)
287
287
self ._validate_adapter_urls (adapter_id , decrypted_metadata )
288
288
289
289
try :
290
290
adapter_type = serializer .validated_data .get (AdapterKeys .ADAPTER_TYPE )
291
291
292
292
# Update metadata if using platform key
293
293
if use_platform_unstract_key :
294
- self ._update_metadata_for_platform_key (
294
+ updated_b = self ._update_metadata_for_platform_key (
295
295
serializer .validated_data , adapter_type
296
296
)
297
+ if updated_b is not None :
298
+ # Re-validate post-mutation metadata before save
299
+ final_md = self ._decrypt_and_validate_metadata (updated_b )
300
+ self ._validate_adapter_urls (adapter_id , final_md )
297
301
298
302
# Save the adapter instance
299
303
instance = serializer .save ()
300
304
301
305
# Set as default adapter if needed
302
306
self ._set_default_adapter_if_needed (instance , adapter_type , request .user .id )
303
307
308
+ except IntegrityError as e :
309
+ raise DuplicateAdapterNameError (
310
+ name = serializer .validated_data .get (AdapterKeys .ADAPTER_NAME )
311
+ ) from e
304
312
except IntegrityError :
305
313
raise DuplicateAdapterNameError (
306
314
name = serializer .validated_data .get (AdapterKeys .ADAPTER_NAME )
0 commit comments