Issue:
primary key violates unique constraint upon sending lots of create payment requests with the same customer id

Discovered while running `payment-confirm` loadtesting script. 

**Log:**
```
{
  ...
  "flow":"PaymentsCreate",
  "extra":{
    "api_authentication":"ApiKey",
    "error":"{\"error\":{\"type\":\"server_not_available\",\"code\":\"RE_00\",\"message\":\"Something went wrong.\"}}\n├╴crates/router/src/core/payments.rs:96:10\n│\n├─▶ DatabaseError: A unique constraint violation occurred\n│   ├╴crates/router/src/types/storage/query/generics.rs:168:22\n│   ╰╴Error while inserting CustomerNew { customer_id: \"StripeCustomer\", merchant_id: \"merchant_1669119076606\", name: Some(\"John Doe\"), email: Some(*****@example.com), phone: Some(*** alloc::string::String ***), description: None, phone_country_code: Some(\"+65\"), address: None, metadata: None }\n│\n╰─▶ Failed to issue a query: duplicate key value violates unique constraint \"customers_pkey\"\n    ╰╴crates/router/src/types/storage/query/generics.rs:167:27",
    "http.client_ip":"192.168.48.10",
    "http.flavor":"1.1",
    "http.host":"router-server:8080",
    "http.method":"POST",
    "http.route":"/payments"
    ...
  }
}
```

**Steps to reproduce:**
check out `rnd-loadtest-failing-requests` branch
I made a minor change which gives us access to logs of the router container.
once you checked out the branch:
```
cd loadtest
docker compose build # will take some time
bash loadtest.sh -s payment-confirm
```
the last command will give you something like `http_req_failed................: 0.18%  ✓ 7          ✗ 3718` in the end. The numbers could be different. Those 7 requests are failed.

You can access the logs stored at `loadtest/logs.tmp/logs`.  Search for "server_not_available" string in it.

**Notes:**
1. Those customer queries need to be in a single transaction but currently we are not using pgdb as a relational storage so that would not be a good solution.

**Possible solutions:**
1. We implement api level locking in future, that will handle parallel request errors. (cc @jarnura)


Resolution:
<think>
PR Context:
- Title: feat(payment_link): add multiple custom css support in business level 
- Merged: 2024-07-01T11:16:05Z
- Files changed: 10 files
- Commits: 13 commits

Implementation approach:
## Type of Change
<!-- Put an `x` in the boxes that apply -->
- [x] Enhancement


## Description
<!-- Describe your changes in detail -->

Currently we support one theme config for payment link that can be set in business profile level, with this PR we will allow multiple payment link theme configuration in business profile.

### Additional Changes

- [x] This PR modifies the API contract

```shell
"payment_link_config": {
        "theme": "#8A0808",
        "logo": "https://i.p
</think>

To implement this, you'll need to modify:


**Detailed Implementation:**


**Commit 1:** feat(payment_link): add multiple custom css support in business level  (#5137)
Co-authored-by: hyper
Files to modify:


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

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

**crates/common_utils/src/types.rs**
  Add:
    - function: private::convert
    - function: private::convert_back
    - struct: pub::StringMajorUnitForCore
    - impl: impl AmountConvertor for StringMajorUnitForCore

**crates/hyperswitch_domain_models/src/errors/api_error_response.rs**
  Modify existing code

**crates/router/src/compatibility/stripe/errors.rs**
  Modify existing code

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

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

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