Issue:
Gift Card Balance check API for split payments

We need to add an API to check balance for gift card.

This API will be called by the SDK and based on the gift card balance and transaction amount, we will collect either only gift card details or gift card details + another payment method

Resolution:
<think>
PR Context:
- Title: feat(router): Add gift card balance check endpoint (v2)
- Merged: 2025-09-17T07:50:47Z
- Files changed: 29 files
- Commits: 25 commits

Implementation approach:
## 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 -->
- Added `check-gift-card-balance` API
- Added `GiftCardBalanceCheck` flow for connectors and implemented it for Adyen
- Updated PML flow to store gift card enabled MCA in redis

<img width="2314" height="1286" alt="image" src="https://gith
</think>

To implement this, you'll need to modify:


**Detailed Implementation:**


**Commit 1:** feat(router): Add gift card balance check endpoint (v2) (#9102)
Files to modify:


**crates/api_models/src/events/payment.rs**
  Add:
    - function: private::get_api_event_type
    - impl: impl ApiEventMetric for payments::GiftCardBalanceCheckResponse

**crates/api_models/src/payments.rs**
  Add:
    - struct: pub::GiftCardBalanceCheckResponse
    - struct: pub::PaymentsGiftCardBalanceCheckRequest

**crates/common_utils/src/id_type/global_id/payment.rs**
  Add:
    - function: pub::get_gift_card_connector_key

**crates/hyperswitch_connectors/src/connectors/adyen.rs**
  Add:
    - function: private::get_headers
    - function: private::get_url
    - function: private::get_request_body
    - function: private::build_request
    - function: private::handle_response
    - function: private::get_error_response
    - function: private::get_5xx_error_response
    - impl: impl api::PaymentsGiftCardBalanceCheck for Adyen
    - impl: impl ConnectorIntegration<
        GiftCardBalanceCheck,
        GiftCardBalanceCheckRequestData,
        GiftCardBalanceCheckResponseData,
    > for Adyen

**crates/hyperswitch_connectors/src/connectors/adyen/transformers.rs**
  Add:
    - function: private::try_from
    - function: private::try_from
    - impl: impl TryFrom<&PaymentsGiftCardBalanceCheckRouterData> for AdyenBalanceRequest<'_>
    - impl: impl TryFrom<
        ResponseRouterData<
            GiftCardBalanceCheck,
            AdyenBalanceResponse,
            GiftCardBalanceCheckRequestData,
            GiftCardBalanceCheckResponseData,
        >,
    > for RouterData<
        GiftCardBalanceCheck,
        GiftCardBalanceCheckRequestData,
        GiftCardBalanceCheckResponseData,
    >

**crates/hyperswitch_connectors/src/default_implementations.rs**
  Add:
    - impl: impl PaymentsGiftCardBalanceCheck for connectors::DummyConnector<T>
    - impl: impl ConnectorIntegration<
        GiftCardBalanceCheck,
        GiftCardBalanceCheckRequestData,
        GiftCardBalanceCheckResponseData,
    > for connectors::DummyConnector<T>

**crates/hyperswitch_connectors/src/default_implementations_v2.rs**
  Add:
    - impl: impl PaymentsGiftCardBalanceCheckV2 for $connector
    - impl: impl ConnectorIntegrationV2<
            GiftCardBalanceCheck,
            GiftCardBalanceCheckFlowData,
            GiftCardBalanceCheckRequestData,
            GiftCardBalanceCheckResponseData,
        > for $connector

**crates/hyperswitch_domain_models/src/router_data_v2/flow_common_types.rs**
  Add:
    - struct: pub::GiftCardBalanceCheckFlowData

**crates/hyperswitch_domain_models/src/router_flow_types/payments.rs**
  Add:
    - struct: pub::GiftCardBalanceCheck

**crates/hyperswitch_domain_models/src/router_request_types.rs**
  Add:
    - struct: pub::GiftCardBalanceCheckRequestData

**crates/hyperswitch_domain_models/src/router_response_types.rs**
  Add:
    - struct: pub::GiftCardBalanceCheckResponseData

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

**crates/hyperswitch_interfaces/src/api/payments.rs**
  Modify existing code

**crates/hyperswitch_interfaces/src/api/payments_v2.rs**
  Add:
    - trait: pub::PaymentsGiftCardBalanceCheckV2

**crates/hyperswitch_interfaces/src/conversion_impls.rs**
  Add:
    - function: private::from_old_router_data
    - function: private::to_old_router_data
    - impl: impl RouterDataConversion<T, Req, Resp> for GiftCardBalanceCheckFlowData

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

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

**crates/openapi/src/routes/payments.rs**
  Add:
    - function: pub::payment_check_gift_card_balance

**crates/router/src/core.rs**
  Add:
    - mod: pub::gift_card

**crates/router/src/core/gift_card.rs**
  Add:
    - function: pub::payments_check_gift_card_balance_core

**crates/router/src/core/payments/payment_methods.rs**
  Add:
    - function: private::store_gift_card_mca_in_redis

**crates/router/src/routes/app.rs**
  Modify existing code

**crates/router/src/routes/lock_utils.rs**
  Modify existing code

**crates/router/src/routes/payments.rs**
  Add:
    - function: pub::payment_check_gift_card_balance

**crates/router/src/services/api.rs**
  Modify existing code

**crates/router_env/src/logger/types.rs**
  Modify existing code