Current section

Files

Jump to
paper_tiger lib paper_tiger resources event.ex
Raw

lib/paper_tiger/resources/event.ex

defmodule PaperTiger.Resources.Event do
@moduledoc """
Handles Event resource endpoints.
## Endpoints
- GET /v1/events/:id - Retrieve event
- GET /v1/events - List events
Note: Events are auto-generated by the system and are immutable.
No create, update, or delete operations are supported.
## Event Object
%{
id: "evt_...",
object: "event",
created: 1234567890,
type: "customer.created",
data: %{
object: %{
id: "cus_...",
object: "customer",
# ... customer fields
}
},
livemode: false
}
"""
import PaperTiger.Resource
alias PaperTiger.Store.Events
require Logger
@doc """
Retrieves an event by ID.
"""
@spec retrieve(Plug.Conn.t(), String.t()) :: Plug.Conn.t()
def retrieve(conn, id) do
case Events.get(id) do
{:ok, event} ->
event
|> maybe_expand(conn.params)
|> then(&json_response(conn, 200, &1))
{:error, :not_found} ->
error_response(conn, PaperTiger.Error.not_found("event", id))
end
end
@doc """
Lists all events with pagination.
## Parameters
- limit - Number of items (default: 10, max: 100)
- starting_after - Cursor for pagination
- ending_before - Reverse cursor
- type - Filter by event type
"""
@spec list(Plug.Conn.t()) :: Plug.Conn.t()
def list(conn) do
pagination_opts = parse_pagination_params(conn.params)
result = Events.list(pagination_opts)
json_response(conn, 200, result)
end
## Private Functions
defp maybe_expand(event, params) do
expand_params = parse_expand_params(params)
PaperTiger.Hydrator.hydrate(event, expand_params)
end
end