Bug: [REFACTOR]: Field Type for OpenBankingUk Payment Method



### :memo: Feature Description
- In OpenBankingUk, we had two fields issuer and country. As of now these are mandatory fields. But these fields are not required for all the connector, as I came with connector Volt which don't need these fields in their request .



### :hammer: Possible Implementation

- We can make this fields optional and handle the cases accordingly for the connectors which already has `open_banking_uk`


### :package: Have you spent some time checking if this feature request has been raised before?

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

### :package: Have you read the Contributing Guidelines?

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

### :sparkles: Are you willing to submit a PR?
Yes
diff --git a/crates/api_models/src/payments.rs b/crates/api_models/src/payments.rs
index bd4c59211e2..5ecbf795ac5 100644
--- a/crates/api_models/src/payments.rs
+++ b/crates/api_models/src/payments.rs
@@ -1204,10 +1204,10 @@ pub enum BankRedirectData {
     OpenBankingUk {
         // Issuer banks
         #[schema(value_type = BankNames)]
-        issuer: api_enums::BankNames,
+        issuer: Option<api_enums::BankNames>,
         /// The country for bank payment
         #[schema(value_type = CountryAlpha2, example = "US")]
-        country: api_enums::CountryAlpha2,
+        country: Option<api_enums::CountryAlpha2>,
     },
     Przelewy24 {
         //Issuer banks
diff --git a/crates/router/src/connector/adyen/transformers.rs b/crates/router/src/connector/adyen/transformers.rs
index cfa60111267..4b3fcc85132 100644
--- a/crates/router/src/connector/adyen/transformers.rs
+++ b/crates/router/src/connector/adyen/transformers.rs
@@ -879,7 +879,126 @@ impl TryFrom<&api_enums::BankNames> for OpenBankingUKIssuer {
             api::enums::BankNames::TsbBank => Ok(Self::TsbBank),
             api::enums::BankNames::TescoBank => Ok(Self::TescoBank),
             api::enums::BankNames::UlsterBank => Ok(Self::UlsterBank),
-            _ => Err(errors::ConnectorError::NotSupported {
+            enums::BankNames::AmericanExpress
+            | enums::BankNames::AffinBank
+            | enums::BankNames::AgroBank
+            | enums::BankNames::AllianceBank
+            | enums::BankNames::AmBank
+            | enums::BankNames::BankOfAmerica
+            | enums::BankNames::BankIslam
+            | enums::BankNames::BankMuamalat
+            | enums::BankNames::BankRakyat
+            | enums::BankNames::BankSimpananNasional
+            | enums::BankNames::BlikPSP
+            | enums::BankNames::CapitalOne
+            | enums::BankNames::Chase
+            | enums::BankNames::Citi
+            | enums::BankNames::CimbBank
+            | enums::BankNames::Discover
+            | enums::BankNames::NavyFederalCreditUnion
+            | enums::BankNames::PentagonFederalCreditUnion
+            | enums::BankNames::SynchronyBank
+            | enums::BankNames::WellsFargo
+            | enums::BankNames::AbnAmro
+            | enums::BankNames::AsnBank
+            | enums::BankNames::Bunq
+            | enums::BankNames::Handelsbanken
+            | enums::BankNames::HongLeongBank
+            | enums::BankNames::Ing
+            | enums::BankNames::Knab
+            | enums::BankNames::KuwaitFinanceHouse
+            | enums::BankNames::Moneyou
+            | enums::BankNames::Rabobank
+            | enums::BankNames::Regiobank
+            | enums::BankNames::SnsBank
+            | enums::BankNames::TriodosBank
+            | enums::BankNames::VanLanschot
+            | enums::BankNames::ArzteUndApothekerBank
+            | enums::BankNames::AustrianAnadiBankAg
+            | enums::BankNames::BankAustria
+            | enums::BankNames::Bank99Ag
+            | enums::BankNames::BankhausCarlSpangler
+            | enums::BankNames::BankhausSchelhammerUndSchatteraAg
+            | enums::BankNames::BankMillennium
+            | enums::BankNames::BankPEKAOSA
+            | enums::BankNames::BawagPskAg
+            | enums::BankNames::BksBankAg
+            | enums::BankNames::BrullKallmusBankAg
+            | enums::BankNames::BtvVierLanderBank
+            | enums::BankNames::CapitalBankGraweGruppeAg
+            | enums::BankNames::CeskaSporitelna
+            | enums::BankNames::Dolomitenbank
+            | enums::BankNames::EasybankAg
+            | enums::BankNames::EPlatbyVUB
+            | enums::BankNames::ErsteBankUndSparkassen
+            | enums::BankNames::FrieslandBank
+            | enums::BankNames::HypoAlpeadriabankInternationalAg
+            | enums::BankNames::HypoNoeLbFurNiederosterreichUWien
+            | enums::BankNames::HypoOberosterreichSalzburgSteiermark
+            | enums::BankNames::HypoTirolBankAg
+            | enums::BankNames::HypoVorarlbergBankAg
+            | enums::BankNames::HypoBankBurgenlandAktiengesellschaft
+            | enums::BankNames::KomercniBanka
+            | enums::BankNames::MBank
+            | enums::BankNames::MarchfelderBank
+            | enums::BankNames::Maybank
+            | enums::BankNames::OberbankAg
+            | enums::BankNames::OsterreichischeArzteUndApothekerbank
+            | enums::BankNames::OcbcBank
+            | enums::BankNames::PayWithING
+            | enums::BankNames::PlaceZIPKO
+            | enums::BankNames::PlatnoscOnlineKartaPlatnicza
+            | enums::BankNames::PosojilnicaBankEGen
+            | enums::BankNames::PostovaBanka
+            | enums::BankNames::PublicBank
+            | enums::BankNames::RaiffeisenBankengruppeOsterreich
+            | enums::BankNames::RhbBank
+            | enums::BankNames::SchelhammerCapitalBankAg
+            | enums::BankNames::StandardCharteredBank
+            | enums::BankNames::SchoellerbankAg
+            | enums::BankNames::SpardaBankWien
+            | enums::BankNames::SporoPay
+            | enums::BankNames::TatraPay
+            | enums::BankNames::Viamo
+            | enums::BankNames::VolksbankGruppe
+            | enums::BankNames::VolkskreditbankAg
+            | enums::BankNames::VrBankBraunau
+            | enums::BankNames::UobBank
+            | enums::BankNames::PayWithAliorBank
+            | enums::BankNames::BankiSpoldzielcze
+            | enums::BankNames::PayWithInteligo
+            | enums::BankNames::BNPParibasPoland
+            | enums::BankNames::BankNowySA
+            | enums::BankNames::CreditAgricole
+            | enums::BankNames::PayWithBOS
+            | enums::BankNames::PayWithCitiHandlowy
+            | enums::BankNames::PayWithPlusBank
+            | enums::BankNames::ToyotaBank
+            | enums::BankNames::VeloBank
+            | enums::BankNames::ETransferPocztowy24
+            | enums::BankNames::PlusBank
+            | enums::BankNames::EtransferPocztowy24
+            | enums::BankNames::BankiSpbdzielcze
+            | enums::BankNames::BankNowyBfgSa
+            | enums::BankNames::GetinBank
+            | enums::BankNames::Blik
+            | enums::BankNames::NoblePay
+            | enums::BankNames::IdeaBank
+            | enums::BankNames::EnveloBank
+            | enums::BankNames::NestPrzelew
+            | enums::BankNames::MbankMtransfer
+            | enums::BankNames::Inteligo
+            | enums::BankNames::PbacZIpko
+            | enums::BankNames::BnpParibas
+            | enums::BankNames::BankPekaoSa
+            | enums::BankNames::VolkswagenBank
+            | enums::BankNames::AliorBank
+            | enums::BankNames::Boz
+            | enums::BankNames::BangkokBank
+            | enums::BankNames::KrungsriBank
+            | enums::BankNames::KrungThaiBank
+            | enums::BankNames::TheSiamCommercialBank
+            | enums::BankNames::KasikornBank => Err(errors::ConnectorError::NotSupported {
                 message: String::from("BankRedirect"),
                 connector: "Adyen",
             })?,
@@ -2102,7 +2221,12 @@ impl<'a> TryFrom<&api_models::payments::BankRedirectData> for AdyenPaymentMethod
             ),
             api_models::payments::BankRedirectData::OpenBankingUk { issuer, .. } => Ok(
                 AdyenPaymentMethod::OpenBankingUK(Box::new(OpenBankingUKData {
-                    issuer: OpenBankingUKIssuer::try_from(issuer)?,
+                    issuer: match issuer {
+                        Some(bank_name) => OpenBankingUKIssuer::try_from(bank_name)?,
+                        None => Err(errors::ConnectorError::MissingRequiredField {
+                            field_name: "issuer",
+                        })?,
+                    },
                 })),
             ),
             api_models::payments::BankRedirectData::Sofort { .. } => Ok(AdyenPaymentMethod::Sofort),
@@ -2580,7 +2704,7 @@ impl<'a>
         let additional_data = get_additional_data(item.router_data);
         let return_url = item.router_data.request.get_return_url()?;
         let payment_method = AdyenPaymentMethod::try_from(bank_redirect_data)?;
-        let (shopper_locale, country) = get_redirect_extra_details(item.router_data);
+        let (shopper_locale, country) = get_redirect_extra_details(item.router_data)?;
         let line_items = Some(get_line_items(item));
 
         Ok(AdyenPaymentRequest {
@@ -2611,7 +2735,7 @@ impl<'a>
 
 fn get_redirect_extra_details(
     item: &types::PaymentsAuthorizeRouterData,
-) -> (Option<String>, Option<api_enums::CountryAlpha2>) {
+) -> Result<(Option<String>, Option<api_enums::CountryAlpha2>), errors::ConnectorError> {
     match item.request.payment_method_data {
         api_models::payments::PaymentMethodData::BankRedirect(ref redirect_data) => {
             match redirect_data {
@@ -2619,17 +2743,20 @@ fn get_redirect_extra_details(
                     country,
                     preferred_language,
                     ..
-                } => (
+                } => Ok((
                     Some(preferred_language.to_string()),
                     Some(country.to_owned()),
-                ),
+                )),
                 api_models::payments::BankRedirectData::OpenBankingUk { country, .. } => {
-                    (None, Some(country.to_owned()))
+                    let country = country.ok_or(errors::ConnectorError::MissingRequiredField {
+                        field_name: "country",
+                    })?;
+                    Ok((None, Some(country)))
                 }
-                _ => (None, None),
+                _ => Ok((None, None)),
             }
         }
-        _ => (None, None),
+        _ => Ok((None, None)),
     }
 }
 

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

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

## Description
In OpenBankingUk, we had two fields issuer and country. But these fields are not required for all the connector, I came with connector Volt which don't need these fields in their request so I made these fields optional.

### 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?
Using Postman

## Test cases
Test ` Open_banking_uk `for Volt and Adyen Coonector. 

Curl For Open Banking Uk for Adyen:
`{
    "amount": 6540,
    "currency": "GBP",
    "confirm": true,
    "capture_method": "automatic",
    "capture_on": "2022-09-10T10:11:12Z",
    "amount_to_capture": 6540,
    "customer_id": "StripeCustomer",
    "email": "guest@example.com",
    "name": "John Doe",
    "phone": "999999999",
    "phone_country_code": "+1",
    "description": "Its my first payment request",
    "authentication_type": "no_three_ds",
    "return_url": "https://google.com/",
    "payment_method": "bank_redirect",
    "payment_method_type": "open_banking_uk",
    "payment_method_data": {
        "bank_redirect": {
            "open_banking_uk": {
                "issuer": "open_bank_success",
                "country": "GB"
            }
        }
    },
    "billing": {
        "address": {
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "city": "San Fransico",
            "state": "California",
            "zip": "94122",
            "country": "GB",
            "first_name": "joseph",
            "last_name": "Doe"
        },
        "phone": {
            "number": "8056594427",
            "country_code": "+91"
        }
    },
    "browser_info": {
        "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36",
        "accept_header": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
        "language": "nl-NL",
        "color_depth": 24,
        "screen_height": 723,
        "screen_width": 1536,
        "time_zone": 0,
        "java_enabled": true,
        "java_script_enabled": true,
        "ip_address": "127.0.0.1"
    },
    "shipping": {
        "address": {
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "city": "San Fransico",
            "state": "California",
            "zip": "94122",
            "country": "GB",
            "first_name": "joseph",
            "last_name": "Doe"
        },
        "phone": {
            "number": "8056594427",
            "country_code": "+91"
        }
    },
    "statement_descriptor_name": "joseph",
    "statement_descriptor_suffix": "JS",
    "metadata": {
        "udf1": "value1",
        "new_customer": "true",
        "login_date": "2019-09-10T10:11:12Z"
    }
}`
## 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
- [ ] I added a [CHANGELOG](/CHANGELOG.md) entry if applicable
