Bug: [FEATURE] add `set_config` route the the configs API



### Feature Description

Currently, API provided are retrieve config and update config. But, inherently there is not way provided to add a config externally. This feature request is to add such a route.

### Possible Implementation

#1144 

### Have you spent some time to check if this feature request has been raised before?

- [X] I checked and didn't find similar issue

### Have you read the Contributing Guidelines?

- [X] I have read the [Contributing Guidelines](https://github.com/juspay/hyperswitch/blob/main/docs/CONTRIBUTING.md)

### Are you willing to submit a PR?

Yes I am willing to submit a PR!
diff --git a/crates/router/src/core/configs.rs b/crates/router/src/core/configs.rs
index b71c31b1043..5f0e7d76c03 100644
--- a/crates/router/src/core/configs.rs
+++ b/crates/router/src/core/configs.rs
@@ -1,3 +1,5 @@
+use error_stack::ResultExt;
+
 use crate::{
     core::errors::{self, utils::StorageErrorExt, RouterResponse},
     db::StorageInterface,
@@ -5,6 +7,22 @@ use crate::{
     types::{api, transformers::ForeignInto},
 };
 
+pub async fn set_config(
+    store: &dyn StorageInterface,
+    config: api::Config,
+) -> RouterResponse<api::Config> {
+    let config = store
+        .insert_config(storage_models::configs::ConfigNew {
+            key: config.key,
+            config: config.value,
+        })
+        .await
+        .change_context(errors::ApiErrorResponse::InternalServerError)
+        .attach_printable("Unknown error, while setting config key")?;
+
+    Ok(ApplicationResponse::Json(config.foreign_into()))
+}
+
 pub async fn read_config(store: &dyn StorageInterface, key: &str) -> RouterResponse<api::Config> {
     let config = store
         .find_config_by_key_cached(key)
diff --git a/crates/router/src/routes/app.rs b/crates/router/src/routes/app.rs
index 06dc810b5d4..74478c73acb 100644
--- a/crates/router/src/routes/app.rs
+++ b/crates/router/src/routes/app.rs
@@ -389,6 +389,7 @@ impl Configs {
     pub fn server(config: AppState) -> Scope {
         web::scope("/configs")
             .app_data(web::Data::new(config))
+            .service(web::resource("/").route(web::post().to(config_key_create)))
             .service(
                 web::resource("/{key}")
                     .route(web::get().to(config_key_retrieve))
diff --git a/crates/router/src/routes/configs.rs b/crates/router/src/routes/configs.rs
index 96c1c5a7db9..16c15db6638 100644
--- a/crates/router/src/routes/configs.rs
+++ b/crates/router/src/routes/configs.rs
@@ -8,6 +8,26 @@ use crate::{
     types::api as api_types,
 };
 
+#[instrument(skip_all, fields(flow = ?Flow::CreateConfigKey))]
+pub async fn config_key_create(
+    state: web::Data<AppState>,
+    req: HttpRequest,
+    json_payload: web::Json<api_types::Config>,
+) -> impl Responder {
+    let flow = Flow::CreateConfigKey;
+    let payload = json_payload.into_inner();
+
+    api::server_wrap(
+        flow,
+        state.get_ref(),
+        &req,
+        payload,
+        |state, _, data| configs::set_config(&*state.store, data),
+        &auth::AdminApiAuth,
+    )
+    .await
+}
+
 #[instrument(skip_all, fields(flow = ?Flow::ConfigKeyFetch))]
 pub async fn config_key_retrieve(
     state: web::Data<AppState>,
diff --git a/crates/router/src/types/api/configs.rs b/crates/router/src/types/api/configs.rs
index 00db2cf4bf5..9e39d5569b0 100644
--- a/crates/router/src/types/api/configs.rs
+++ b/crates/router/src/types/api/configs.rs
@@ -1,4 +1,4 @@
-#[derive(Clone, serde::Serialize, Debug)]
+#[derive(Clone, serde::Serialize, Debug, serde::Deserialize)]
 pub struct Config {
     pub key: String,
     pub value: String,
diff --git a/crates/router_env/src/logger/types.rs b/crates/router_env/src/logger/types.rs
index 96dfb071718..56c91f4ae93 100644
--- a/crates/router_env/src/logger/types.rs
+++ b/crates/router_env/src/logger/types.rs
@@ -176,6 +176,8 @@ pub enum Flow {
     RetrieveFile,
     /// Dispute Evidence submission flow
     DisputesEvidenceSubmit,
+    /// Create Config Key flow
+    CreateConfigKey,
     /// Attach Dispute Evidence flow
     AttachDisputeEvidence,
 }

## Type of Change
<!-- Put an `x` in the boxes that apply -->

- [ ] Bugfix
- [ ] New feature
- [x] Enhancement
- [ ] Refactoring
- [ ] Dependency updates
- [ ] Documentation
- [ ] CI/CD

## Description

Adding an API route to provide ways to add keys and values in database/cache.
Currently, we only have exposed retrieve_config and read_config as possible paths.

<!-- Describe your changes in detail -->


### Additional Changes

- [x] This PR modifies the API contract
adding `POST /config`
payload: `{ key: String, value: String }`

<!-- 
Provide links to the files with corresponding changes.

Following are the paths where you can find config files:
1. `config`
2. `crates/router/src/configs`
3. `loadtest/config`
-->


## Motivation and Context
<!--
Why is this change required? What problem does it solve?
If it fixes an open issue, please link to the issue here.

If you don't have an issue, we'd recommend starting with one first so the PR
can focus on the implementation (unless its an obvious bug or documentation fix
that will have little conversation).
-->


## How did you test it?
<!--
Did you write an integration/unit/API test to verify the code changes?
Or did you test this change manually (provide relevant screenshots)?
-->


## Checklist
<!-- Put an `x` in the boxes that apply -->

- [x] I formatted the code `cargo +nightly fmt --all`
- [x] I addressed lints thrown by `cargo clippy`
- [x] I reviewed submitted code
- [ ] I added unit tests for my changes where possible
- [ ] I added a [CHANGELOG](/CHANGELOG.md) entry if applicable
