feat(payments_v2): implement create and confirm intent flow

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

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

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

This PR introduces a new endpoint that handles payments create intent v2 and confirm intent v2 steps. Note that the API contract is not finalized and is possibly subject to change.

Additionally, the endpoint can also call the setup intent flow, if the order amount is zero. This is done so as to allow the payment methods v2 endpoints to create multiple-use tokens for a specified customer's payment method.

### Additional Changes

- [x] 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`
-->

This PR introduces a new endpoint for payments v2, that can handle create intent and confirm intent steps.

## 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).
-->

The endpoint introduced in this PR would allow the creation of multiple-use tokens by the payments methods v2 endpoints.

## 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. Using the v2 endpoints, create an organization, merchant account, profile, API key and merchant connector account.

2. Call the setup intent endpoint:

   - Since the request body is a union of the payment create intent v2 and payment confirm intent v2 request bodies, the required fields for this endpoint are `amount_details`, `payment_method_data`, `payment_method_type` and `payment_method_subtype`.

   The request and response are included below:

   ```shell
   $ curl --location 'http://localhost:8080/v2/payments' \
       --header 'x-profile-id: pro_9UhMqBMEOooRIvJFFdeW' \
       --header 'Content-Type: application/json' \
       --header 'api-key: <API key>' \
       --data '{
           "amount_details": {
               "order_amount": 0,
               "currency": "USD"
           },
           "payment_method_data": {
               "card": {
                   "card_number": "4242424242424242",
                   "card_exp_month": "01",
                   "card_exp_year": "25",
                   "card_holder_name": "John Doe",
                   "card_cvc": "100"
               }
           },
           "payment_method_type": "card",
           "payment_method_subtype": "credit"
       }'
   {
       "id": "12345_pay_0194aedd2b087ec1a960242f3ad8f2c1",
       "status": "succeeded",
       "amount": {
           "order_amount": 0,
           "currency": "USD",
           "shipping_cost": null,
           "order_tax_amount": null,
           "external_tax_calculation": "skip",
           "surcharge_calculation": "skip",
           "surcharge_amount": null,
           "tax_on_surcharge": null,
           "net_amount": 0,
           "amount_to_capture": null,
           "amount_capturable": 0,
           "amount_captured": 0
       },
       "customer_id": null,
       "connector": "stripe",
       "client_secret": "12345_pay_0194aedd2b087ec1a960242f3ad8f2c1_secret_0194aedd2b127f6190e5090a1527ad3e",
       "created": "2025-01-28T21:41:57.650Z",
       "payment_method_data": {
           "billing": null
       },
       "payment_method_type": "card",
       "payment_method_subtype": "credit",
       "next_action": null,
       "connector_transaction_id": "seti_1QmMXiD5R7gDAGffKPUlM0HT",
       "connector_reference_id": null,
       "connector_token_details": {
           "token": "pm_1QmMXiD5R7gDAGffCf03AULQ"
       },
       "merchant_connector_id": "mca_oC8RE28uRRcVKDjgwfzG",
       "browser_info": null,
       "error": null
   }
   ```

   - Note that the `order_amount` is zero in the above request. Also, note that the `connector_token_details.token` field is populated in the response, and the `connector_transaction_id` being `seti_*` indicates that Stripe's setup intent flow was called.

   - Additional fields may be passed in the request, such as `customer_id`, etc. which would be reflected in the response and database entries.

   - Passing in a non-zero value for the `order_amount` causes it to follow the regular create intent + confirm intent flow:

   ```shell
   $ curl --location 'http://localhost:8080/v2/payments' \
   --header 'x-profile-id: pro_9UhMqBMEOooRIvJFFdeW' \
   --header 'Content-Type: application/json' \
   --header 'api-key: <API key>' \
   --data '{
       "amount_details": {
           "order_amount": 6540,
           "currency": "USD"
       },
       "payment_method_data": {
           "card": {
               "card_number": "4242424242424242",
               "card_exp_month": "01",
               "card_exp_year": "25",
               "card_holder_name": "John Doe",
               "card_cvc": "100"
           }
       },
       "payment_method_type": "card",
       "payment_method_subtype": "credit"
   }'
   {
       "id": "12345_pay_0194aedff4c57e008edc28cbd3881dee",
       "status": "succeeded",
       "amount": {
           "order_amount": 6540,
           "currency": "USD",
           "shipping_cost": null,
           "order_tax_amount": null,
           "external_tax_calculation": "skip",
           "surcharge_calculation": "skip",
           "surcharge_amount": null,
           "tax_on_surcharge": null,
           "net_amount": 6540,
           "amount_to_capture": null,
           "amount_capturable": 0,
           "amount_captured": 6540
       },
       "customer_id": null,
       "connector": "stripe",
       "client_secret": "12345_pay_0194aedff4c57e008edc28cbd3881dee_secret_0194aedff4cc719381629d4aacf19adb",
       "created": "2025-01-28T21:45:00.364Z",
       "payment_method_data": {
           "billing": null
       },
       "payment_method_type": "card",
       "payment_method_subtype": "credit",
       "next_action": null,
       "connector_transaction_id": "pi_3QmMaeD5R7gDAGff0GRZPicn",
       "connector_reference_id": null,
       "connector_token_details": {
           "token": "pm_1QmMaeD5R7gDAGffZenIs1fg"
       },
       "merchant_connector_id": "mca_oC8RE28uRRcVKDjgwfzG",
       "browser_info": null,
       "error": null
   }
   ```

   In this case, the `connector_transaction_id` is `pi_*`, indicating that Stripe's authorize flow was called.

## 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

<think>
PR Context:
- Title: feat(router): [V2] Return connector customer reference IDs in `CustomerResponse`
- Merged: 2025-03-21T13:58:53Z
- Files changed: 8 files
- Commits: 8 commits

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

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

## Description
<!-- Describe your changes in detail -->
Add a field `connector_customer` to `CustomerResponse` that contains a map between `MerchantConnectorAccountId` and connector customer id

### Additional Changes

- [x] This PR modifies the API contract
- [ ] This PR modifies the database
</think>

To implement this, you'll need to modify:


**Detailed Implementation:**


**Commit 1:** feat(router): [V2] Return connector customer reference IDs in `CustomerResponse` (#7319)
Co-authored
Files to modify:


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

**crates/common_types/src/customers.rs**
  Add:
    - function: private::deref
    - function: private::deref_mut
    - struct: pub::ConnectorCustomerMap
    - impl: impl std::ops::Deref for ConnectorCustomerMap
    - impl: impl std::ops::DerefMut for ConnectorCustomerMap

**crates/common_types/src/lib.rs**
  Add:
    - mod: pub::customers

**crates/diesel_models/src/customers.rs**
  Remove:
    - function: private::deref
    - function: private::deref_mut
    - struct: pub::ConnectorCustomerMap
    - impl: impl std::ops::Deref for ConnectorCustomerMap
    - impl: impl std::ops::DerefMut for ConnectorCustomerMap

**crates/hyperswitch_domain_models/src/customer.rs**
  Modify existing code

**crates/router/src/types/api/customers.rs**
  Modify existing code
{"issue_number": 7106, "pr_number": 7319, "commits_count": 1, "files_changed": 8, "response_length": 1761, "file_count": 8, "needs_breakdown": false}