mirror of
				https://github.com/juspay/hyperswitch.git
				synced 2025-11-01 02:57:02 +08:00 
			
		
		
		
	feat(router): added api for the deleting config key (#3554)
Co-authored-by: Kartikeya Hegde <karthihegde010@gmail.com> Co-authored-by: dracarys18 <karthikey.hegde@juspay.in>
This commit is contained in:
		| @ -50,8 +50,11 @@ impl Config { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     #[instrument(skip(conn))] |     #[instrument(skip(conn))] | ||||||
|     pub async fn delete_by_key(conn: &PgPooledConn, key: &str) -> StorageResult<bool> { |     pub async fn delete_by_key(conn: &PgPooledConn, key: &str) -> StorageResult<Self> { | ||||||
|         generics::generic_delete::<<Self as HasTable>::Table, _>(conn, dsl::key.eq(key.to_owned())) |         generics::generic_delete_one_with_result::<<Self as HasTable>::Table, _, _>( | ||||||
|             .await |             conn, | ||||||
|  |             dsl::key.eq(key.to_owned()), | ||||||
|  |         ) | ||||||
|  |         .await | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -41,3 +41,12 @@ pub async fn update_config( | |||||||
|         .to_not_found_response(errors::ApiErrorResponse::ConfigNotFound)?; |         .to_not_found_response(errors::ApiErrorResponse::ConfigNotFound)?; | ||||||
|     Ok(ApplicationResponse::Json(config.foreign_into())) |     Ok(ApplicationResponse::Json(config.foreign_into())) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | pub async fn config_delete(state: AppState, key: String) -> RouterResponse<api::Config> { | ||||||
|  |     let store = state.store.as_ref(); | ||||||
|  |     let config = store | ||||||
|  |         .delete_config_by_key(&key) | ||||||
|  |         .await | ||||||
|  |         .to_not_found_response(errors::ApiErrorResponse::ConfigNotFound)?; | ||||||
|  |     Ok(ApplicationResponse::Json(config.foreign_into())) | ||||||
|  | } | ||||||
|  | |||||||
| @ -51,7 +51,10 @@ pub trait ConfigInterface { | |||||||
|         config_update: storage::ConfigUpdate, |         config_update: storage::ConfigUpdate, | ||||||
|     ) -> CustomResult<storage::Config, errors::StorageError>; |     ) -> CustomResult<storage::Config, errors::StorageError>; | ||||||
|  |  | ||||||
|     async fn delete_config_by_key(&self, key: &str) -> CustomResult<bool, errors::StorageError>; |     async fn delete_config_by_key( | ||||||
|  |         &self, | ||||||
|  |         key: &str, | ||||||
|  |     ) -> CustomResult<storage::Config, errors::StorageError>; | ||||||
| } | } | ||||||
|  |  | ||||||
| #[async_trait::async_trait] | #[async_trait::async_trait] | ||||||
| @ -154,7 +157,10 @@ impl ConfigInterface for Store { | |||||||
|         cache::get_or_populate_in_memory(self, key, find_else_unwrap_or, &CONFIG_CACHE).await |         cache::get_or_populate_in_memory(self, key, find_else_unwrap_or, &CONFIG_CACHE).await | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     async fn delete_config_by_key(&self, key: &str) -> CustomResult<bool, errors::StorageError> { |     async fn delete_config_by_key( | ||||||
|  |         &self, | ||||||
|  |         key: &str, | ||||||
|  |     ) -> CustomResult<storage::Config, errors::StorageError> { | ||||||
|         let conn = connection::pg_connection_write(self).await?; |         let conn = connection::pg_connection_write(self).await?; | ||||||
|         let deleted = storage::Config::delete_by_key(&conn, key) |         let deleted = storage::Config::delete_by_key(&conn, key) | ||||||
|             .await |             .await | ||||||
| @ -226,15 +232,15 @@ impl ConfigInterface for MockDb { | |||||||
|         result |         result | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     async fn delete_config_by_key(&self, key: &str) -> CustomResult<bool, errors::StorageError> { |     async fn delete_config_by_key( | ||||||
|  |         &self, | ||||||
|  |         key: &str, | ||||||
|  |     ) -> CustomResult<storage::Config, errors::StorageError> { | ||||||
|         let mut configs = self.configs.lock().await; |         let mut configs = self.configs.lock().await; | ||||||
|         let result = configs |         let result = configs | ||||||
|             .iter() |             .iter() | ||||||
|             .position(|c| c.key == key) |             .position(|c| c.key == key) | ||||||
|             .map(|index| { |             .map(|index| configs.remove(index)) | ||||||
|                 configs.remove(index); |  | ||||||
|                 true |  | ||||||
|             }) |  | ||||||
|             .ok_or_else(|| { |             .ok_or_else(|| { | ||||||
|                 errors::StorageError::ValueNotFound("cannot find config to delete".to_string()) |                 errors::StorageError::ValueNotFound("cannot find config to delete".to_string()) | ||||||
|                     .into() |                     .into() | ||||||
|  | |||||||
| @ -284,7 +284,10 @@ impl ConfigInterface for KafkaStore { | |||||||
|             .await |             .await | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     async fn delete_config_by_key(&self, key: &str) -> CustomResult<bool, errors::StorageError> { |     async fn delete_config_by_key( | ||||||
|  |         &self, | ||||||
|  |         key: &str, | ||||||
|  |     ) -> CustomResult<storage::Config, errors::StorageError> { | ||||||
|         self.diesel_store.delete_config_by_key(key).await |         self.diesel_store.delete_config_by_key(key).await | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | |||||||
| @ -813,7 +813,8 @@ impl Configs { | |||||||
|             .service( |             .service( | ||||||
|                 web::resource("/{key}") |                 web::resource("/{key}") | ||||||
|                     .route(web::get().to(config_key_retrieve)) |                     .route(web::get().to(config_key_retrieve)) | ||||||
|                     .route(web::post().to(config_key_update)), |                     .route(web::post().to(config_key_update)) | ||||||
|  |                     .route(web::delete().to(config_key_delete)), | ||||||
|             ) |             ) | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -71,3 +71,24 @@ pub async fn config_key_update( | |||||||
|     ) |     ) | ||||||
|     .await |     .await | ||||||
| } | } | ||||||
|  |  | ||||||
|  | #[instrument(skip_all, fields(flow = ?Flow::ConfigKeyDelete))] | ||||||
|  | pub async fn config_key_delete( | ||||||
|  |     state: web::Data<AppState>, | ||||||
|  |     req: HttpRequest, | ||||||
|  |     path: web::Path<String>, | ||||||
|  | ) -> impl Responder { | ||||||
|  |     let flow = Flow::ConfigKeyDelete; | ||||||
|  |     let key = path.into_inner(); | ||||||
|  |  | ||||||
|  |     api::server_wrap( | ||||||
|  |         flow, | ||||||
|  |         state, | ||||||
|  |         &req, | ||||||
|  |         key, | ||||||
|  |         |state, _, key| configs::config_delete(state, key), | ||||||
|  |         &auth::AdminApiAuth, | ||||||
|  |         api_locking::LockAction::NotApplicable, | ||||||
|  |     ) | ||||||
|  |     .await | ||||||
|  | } | ||||||
|  | |||||||
| @ -74,6 +74,7 @@ impl From<Flow> for ApiIdentifier { | |||||||
|             Flow::ConfigKeyCreate |             Flow::ConfigKeyCreate | ||||||
|             | Flow::ConfigKeyFetch |             | Flow::ConfigKeyFetch | ||||||
|             | Flow::ConfigKeyUpdate |             | Flow::ConfigKeyUpdate | ||||||
|  |             | Flow::ConfigKeyDelete | ||||||
|             | Flow::CreateConfigKey => Self::Configs, |             | Flow::CreateConfigKey => Self::Configs, | ||||||
|  |  | ||||||
|             Flow::CustomersCreate |             Flow::CustomersCreate | ||||||
|  | |||||||
| @ -82,6 +82,8 @@ pub enum Flow { | |||||||
|     ConfigKeyFetch, |     ConfigKeyFetch, | ||||||
|     /// ConfigKey Update flow. |     /// ConfigKey Update flow. | ||||||
|     ConfigKeyUpdate, |     ConfigKeyUpdate, | ||||||
|  |     /// ConfigKey Delete flow. | ||||||
|  |     ConfigKeyDelete, | ||||||
|     /// Customers create flow. |     /// Customers create flow. | ||||||
|     CustomersCreate, |     CustomersCreate, | ||||||
|     /// Customers retrieve flow. |     /// Customers retrieve flow. | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user
	 Tanbir Ali
					Tanbir Ali