Bug: Store `card_cvc` in extended_card_info and extend max ttl



Currently, the extended_card_info payload that is sent to merchant does not contain cvc. Include cvc too in the payload and extend the max ttl for the feature to be 2 hrs (7200 seconds)
diff --git a/crates/api_models/src/admin.rs b/crates/api_models/src/admin.rs
index 75bd2a31d8e..13ad6b282e6 100644
--- a/crates/api_models/src/admin.rs
+++ b/crates/api_models/src/admin.rs
@@ -1113,7 +1113,7 @@ pub struct ExtendedCardInfoConfig {
     #[schema(value_type = String)]
     pub public_key: Secret<String>,
     /// TTL for extended card info
-    #[schema(default = 900, maximum = 3600, value_type = u16)]
+    #[schema(default = 900, maximum = 7200, value_type = u16)]
     #[serde(default)]
     pub ttl_in_secs: TtlForExtendedCardInfo,
 }
@@ -1137,7 +1137,7 @@ impl<'de> Deserialize<'de> for TtlForExtendedCardInfo {
         // Check if value exceeds the maximum allowed
         if value > consts::MAX_TTL_FOR_EXTENDED_CARD_INFO {
             Err(serde::de::Error::custom(
-                "ttl_in_secs must be less than or equal to 3600 (1hr)",
+                "ttl_in_secs must be less than or equal to 7200 (2hrs)",
             ))
         } else {
             Ok(Self(value))
diff --git a/crates/api_models/src/payments.rs b/crates/api_models/src/payments.rs
index 8270ddaf3fe..213330b8e8d 100644
--- a/crates/api_models/src/payments.rs
+++ b/crates/api_models/src/payments.rs
@@ -934,6 +934,10 @@ pub struct ExtendedCardInfo {
     #[schema(value_type = String, example = "John Test")]
     pub card_holder_name: Option<Secret<String>>,
 
+    /// The CVC number for the card
+    #[schema(value_type = String, example = "242")]
+    pub card_cvc: Secret<String>,
+
     /// The name of the issuer of card
     #[schema(example = "chase")]
     pub card_issuer: Option<String>,
@@ -959,6 +963,7 @@ impl From<Card> for ExtendedCardInfo {
             card_exp_month: value.card_exp_month,
             card_exp_year: value.card_exp_year,
             card_holder_name: value.card_holder_name,
+            card_cvc: value.card_cvc,
             card_issuer: value.card_issuer,
             card_network: value.card_network,
             card_type: value.card_type,
diff --git a/crates/common_utils/src/consts.rs b/crates/common_utils/src/consts.rs
index 509056152eb..94b53766db0 100644
--- a/crates/common_utils/src/consts.rs
+++ b/crates/common_utils/src/consts.rs
@@ -82,4 +82,4 @@ pub const DEFAULT_ENABLE_SAVED_PAYMENT_METHOD: bool = false;
 pub const DEFAULT_TTL_FOR_EXTENDED_CARD_INFO: u16 = 15 * 60;
 
 /// Max ttl for Extended card info in redis (in seconds)
-pub const MAX_TTL_FOR_EXTENDED_CARD_INFO: u16 = 60 * 60;
+pub const MAX_TTL_FOR_EXTENDED_CARD_INFO: u16 = 60 * 60 * 2;
diff --git a/openapi/openapi_spec.json b/openapi/openapi_spec.json
index c45a4aaaa10..ec7d820a139 100644
--- a/openapi/openapi_spec.json
+++ b/openapi/openapi_spec.json
@@ -8717,7 +8717,8 @@
           "card_number",
           "card_exp_month",
           "card_exp_year",
-          "card_holder_name"
+          "card_holder_name",
+          "card_cvc"
         ],
         "properties": {
           "card_number": {
@@ -8740,6 +8741,11 @@
             "description": "The card holder's name",
             "example": "John Test"
           },
+          "card_cvc": {
+            "type": "string",
+            "description": "The CVC number for the card",
+            "example": "242"
+          },
           "card_issuer": {
             "type": "string",
             "description": "The name of the issuer of card",
@@ -8786,7 +8792,7 @@
             "format": "int32",
             "description": "TTL for extended card info",
             "default": 900,
-            "maximum": 3600,
+            "maximum": 7200,
             "minimum": 0
           }
         }

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

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

## Description
<!-- Describe your changes in detail -->
This PR includes `card_cvc` field too to be sent to merchant as part of extended card info. Also extends the maximum ttl for the feature from 1hr to 2hr.

### Additional Changes

- [ ] This PR modifies the API contract
- [ ] This PR modifies the database schema
- [ ] This PR modifies application configuration/environment variables

<!--
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 it is 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)?
-->
1. When tried to configure ttl more than 2 hrs

![image](https://github.com/juspay/hyperswitch/assets/70657455/6d000970-fa1f-452f-8d0a-cd02e6a2c054)

2. Extended card info decrypted after storing cvc

![image](https://github.com/juspay/hyperswitch/assets/70657455/19fd9ce4-e4bb-465f-9df2-b54dc3b59e23)


## 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 the submitted code
- [ ] I added unit tests for my changes where possible
