4.6 KiB
4.6 KiB
pub struct Repo
Repo is a wrapper around a sqlite pool which implements methods related to database access.
Members:
pool: sqlx::SqlitePool- a sqlite connection pool
Notes:
- All public write methods should be run in a transaction so they're atomic
- All writes should be accompanied by an activity log entry of
(tenant, activity_type, resource_type, resource_id) - Database table names are singular:
activity,tenant,relay,invoice,invoice_item
pub fn new() -> Self
- Reads
DATABASE_URLfrom environment - Ensures that any directories referred to in
DATABASE_URLexist - Initializes its sqlx
pool - Runs migrations found in the
migrationsdirectory.
fn insert_activity(activity_type, resource_type, resource_id) -> Result<()>
- Private helper that inserts one row into
activity - Infers
tenantfromresource_typeandresource_id - Used by write methods to avoid repeating audit-log SQL
pub fn list_tenants(&self) -> Result<Vec<Tenant>>
- Returns all tenants
pub fn get_tenant(&self, pubkey: &str) -> Result<Tenant>
- Returns matching tenant
pub fn create_tenant(&self, tenant: &Tenant) -> Result<()>
- Creates tenant, may throw sqlite uniqueness error on pubkey
- Logs activity as
(create_tenant, tenant_id)
pub fn update_tenant_billing_anchor(&self, pubkey: &str, billing_anchor: i64) -> Result<()>
- Updates the tenant's
billing_anchor - Logs activity as
(update_tenant_billing_anchor, tenant_id)
pub fn update_tenant_nwc_url(&self, pubkey: &str, nwc_url: &str) -> Result<()>
- Updates tenant
nwc_url - Logs activity as
(update_tenant_nwc_url, tenant_id)
pub fn list_plans() -> Vec<Plan>
- Returns the hardcoded relay plans used by the system (
free,basic,growth) - This is the source of truth for plan metadata exposed via API
pub fn list_relays(&self) -> Result<Vec<Relay>>
- Returns all relays
pub fn list_relays_for_tenant(&self, tenant_id: &str) -> Result<Vec<Relay>>
- Returns all relays belonging to the given tenant
pub fn get_relay(&self, id: &str) -> Result<Relay>
- Returns matching relay
pub fn create_relay(&self, relay: &Relay) -> Result<()>
- Creates relay, may throw sqlite uniqueness error on subdomain
- Sets relay status to
new - Logs activity as
(create_relay, relay_id)
pub fn update_relay(&self, relay: &Relay) -> Result<()>
- Updates relay, may throw sqlite uniqueness error on subdomain
- Logs activity as
(update_relay, relay_id)
pub fn deactivate_relay(&self, relay: &Relay) -> Result<()>
- Sets relay status to
inactive - Logs activity as
(deactivate_relay, relay_id)
pub fn activate_relay(&self, relay: &Relay) -> Result<()>
- Sets relay status to
active - Logs activity as
(activate_relay, relay_id)
pub fn fail_relay_sync(&self, relay: &Relay, sync_error: &str) -> Result<()>
- Sets relay status to
inactive, setssync_error - Logs activity as
(fail_relay_sync, relay_id)
pub fn create_invoice(&self, invoice: &Invoice, invoice_items: [&InvoiceItem]) -> Result<()>
- Saves an
invoicerow and relatedinvoice_itemrows - Logs activity as
(create_invoice, invoice_id)
pub fn list_invoices() -> Result<Vec<Invoice>>
- Returns all invoices
pub fn list_invoices_for_tenant(tenant_id: &str) -> Result<Vec<Invoice>>
- Returns all matching invoices
pub fn mark_invoice_paid(&self, invoice_id: &str) -> Result<()>
- Sets invoice status to
paid - Sets
paid_atto now - Clears
errorif set - Logs activity as
(mark_invoice_paid, invoice_id)
pub fn mark_invoice_attempted(&self, invoice_id: &str, error: &str) -> Result<()>
- Sets
attempted_atto now - Updates
errorif provided - Leaves status as
pending - Logs activity as
(mark_invoice_attempted, invoice_id)
pub fn mark_invoice_sent(&self, invoice_id: &str) -> Result<()>
- Sets
sent_atto now - Leaves status as
pending - Logs activity as
(mark_invoice_sent, invoice_id)
pub fn mark_invoice_closed(&self, invoice_id: &str) -> Result<()>
- Sets invoice status to
closed - Sets
closed_atto now - Logs activity as
(mark_invoice_closed, invoice_id)
pub fn list_activity(&self, since: &i64) -> Result<Vec<Activity>>
- Returns all activity occuring after
since
pub fn list_activity_for_tenant(&self, tenant: &str, since: &i64) -> Result<Vec<Activity>>
- Returns all activity occuring after
sincematchingtenant
pub fn get_relay_plan_sats(&self, plan: &str) -> Result<i64>
- Returns the monthly sats amount for a given plan id
- Uses
list_plans()data for consistent pricing logic across API and billing