v1.7.0: piani Basic/Pro/Premium/Annual + quota giornaliera
Pricing model: subscription mensili (Basic 2.99 / Pro 5.99 / Premium 9.99) piu' Annual 49.90 one-time. Feature gating per piano (Basic = solo audio, Pro+ = tutto). Quota giornaliera (10/30/150) con reset mezzanotte Europe/Rome. Server: tabella daily_usage, endpoint /api/usage/consume e /status, webhook LS gestisce subscription_* events + mappatura variant_id -> plan via .env (LS_VARIANT_BASIC|PRO|PREMIUM|ANNUAL). Client: gating tab in sidebar in base ai features del piano, contatore "X/Y oggi" + bottone Upgrade, modal blocco con CTA verso landing.
This commit is contained in:
1 parent
bcd4f22b1e
commit
61459099f9
15 files changed
+1395
-108
No files matched your search
@@ -0,0 +1,28 @@
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
ALTER TABLE licenses
|
||||
ADD COLUMN plan VARCHAR(16) NULL AFTER status,
|
||||
ADD COLUMN daily_limit INT UNSIGNED NULL AFTER plan,
|
||||
ADD COLUMN subscription_id VARCHAR(64) NULL AFTER daily_limit,
|
||||
ADD COLUMN current_period_end BIGINT UNSIGNED NULL AFTER subscription_id,
|
||||
ADD COLUMN expires_at BIGINT UNSIGNED NULL AFTER current_period_end;
|
||||
|
||||
UPDATE licenses
|
||||
SET plan = 'annual',
|
||||
daily_limit = NULL,
|
||||
expires_at = NULL
|
||||
WHERE plan IS NULL;
|
||||
|
||||
ALTER TABLE licenses
|
||||
ADD KEY idx_licenses_plan (plan),
|
||||
ADD KEY idx_licenses_sub (subscription_id);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS daily_usage (
|
||||
license_id INT UNSIGNED NOT NULL,
|
||||
day CHAR(10) NOT NULL,
|
||||
count INT UNSIGNED NOT NULL DEFAULT 0,
|
||||
updated_at BIGINT UNSIGNED NOT NULL,
|
||||
PRIMARY KEY (license_id, day),
|
||||
CONSTRAINT fk_daily_usage_license
|
||||
FOREIGN KEY (license_id) REFERENCES licenses(id) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
Reference in new issue
Block a user