Issue:
refactor: add billing and shipping details to payment method data

### Feature Description

linking #347 for reference. Since the billing and shipping address used for payment should be stored in `basillisk` as per the discussion we had. This is to avoid 
- Any PII information to be stored in db which will be used for payments.
- Avoid changes to payments if the address table undergoes any major changes ( like encryption ).

### Possible Implementation
- [ ] Have a struct under `payment_method_data.pay_later` that will have all billing and shipping related data required for payments. All paylater payments will have the mandatory details of address taken from here.
- [ ] Save pay_later data in `basillisk`.
- [ ] Add  `payment_method_issuer` and `payment_experience` in `payment_attempt`. This will be used to decide which issuer the payment has to go through and what should be the experience ( either sdk flow or redirection flow ). 


### 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?

None

Resolution:
<think>
PR Context:
- Title: refactor: add payment_issuer and payment_experience in pa
- Merged: 2023-02-19T14:30:41Z
- Files changed: 30 files
- Commits: 30 commits

Implementation approach:
## Type of Change
<!-- Put an `x` in the boxes that apply -->

- [x] New feature

## Description
<!-- Describe your changes in detail -->
Add `payment_issuer` and `payment_experience` to payment_attempt table. The pay_later issuer will be decided based on this.

a small example of how this could and will be used.
if payment_issuer is `klarna` and payment_experience is `redirect_to_url` then klarna payment will be processed through `stripe` or any supported connector, but if the payment
</think>

To implement this, you'll need to modify:


**Detailed Implementation:**


**Commit 1:** refactor: add payment_issuer and payment_experience in pa (#491)
Files to modify:


**crates/api_models/src/admin.rs**
  Modify existing code

**crates/api_models/src/enums.rs**
  Add:
    - enum: pub::PaymentIssuer
    - enum: pub::PaymentExperience

**crates/api_models/src/payment_methods.rs**
  Remove:
    - enum: pub::PaymentExperience

**crates/api_models/src/payments.rs**
  Modify existing code

**crates/common_utils/src/custom_serde.rs**
  Modify existing code

**crates/router/src/connector/aci/transformers.rs**
  Modify existing code

**crates/router/src/connector/adyen/transformers.rs**
  Modify existing code

**crates/router/src/connector/authorizedotnet/transformers.rs**
  Modify existing code

**crates/router/src/connector/braintree/transformers.rs**
  Modify existing code

**crates/router/src/connector/checkout/transformers.rs**
  Modify existing code

**crates/router/src/connector/cybersource/transformers.rs**
  Modify existing code

**crates/router/src/connector/fiserv/transformers.rs**
  Modify existing code

**crates/router/src/connector/globalpay/transformers.rs**
  Modify existing code

**crates/router/src/connector/klarna.rs**
  Modify existing code

**crates/router/src/connector/klarna/transformers.rs**
  Modify existing code

**crates/router/src/connector/payu/transformers.rs**
  Modify existing code

**crates/router/src/connector/rapyd/transformers.rs**
  Modify existing code

**crates/router/src/connector/shift4/transformers.rs**
  Modify existing code

**crates/router/src/connector/stripe/transformers.rs**
  Remove:
    - impl: impl TryFrom<(api::PaymentMethod, enums::AuthenticationType)> for StripePaymentMethodData
  Add:
    - function: private::infer_stripe_pay_later_issuer
    - function: private::try_from
    - function: private::create_stripe_payment_method
    - struct: pub::StripeBillingAddress
    - impl: impl TryFrom<(&api_models::payments::PayLaterData, StripePaymentMethodType)> for StripeBillingAddress
    - impl: impl TryFrom<(
        api::PaymentMethod,
        enums::AuthenticationType,
        StripePaymentMethodType,
    )> for StripePaymentMethodData

**crates/router/src/connector/worldline/transformers.rs**
  Modify existing code

**crates/router/src/connector/worldpay.rs**
  Modify existing code

**crates/router/src/connector/worldpay/transformers.rs**
  Modify existing code

**crates/router/src/core/errors.rs**
  Modify existing code

**crates/router/src/core/errors/utils.rs**
  Modify existing code

**crates/router/src/core/payment_methods/cards.rs**
  Modify existing code

**crates/router/src/core/payment_methods/transformers.rs**
  Modify existing code

**crates/router/src/core/payments/operations/payment_create.rs**
  Modify existing code

**crates/router/src/core/payments/operations/payment_response.rs**
  Modify existing code

**crates/router/src/core/payments/transformers.rs**
  Modify existing code

**crates/router/src/db/payment_attempt.rs**
  Modify existing code

**crates/router/src/openapi.rs**
  Modify existing code

**crates/router/src/types.rs**
  Modify existing code

**crates/router/src/types/transformers.rs**
  Remove:
    - function: private::from
    - function: private::from
    - impl: impl From<F<api_enums::RoutingAlgorithm>> for F<storage_enums::RoutingAlgorithm>
    - impl: impl From<F<storage_enums::RoutingAlgorithm>> for F<api_enums::RoutingAlgorithm>
  Add:
    - function: private::from
    - function: private::from
    - impl: impl From<F<api_enums::PaymentIssuer>> for F<storage_enums::PaymentIssuer>
    - impl: impl From<F<api_enums::PaymentExperience>> for F<storage_enums::PaymentExperience>

**crates/router/tests/connectors/aci.rs**
  Modify existing code

**crates/router/tests/connectors/adyen.rs**
  Modify existing code

**crates/router/tests/connectors/authorizedotnet.rs**
  Modify existing code

**crates/router/tests/connectors/checkout.rs**
  Modify existing code

**crates/router/tests/connectors/utils.rs**
  Modify existing code

**crates/router/tests/connectors/worldline.rs**
  Modify existing code

**crates/router/tests/payments.rs**
  Modify existing code

**crates/router/tests/payments2.rs**
  Modify existing code

**crates/router_derive/src/lib.rs**
  Add:
    - function: pub::diesel_enum_derive_string

**crates/router_derive/src/macros.rs**
  Modify existing code

**crates/router_derive/src/macros/diesel.rs**
  Add:
    - function: pub::diesel_enum_text_derive_inner
    - enum: private::StorageType

**crates/storage_models/src/enums.rs**
  Remove:
    - enum: pub::PaymentFlow
    - enum: pub::RoutingAlgorithm
  Add:
    - enum: pub::MandateType
    - enum: pub::PaymentExperience

**crates/storage_models/src/payment_attempt.rs**
  Modify existing code

**crates/storage_models/src/schema.rs**
  Modify existing code