Issue:
refactor(customers_v2): address panics and some bugs in customers v2 endpoints

## Type of Change
<!-- Put an `x` in the boxes that apply -->

- [x] Bugfix
- [ ] New feature
- [ ] Enhancement
- [x] Refactoring
- [ ] Dependency updates
- [ ] Documentation
- [ ] CI/CD

## Description
<!-- Describe your changes in detail -->

This PR addresses panics and some bugs in customers v2 endpoints. This PR includes the following changes:

- Fixes the customers v2 update and retrieve endpoints to use the correct HTTP methods (`PUT` and `GET` respectively).
- Adds the `#[serde(deny_unknown_fields)]` to customer v2 request types.
- Moves the `id` field to be at the beginning of the `CustomerResponse` and `CustomerDeleteResponse` structs, so that the JSON serialization also follows the same.
- Introduces the `GlobalCustomerId` type and updates existing customer v2 (and other v2 modules like payment methods, payments, mandates) to use the `GlobalCustomerId` type instead of strings.
- Removes some of the wrappers around the customer ID types (`CustomerId`, `GlobalId` and `UpdateCustomerId` defined in the `api_models` crate), and implements the methods / traits on the underlying ID types instead.
  - This was done since the underlying ID types and thus the field names differed, and it didn't make much difference as compared to implementing the methods / traits directly on the underlying ID type.
- Removes the `customer_id` / `id` field from `CustomerUpdateRequest` type in both v1 and v2. This field was never expected to be passed in the request body, but only there for the purpose of API events. This PR introduces a `CustomerUpdateRequestInternal` type instead which wraps around the request and the ID type, and is used internally, not part of the public API interface.
- Adds missing pieces of code to have the customers v2 create, retrieve, update, delete, list endpoints working.

### 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`
-->

- Moves the `id` field to be at the beginning of the `CustomerResponse` and `CustomerDeleteResponse` structs.
- Updates the `customer_id` field in the payment methods and payments v2 API types to use `GlobalCustomerId` instead of `CustomerId`.
- Removes the `customer_id` / `id` field from `CustomerUpdateRequest` type in both v1 and v2.
- A few OpenAPI spec related fixes.

## 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 changes included in this PR help ensure that the customers v2 endpoints run without causing panics. This should also help unblock other tasks that depend on the customers 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)?
-->

- Create customer v2:

  ```shell
  curl --location 'http://localhost:8080/v2/customers' \
  --header 'x-profile-id: pro_E6JIGLUJ0YUOCeyhbczu' \
  --header 'Content-Type: application/json' \
  --header 'api-key: dev_fun38x9Yy3LoxGzdu0YK6KwO06xJT9aGfnm52FW6EL8hwNBKSXC3iilT8nDCEfOB' \
  --data-raw '{
      "merchant_reference_id": "customer_1734263771",
      "name": "John Doe",
      "email": "guest@example.com",
      "phone": "999999999",
      "phone_country_code": "+65",
      "description": "First customer",
      "default_billing_address": {
          "line1": "1467",
          "line2": "Harrison Street",
          "line3": "Harrison Street",
          "city": "San Fransico",
          "state": "California",
          "zip": "94122",
          "country": "US",
          "first_name": "joseph",
          "last_name": "Doe"
      },
      "default_shipping_address": {
          "line1": "1467",
          "line2": "Harrison Street",
          "line3": "Harrison Street",
          "city": "San Fransico",
          "state": "California",
          "zip": "94122",
          "country": "US",
          "first_name": "joseph",
          "last_name": "Doe"
      },
      "metadata": {
          "udf1": "value1",
          "new_customer": "true",
          "login_date": "2019-09-10T10:11:12Z"
      }
  }'
  ```
  
- Retrieve customer v2:

  ```shell
  curl --location 'http://localhost:8080/v2/customers/12345_cus_0193ca2bc9e170e282ca121616ebec7a' \
  --header 'x-profile-id: pro_E6JIGLUJ0YUOCeyhbczu' \
  --header 'api-key: dev_fun38x9Yy3LoxGzdu0YK6KwO06xJT9aGfnm52FW6EL8hwNBKSXC3iilT8nDCEfOB'
  ```

- Update customer v2:

  ```shell
  curl --location --request PUT 'http://localhost:8080/v2/customers/12345_cus_0193ca2bc9e170e282ca121616ebec7a' \
  --header 'x-profile-id: pro_E6JIGLUJ0YUOCeyhbczu' \
  --header 'Content-Type: application/json' \
  --header 'api-key: dev_fun38x9Yy3LoxGzdu0YK6KwO06xJT9aGfnm52FW6EL8hwNBKSXC3iilT8nDCEfOB' \
  --data-raw '{   
      "merchant_reference_id": "customer_1734263927",
      "name": "Jane Doe",
      "email": "guest@example.com",
      "phone": "999999999",
      "phone_country_code": "+65",
      "description": "Second customer",
      "default_billing_address": {
          "line1": "1467",
          "line2": "Harrison Street",
          "line3": "Harrison Street",
          "city": "San Fransico",
          "state": "California",
          "zip": "94122",
          "country": "US",
          "first_name": "joseph",
          "last_name": "Doe"
      },
      "default_shipping_address": {
          "line1": "1467",
          "line2": "Harrison Street",
          "line3": "Harrison Street",
          "city": "San Fransico",
          "state": "California",
          "zip": "94122",
          "country": "US",
          "first_name": "joseph",
          "last_name": "Doe"
      },
      "metadata": {
          "udf1": "value1",
          "new_customer": "true",
          "login_date": "2019-09-10T10:11:12Z"
      }
  }'
  ```

- Delete customer v2:

  ```shell
  curl --location --request DELETE 'http://localhost:8080/v2/customers/12345_cus_0193ca2bc9e170e282ca121616ebec7a' \
  --header 'x-profile-id: pro_E6JIGLUJ0YUOCeyhbczu' \
  --header 'api-key: dev_fun38x9Yy3LoxGzdu0YK6KwO06xJT9aGfnm52FW6EL8hwNBKSXC3iilT8nDCEfOB'
  ```

- Customer list v2:

  ```shell
  curl --location 'http://localhost:8080/v2/customers/list' \
  --header 'x-profile-id: pro_E6JIGLUJ0YUOCeyhbczu' \
  --header 'api-key: dev_fun38x9Yy3LoxGzdu0YK6KwO06xJT9aGfnm52FW6EL8hwNBKSXC3iilT8nDCEfOB'
  ```

### Known Bugs / Issues

1. The `default_billing_address` and `default_shipping_address` fields seem to be correctly encrypted and populated in the database, but not in the response (during customer create, update and retrieve). This is due to the way in which encryption is being handled in our code.
2. The `merchant_reference_id` is accepted in the customers update request, but it is not being accessed anywhere in the customers update flow. Moreover, the behavior once this is fixed should be such that it allows updating the reference ID from a null value to a non-null value, but does not allow updating the reference ID once set.
3. Customer delete v2 may not have redacted address completely, because of encryption issues (slightly related to 1).

I'll be addressing these bugs in a separate PR, since 1 and 3 may need changes to the `ToEncryption` macro.

## 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


Resolution:
<think>
PR Context:
- Title: refactor(customers_v2): include minor fixes for customer v2 flows
- Merged: 2024-12-20T08:30:05Z
- Files changed: 5 files
- Commits: 4 commits

Implementation approach:
## 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 minor fixes suggested in my previous PR #6836. This PR includes the following changes:

- Import `CustomerUpdateRequestInternal` instead of fully qualifying it.
- Renames the `fetch_domain_model_and_update_and_generate_de
</think>

To implement this, you'll need to modify:


**Detailed Implementation:**


**Commit 1:** refactor(customers_v2): include minor fixes for customer v2 flows (#6876)
Files to modify:


**crates/api_models/src/events/customer.rs**
  Modify existing code

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

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

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