Update backend implementation to fit spec
This commit is contained in:
+1
-1
@@ -12,7 +12,7 @@ Members:
|
||||
|
||||
Notes:
|
||||
|
||||
- Authentication is done using NIP 98
|
||||
- Authentication is done using NIP 98 comparing `u` to `self.host`, not the incoming request
|
||||
- Each route is responsible for authorization using `self.is_admin(pubkey)` or `self.is_tenant(authorized_pubkey, tenant_pubkey)`
|
||||
- Successful API responses should be of the form `{data, code: "ok"}` with an appropriate http status code.
|
||||
- Unsuccessful API responses should be of the form `{error, code}` with an appropriate http status code. `code` is a short error code (e.g. `duplicate-subdomain`) and `error` is a human-readable error message.
|
||||
|
||||
@@ -20,7 +20,7 @@ Calls `self.tick` in a loop every hour.
|
||||
|
||||
Iterates over `repo.list_activity` since last run and does the following:
|
||||
|
||||
- For any `relay_created|relay_updated` activity if this is the first non-free relay for the tenant, update tenant's billing anchor to the time the relay was created.
|
||||
- For any `relay_created|relay_updated|relay_activated` activity if this is the first non-free relay for the tenant, update tenant's billing anchor to the time the relay was created.
|
||||
|
||||
Also iterates over `repo.list_tenants()` and for each tenant calls `self.generate_invoice_if_due(tenant)` and `self.collect_outstanding(tenant)`.
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
- Configures logging
|
||||
- Creates instances of `Repo`, `Robot`, `Billing`, `Api`, and `Infra`
|
||||
- Spawns `billing.start()`
|
||||
- Spawns `infra.start()`
|
||||
- Calls `api.serve()`
|
||||
- Calls `repo.migrate`
|
||||
- Spawns `billing.start`
|
||||
- Spawns `infra.start`
|
||||
- Calls `api.serve`
|
||||
|
||||
@@ -69,11 +69,11 @@ Invoices are generated at the end of a tenant's monthly billing period. The bill
|
||||
- `status` - `pending|paid|closed`
|
||||
- `amount` is derived as the sum of associated invoice item `sats` values (not stored as a separate source of truth)
|
||||
- `created_at` - unix timestamp for when the invoice was created
|
||||
- `attempted_at` - unix timestamp for when collection was last attempted
|
||||
- `attempted_at` - nullable unix timestamp for when collection was last attempted
|
||||
- `error` - optional human-readable error from the last failed collection attempt
|
||||
- `closed_at` - unix timestamp for when the invoice was closed
|
||||
- `sent_at` - unix timestamp for when the invoice was sent via DM
|
||||
- `paid_at` - unix timestamp for when the invoice was paid
|
||||
- `closed_at` - nullable unix timestamp for when the invoice was closed
|
||||
- `sent_at` - nullable unix timestamp for when the invoice was sent via DM
|
||||
- `paid_at` - nullable unix timestamp for when the invoice was paid
|
||||
- `bolt11` - a BOLT 11 lightning invoice that can be used to pay the invoice
|
||||
- `period_start` - unix timestamp for period start
|
||||
- `period_end` - unix timestamp for period end
|
||||
|
||||
@@ -4,20 +4,23 @@ Repo is a wrapper around a sqlite pool which implements methods related to datab
|
||||
|
||||
Members:
|
||||
|
||||
- `database_url: String` - the location of the sqlite database, from `DATABASE_URL`
|
||||
- `pool: sqlx::SqlitePool` - a sqlite connection pool
|
||||
|
||||
Notes:
|
||||
|
||||
- All public methods should be run in a transaction so they're atomic
|
||||
- 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 `(activity_type, identifier)`
|
||||
|
||||
## `pub fn new() -> Self`
|
||||
|
||||
- Reads environment and populates members
|
||||
- Ensures that any directories referred to in `self.database_url` exist
|
||||
- Reads `DATABASE_URL` from environment
|
||||
- Ensures that any directories referred to in `DATABASE_URL` exist
|
||||
- Initializes its sqlx `pool`
|
||||
|
||||
## `pub fn migrate(&self) -> Result<()>`
|
||||
|
||||
- Runs migrations found in the `migrations` directory.
|
||||
|
||||
## `pub fn list_tenants(&self) -> Result<Vec<Tenant>>`
|
||||
|
||||
- Returns all tenants
|
||||
|
||||
Reference in New Issue
Block a user