input:
##TASK
Add subscription support to webhook event metadata and outgoing webhook content systems to enable proper subscription lifecycle event handling and webhook delivery for subscription-related operations.

output:
##OUTPUT
The webhook system requires subscription event support to handle subscription lifecycle events (creation, payment, cancellation) and deliver them to merchants via outgoing webhooks. This affects the event metadata enumeration and webhook content transformation layers. The complete flow is: subscription event occurs → EventMetadata::Subscription variant created with subscription_id, invoice_id, payment_id → stored in database → retrieved for webhook delivery → OutgoingWebhookEventContent::foreign_from converts EventMetadata to OutgoingWebhookEventContent::Subscription → StripeWebhookObject::From transforms to StripeWebhookObject::Subscriptions for Stripe compatibility. The OutgoingWebhookEventContent::foreign_from function (router/src/core/webhooks/outgoing_v2.rs::OutgoingWebhookEventContent::foreign_from) must add the Subscription variant match arm because it's the bridge from storage EventMetadata to webhook content representation—without this, subscription events cannot be converted to webhook content and would be silently dropped during webhook processing. The StripeWebhookObject::From implementation (router/src/compatibility/stripe/webhooks.rs::StripeWebhookObject::From) must handle OutgoingWebhookContent::SubscriptionDetails because it provides Stripe-compatible webhook formatting—without this, merchants using Stripe webhook endpoints would receive malformed or missing subscription events. The EventMetadata enum (implicitly referenced in foreign_from) requires the Subscription variant to exist in the diesel_models layer, which enables persistent storage of subscription event references. These components form a tightly coupled webhook pipeline where each depends on the previous: EventMetadata → OutgoingWebhookEventContent → StripeWebhookObject. If foreign_from lacks the Subscription match arm, subscription events stored as EventMetadata::Subscription would cause panic during webhook delivery. If StripeWebhookObject::From lacks SubscriptionDetails handling, Stripe webhook endpoints would receive unparseable responses, breaking merchant integrations that rely on Stripe-compatible subscription webhooks for revenue recognition and customer management systems.

##SELECT
crates/router/src/core/webhooks/outgoing_v2.rs::OutgoingWebhookEventContent::foreign_from
crates/router/src/compatibility/stripe/webhooks.rs::StripeWebhookObject::From
<EOS>


input:
##TASK
Update subscription response mapping to use common_enums::SubscriptionStatus instead of subscription_types::SubscriptionStatus for consistent enum usage across the codebase.

output:
##OUTPUT
The subscription system needs to standardize on a single SubscriptionStatus enum type to avoid type inconsistencies and import conflicts. The current flow is: subscription handler creates SubscriptionResponse → calls to_subscription_response method → converts string status to subscription_types::SubscriptionStatus → returns response. The to_subscription_response method (crates/subscriptions/src/core/subscription_handler.rs::SubscriptionWithHandler::to_subscription_response) must change because it's the conversion point where the status enum is instantiated. Using common_enums::SubscriptionStatus ensures consistency with other parts of the system that already use this common enum type. Without this change, the subscription module would maintain its own duplicate enum, creating potential mismatches and requiring conversions throughout the codebase when interacting with other modules that expect the common enum type.

##SELECT
crates/subscriptions/src/core/subscription_handler.rs::SubscriptionWithHandler::to_subscription_response
<EOS>


input:
##TASK
Add subscription support to webhook event system by including Subscriptions in EventClass enum and implementing SubscriptionStatus to EventType mapping for proper webhook routing.

output:
##OUTPUT
The webhook system needs to handle subscription-related events for proper event classification and routing. The current flow is: webhook event received → EventClass determines routing category → EventType specifies the exact event type → handlers process based on event type. The EventClass enum (crates/common_enums/src/enums.rs::EventClass) must include Subscriptions because it's the primary classification that determines which subsystem handles the event. The SubscriptionStatus transformer (crates/common_enums/src/transformers.rs::impl::Option<EventType>) must map subscription status changes to appropriate EventType values because it converts domain state changes into webhook events. Without EventClass::Subscriptions, subscription events would be misclassified or unhandled. Without the SubscriptionStatus mapping, subscription status changes wouldn't trigger appropriate webhook notifications, breaking integration with external systems that depend on subscription lifecycle events.

##SELECT
crates/common_enums/src/enums.rs::EventClass
crates/common_enums/src/transformers.rs::impl::Option<EventType>
<EOS>


input:
##TASK
Add subscription ID support to webhook object reference system for proper webhook payload identification and routing.

output:
##OUTPUT
The webhook system needs to reference subscription entities in event payloads for proper event correlation and processing. The current flow is: webhook event generated → ObjectReferenceId identifies the affected entity → webhook payload includes reference → consumers process based on entity type. The ObjectReferenceId enum (crates/api_models/src/webhooks.rs::ObjectReferenceId) must include SubscriptionId because it's the type-safe identifier used throughout the webhook payload structure to specify which subscription triggered the event. Without SubscriptionId, webhook events related to subscriptions couldn't properly reference the subscription entity, making it impossible for consumers to correlate events with specific subscriptions. This would break webhook consumers that need to update their local state or trigger business logic based on subscription events.

##SELECT
crates/api_models/src/webhooks.rs::ObjectReferenceId
<EOS>