towerops/lib/towerops/billing/stripe_webhook_event.ex

27 lines
786 B
Elixir

defmodule Towerops.Billing.StripeWebhookEvent do
@moduledoc """
Schema for tracking processed Stripe webhook events.
Used for idempotency checking to prevent duplicate processing
when Stripe retries webhook delivery.
"""
use Ecto.Schema
import Ecto.Changeset
@primary_key {:id, :string, autogenerate: false}
schema "stripe_webhook_events" do
field :event_type, :string
field :processed_at, :utc_datetime
field :created_at, :utc_datetime
belongs_to :organization, Towerops.Organizations.Organization, type: :binary_id
end
@doc false
def changeset(event, attrs) do
event
|> cast(attrs, [:id, :event_type, :organization_id, :processed_at, :created_at])
|> validate_required([:id, :event_type, :processed_at, :created_at])
end
end