Database
Overview
Provides CRUD operations for Spawn customers and stores provisioning, billing, and credit metadata in the wp_spawn_customers table.
Table
{$wpdb->prefix}spawn_customers
Schema (selected fields):
idbigint unsigned primary keyuser_idbigint unsignedemailvarchar(255)domainvarchar(255)domain_typevarchar(20)domain_expires_atdatetimetiervarchar(50)wants_websitetinyint(1)hetzner_typevarchar(50)hetzner_locationvarchar(50)stripe_customervarchar(255)stripe_subscriptionvarchar(255)stripe_payment_methodvarchar(255)server_idvarchar(255)server_ipvarchar(45)opencode_passwordvarchar(255)statusvarchar(50)credit_balancedecimal(10,2)auto_refill_enabledtinyint(1)auto_refill_thresholddecimal(10,2)auto_refill_amountdecimal(10,2)renewal_warnings_senttextdomain_auto_renewtinyint(1)customer_regionvarchar(10)
Methods
get_table_name(): stringreturns full table name.create_tables(): voidcreates the customers table.create_customer(array $data): int|falseinserts a customer record.update_customer(int $id, array $data): boolupdates a customer record.get_customer(int $id): ?arrayreturns a customer by ID.get_all_customers(string $order_by = 'created_at', string $order = 'DESC'): arrayreturns a list of customers.get_customer_by_subscription(string $subscription_id): ?arrayget_customer_by_domain(string $domain): ?arrayget_customer_by_email(string $email): ?arrayget_customer_by_user_id(int $user_id): ?arrayget_customer_by_server_ip(string $ip): ?arrayupdate_tier(int $id, string $tier): boolupdate_wants_website(int $id, bool $wants_website): booldeduct_credits(int $id, float $amount): boolget_credit_balance(int $id): ?floatadd_credits(int $id, float $amount): boolupdate_auto_refill(int $id, bool $enabled, int $threshold = 100, int $amount = 1000): boolupdate_auto_refill_settings(int $id, bool $enabled, float $threshold = 5.00, float $amount = 10.00): boolget_auto_refill_settings(int $id): ?arrayget_customers_needing_refill(): arrayget_expiring_domains(int $days = 30): arrayrenew_domain(int $id): boolupdate_payment_method(int $id, string $payment_method_id): boolget_payment_method(int $id): ?stringschedule_deletion(int $id, int $grace_days = 7): boolget_customers_pending_deletion(): arrayget_cancelling_customers(): arraymark_deleted(int $id): boolreactivate_customer(int $id): boolset_cloudflare_record_id(int $id, string $record_id): boolset_hetzner_server_id(int $id, string $server_id): bool
Usage
php
$customer_id = SpawnDatabase::create_customer( [
'email' => $email,
'domain' => $domain,
'tier' => 'starter',
'wants_website' => true,
] );php
SpawnDatabase::update_customer( $customer_id, [
'status' => 'active',
] );Table Creation
php
$sql = "CREATE TABLE {$table_name} (
id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
user_id bigint(20) unsigned DEFAULT NULL,
email varchar(255) NOT NULL,
status varchar(50) NOT NULL DEFAULT 'pending',
created_at datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)
) {$charset_collate};";