Files
caravel/backend/spec/billing.md
T
2026-04-01 16:42:14 -07:00

27 lines
1.1 KiB
Markdown

# `pub struct Billing`
Billing encapsulates logic related to synchronizing state with Stripe.
Members:
- `nwc_url: String` - a nostr wallet connect URL used to **create** bolt11 invoices
- `query: Query`
- `command: Command`
- `robot: Robot`
## `pub fn new(query: Query, command: Command, robot: Robot) -> Self`
- Reads environment and populates members
## `pub fn start(&self)`
- Subscribes to `command.notify.notified`
- On `create_relay`, `update_relay`, `activate_relay`, `deactivate_relay`, `fail_relay_sync`, and `complete_relay_sync`, call `self.sync_relay_subscription_item`.
## `pub fn sync_relay_subscription_item(&self, activity: &Activity)`
- Fetch the relay associated with the `activity`
- If the relay has `sync_error`, `synced` is false, `plan` is `free`, or `status` is `inactive`, delete the relay's subscription item using the Stripe api, and clear it with `command.delete_relay_subscription_item`.
- Otherwise, create/update the relay's subscription item to the appropriate Stripe price using the Stripe api and set it with `command.set_relay_subscription_item`.
- This method should be idempotent