Issue:
[FEATURE] Analytics for payouts

### Feature Description

**APIs**
There is no provision for listing / filtering payout transactions processed via HyperSwitch. This needs to be implemented for analytical processing for payouts.

- List API helps in listing payouts based on generic constraints

- Filter API helps in filtering payouts based on payout specific filters

**Dashboard Analytics**
There are two tables for core payout operations
- payouts
- payout_attempt

The information regarding payouts and the attempts are stored in respective tables. For fetching all the information, there needs to be 2 DB calls for gathering entire context. As of writing this issue, Hyperswitch's dashboard can read data only from a single table in CKH.

As a temporary measure, all the required fields are to be moved to a single table.

### Possible Implementation

List API to include below constraints (similar to payments)
- customer_id
- starting_after
- ending_before
- limit
- created
- created_lt
- created_gt
- created_lte
- created_gte

Filter API to include below filters
- payout_id
- profile_id
- customer_id
- limit
- offset
- time_range
- connector
- currency
- status
- payout_method
- entity_type

Below columns are to be added in `payout_attempt`
 - payout_type
 - amount
- destination_currency
- source_currency
- recurring
- entity_type

### Have you spent some time checking if this feature request has been raised before?

- [X] I checked and didn't find a 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?

Yes, I am willing to submit a PR!

Resolution:
<think>
PR Context:
- Title: feat(payouts): add kafka events
- Merged: 2024-04-10T09:27:30Z
- Files changed: 16 files
- Commits: 26 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 -->


### Additional Changes

- [ ] 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 ch
</think>

To implement this, you'll need to modify:


**Detailed Implementation:**


**Commit 1:** feat(payouts): add kafka events (#4264)
Co-authored-by: Ivor Dsouza <ivor.dsouza@juspay.in>
Co-autho
Files to modify:


**crates/data_models/src/payouts/payout_attempt.rs**
  Modify existing code

**crates/data_models/src/payouts/payouts.rs**
  Modify existing code

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

**crates/router/src/core/payouts/helpers.rs**
  Modify existing code

**crates/router/src/core/payouts/retry.rs**
  Modify existing code

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

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

**crates/router/src/services/kafka.rs**
  Remove:
    - mod: private::payout
  Add:
    - mod: pub::payout

**crates/router/src/services/kafka/payout.rs**
  Modify existing code

**crates/storage_impl/src/mock_db/payout_attempt.rs**
  Modify existing code

**crates/storage_impl/src/mock_db/payouts.rs**
  Modify existing code

**crates/storage_impl/src/payouts/payout_attempt.rs**
  Modify existing code

**crates/storage_impl/src/payouts/payouts.rs**
  Modify existing code