Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(webhook): Add is_delivered filter to list initial attempts endpoint #7344

Open
wants to merge 5 commits into
base: return-total-events-count
Choose a base branch
from

Conversation

AmeyWale
Copy link
Contributor

@AmeyWale AmeyWale commented Feb 21, 2025

Type of Change

  • Bugfix
  • New feature
  • Enhancement
  • Refactoring
  • Dependency updates
  • Documentation
  • CI/CD

Description

This PR features addition of new filter called is_delivered which will allow merchants to filter out webhook events based on the fact that if a particular event was ultimately delivered or not.

The is_delivery_successful field now takes data from is_overall_delivery_successful column of the events table and not is_webhook_notified to represent the eventual delivery of the event.

Additional Changes

  • This PR modifies the API contract
  • This PR modifies the database schema
  • This PR modifies application configuration/environment variables

Motivation and Context

Upon merging this PR, the merchants would be able to filter webhook events based on ultimate delivery status.

How did you test it?

  • API request to fetch webhook events with no filter
curl --location 'http://localhost:8080/events/merchant_1740390998' \
--header 'Content-Type: application/json' \
--header 'admin_api_key: test_admin' \
--header 'api-key: test_admin' \
--data ''
  • Response from the above call
{"events":[{"event_id":"evt_01953774e7eb7c9190e280ea6756d032","merchant_id":"merchant_1740390998","profile_id":"pro_IzLLBXNTTbYTO6TehKsK","object_id":"pay_QlQAl1DOJug8H0kk9FtW","event_type":"payment_succeeded","event_class":"payments","is_delivery_successful":true,"initial_attempt_id":"evt_01953774e7eb7c9190e280ea6756d032","created":"2025-02-24T10:16:03.308Z"},{"event_id":"evt_01953774d6b57762a2ff4fd96e27cce3","merchant_id":"merchant_1740390998","profile_id":"pro_IzLLBXNTTbYTO6TehKsK","object_id":"pay_lKLVcse8HzUlytYrQtKJ","event_type":"payment_succeeded","event_class":"payments","is_delivery_successful":true,"initial_attempt_id":"evt_01953774d6b57762a2ff4fd96e27cce3","created":"2025-02-24T10:15:58.901Z"},{"event_id":"evt_01953774c1147c41a855a13536beafd7","merchant_id":"merchant_1740390998","profile_id":"pro_IzLLBXNTTbYTO6TehKsK","object_id":"pay_TpPAwHW9pb1VtDoQR1fn","event_type":"payment_succeeded","event_class":"payments","is_delivery_successful":true,"initial_attempt_id":"evt_01953774c1147c41a855a13536beafd7","created":"2025-02-24T10:15:53.365Z"},{"event_id":"evt_019537748a317841814d292122fe384b","merchant_id":"merchant_1740390998","profile_id":"pro_IzLLBXNTTbYTO6TehKsK","object_id":"pay_Wfg8KwLIKpNukRyI7LGN","event_type":"payment_succeeded","event_class":"payments","is_delivery_successful":false,"initial_attempt_id":"evt_019537748a317841814d292122fe384b","created":"2025-02-24T10:15:39.313Z"},{"event_id":"evt_019537728f3b7000b60bbf18cb8b1373","merchant_id":"merchant_1740390998","profile_id":"pro_IzLLBXNTTbYTO6TehKsK","object_id":"pay_ISS739fX9arr9CNf6w73","event_type":"payment_succeeded","event_class":"payments","is_delivery_successful":false,"initial_attempt_id":"evt_019537728f3b7000b60bbf18cb8b1373","created":"2025-02-24T10:13:29.532Z"},{"event_id":"evt_01953771f29d7911be93a3753f1eb0c4","merchant_id":"merchant_1740390998","profile_id":"pro_IzLLBXNTTbYTO6TehKsK","object_id":"pay_PEAL9Kt0lSt3tllLtSD6","event_type":"payment_succeeded","event_class":"payments","is_delivery_successful":false,"initial_attempt_id":"evt_01953771f29d7911be93a3753f1eb0c4","created":"2025-02-24T10:12:49.438Z"},{"event_id":"evt_019537707b8b70838e753daf51eb1d67","merchant_id":"merchant_1740390998","profile_id":"pro_IzLLBXNTTbYTO6TehKsK","object_id":"pay_hXCyBkIAVf00lf03jyMQ","event_type":"payment_succeeded","event_class":"payments","is_delivery_successful":false,"initial_attempt_id":"evt_019537707b8b70838e753daf51eb1d67","created":"2025-02-24T10:11:13.420Z"},{"event_id":"evt_0195376867a57282999dd9ac75b137f9","merchant_id":"merchant_1740390998","profile_id":"pro_IzLLBXNTTbYTO6TehKsK","object_id":"pay_g2TOloPWFFrhm02n9kuv","event_type":"payment_succeeded","event_class":"payments","is_delivery_successful":false,"initial_attempt_id":"evt_0195376867a57282999dd9ac75b137f9","created":"2025-02-24T10:02:24.038Z"},{"event_id":"evt_0195376750287e53bb08204068a6a902","merchant_id":"merchant_1740390998","profile_id":"pro_IzLLBXNTTbYTO6TehKsK","object_id":"pay_47LGuikk3tqhnHNxrQfL","event_type":"payment_succeeded","event_class":"payments","is_delivery_successful":false,"initial_attempt_id":"evt_0195376750287e53bb08204068a6a902","created":"2025-02-24T10:01:12.489Z"},{"event_id":"evt_01953764d84a7811b03e83c906fd8009","merchant_id":"merchant_1740390998","profile_id":"pro_IzLLBXNTTbYTO6TehKsK","object_id":"pay_d4MTTk0iuQzjQcChWHsa","event_type":"payment_succeeded","event_class":"payments","is_delivery_successful":false,"initial_attempt_id":"evt_01953764d84a7811b03e83c906fd8009","created":"2025-02-24T09:58:30.731Z"},{"event_id":"evt_0195376421b477909d06c2b227c734f7","merchant_id":"merchant_1740390998","profile_id":"pro_IzLLBXNTTbYTO6TehKsK","object_id":"pay_9yrvfEwJyUYS1BScPn8Y","event_type":"payment_succeeded","event_class":"payments","is_delivery_successful":false,"initial_attempt_id":"evt_0195376421b477909d06c2b227c734f7","created":"2025-02-24T09:57:43.988Z"},{"event_id":"evt_0195376386e97a93a6b464285a262d8f","merchant_id":"merchant_1740390998","profile_id":"pro_IzLLBXNTTbYTO6TehKsK","object_id":"pay_43vhcdhitA2NdA7cALAx","event_type":"payment_succeeded","event_class":"payments","is_delivery_successful":false,"initial_attempt_id":"evt_0195376386e97a93a6b464285a262d8f","created":"2025-02-24T09:57:04.361Z"}],"total_count":12}
  • API call to fetch webhook events with is_delivered having false value.
curl --location 'http://localhost:8080/events/merchant_1740390998?is_delivered=false' \
--header 'Content-Type: application/json' \
--header 'admin_api_key: test_admin' \
--header 'api-key: test_admin' \
--data ''
  • Response from above call
{"events":[{"event_id":"evt_019537748a317841814d292122fe384b","merchant_id":"merchant_1740390998","profile_id":"pro_IzLLBXNTTbYTO6TehKsK","object_id":"pay_Wfg8KwLIKpNukRyI7LGN","event_type":"payment_succeeded","event_class":"payments","is_delivery_successful":false,"initial_attempt_id":"evt_019537748a317841814d292122fe384b","created":"2025-02-24T10:15:39.313Z"},{"event_id":"evt_019537728f3b7000b60bbf18cb8b1373","merchant_id":"merchant_1740390998","profile_id":"pro_IzLLBXNTTbYTO6TehKsK","object_id":"pay_ISS739fX9arr9CNf6w73","event_type":"payment_succeeded","event_class":"payments","is_delivery_successful":false,"initial_attempt_id":"evt_019537728f3b7000b60bbf18cb8b1373","created":"2025-02-24T10:13:29.532Z"},{"event_id":"evt_01953771f29d7911be93a3753f1eb0c4","merchant_id":"merchant_1740390998","profile_id":"pro_IzLLBXNTTbYTO6TehKsK","object_id":"pay_PEAL9Kt0lSt3tllLtSD6","event_type":"payment_succeeded","event_class":"payments","is_delivery_successful":false,"initial_attempt_id":"evt_01953771f29d7911be93a3753f1eb0c4","created":"2025-02-24T10:12:49.438Z"},{"event_id":"evt_019537707b8b70838e753daf51eb1d67","merchant_id":"merchant_1740390998","profile_id":"pro_IzLLBXNTTbYTO6TehKsK","object_id":"pay_hXCyBkIAVf00lf03jyMQ","event_type":"payment_succeeded","event_class":"payments","is_delivery_successful":false,"initial_attempt_id":"evt_019537707b8b70838e753daf51eb1d67","created":"2025-02-24T10:11:13.420Z"},{"event_id":"evt_0195376867a57282999dd9ac75b137f9","merchant_id":"merchant_1740390998","profile_id":"pro_IzLLBXNTTbYTO6TehKsK","object_id":"pay_g2TOloPWFFrhm02n9kuv","event_type":"payment_succeeded","event_class":"payments","is_delivery_successful":false,"initial_attempt_id":"evt_0195376867a57282999dd9ac75b137f9","created":"2025-02-24T10:02:24.038Z"},{"event_id":"evt_0195376750287e53bb08204068a6a902","merchant_id":"merchant_1740390998","profile_id":"pro_IzLLBXNTTbYTO6TehKsK","object_id":"pay_47LGuikk3tqhnHNxrQfL","event_type":"payment_succeeded","event_class":"payments","is_delivery_successful":false,"initial_attempt_id":"evt_0195376750287e53bb08204068a6a902","created":"2025-02-24T10:01:12.489Z"},{"event_id":"evt_01953764d84a7811b03e83c906fd8009","merchant_id":"merchant_1740390998","profile_id":"pro_IzLLBXNTTbYTO6TehKsK","object_id":"pay_d4MTTk0iuQzjQcChWHsa","event_type":"payment_succeeded","event_class":"payments","is_delivery_successful":false,"initial_attempt_id":"evt_01953764d84a7811b03e83c906fd8009","created":"2025-02-24T09:58:30.731Z"},{"event_id":"evt_0195376421b477909d06c2b227c734f7","merchant_id":"merchant_1740390998","profile_id":"pro_IzLLBXNTTbYTO6TehKsK","object_id":"pay_9yrvfEwJyUYS1BScPn8Y","event_type":"payment_succeeded","event_class":"payments","is_delivery_successful":false,"initial_attempt_id":"evt_0195376421b477909d06c2b227c734f7","created":"2025-02-24T09:57:43.988Z"},{"event_id":"evt_0195376386e97a93a6b464285a262d8f","merchant_id":"merchant_1740390998","profile_id":"pro_IzLLBXNTTbYTO6TehKsK","object_id":"pay_43vhcdhitA2NdA7cALAx","event_type":"payment_succeeded","event_class":"payments","is_delivery_successful":false,"initial_attempt_id":"evt_0195376386e97a93a6b464285a262d8f","created":"2025-02-24T09:57:04.361Z"}],"total_count":9}
  • API call to fetch webhook events with is_delivered filter having true value.
curl --location 'http://localhost:8080/events/merchant_1740390998?is_delivered=true' \
--header 'Content-Type: application/json' \
--header 'admin_api_key: test_admin' \
--header 'api-key: test_admin' \
--data ''
  • Response from above call
{"events":[{"event_id":"evt_01953774e7eb7c9190e280ea6756d032","merchant_id":"merchant_1740390998","profile_id":"pro_IzLLBXNTTbYTO6TehKsK","object_id":"pay_QlQAl1DOJug8H0kk9FtW","event_type":"payment_succeeded","event_class":"payments","is_delivery_successful":true,"initial_attempt_id":"evt_01953774e7eb7c9190e280ea6756d032","created":"2025-02-24T10:16:03.308Z"},{"event_id":"evt_01953774d6b57762a2ff4fd96e27cce3","merchant_id":"merchant_1740390998","profile_id":"pro_IzLLBXNTTbYTO6TehKsK","object_id":"pay_lKLVcse8HzUlytYrQtKJ","event_type":"payment_succeeded","event_class":"payments","is_delivery_successful":true,"initial_attempt_id":"evt_01953774d6b57762a2ff4fd96e27cce3","created":"2025-02-24T10:15:58.901Z"},{"event_id":"evt_01953774c1147c41a855a13536beafd7","merchant_id":"merchant_1740390998","profile_id":"pro_IzLLBXNTTbYTO6TehKsK","object_id":"pay_TpPAwHW9pb1VtDoQR1fn","event_type":"payment_succeeded","event_class":"payments","is_delivery_successful":true,"initial_attempt_id":"evt_01953774c1147c41a855a13536beafd7","created":"2025-02-24T10:15:53.365Z"}],"total_count":3}

Checklist

  • I formatted the code cargo +nightly fmt --all
  • I addressed lints thrown by cargo clippy
  • I reviewed the submitted code
  • I added unit tests for my changes where possible

@AmeyWale AmeyWale requested review from a team as code owners February 21, 2025 13:09
@AmeyWale AmeyWale changed the base branch from main to return-total-events-count February 21, 2025 13:26
@AmeyWale AmeyWale self-assigned this Feb 21, 2025
@hyperswitch-bot hyperswitch-bot bot added the M-database-changes Metadata: This PR involves database schema changes label Feb 21, 2025
@hyperswitch-bot hyperswitch-bot bot added the M-api-contract-changes Metadata: This PR involves API contract changes label Feb 21, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
M-api-contract-changes Metadata: This PR involves API contract changes M-database-changes Metadata: This PR involves database schema changes
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant