Add licensing api (#1723)

This commit is contained in:
Luke Vella 2025-05-23 15:35:40 +01:00 committed by GitHub
parent 982fc39ac7
commit 679d6fb034
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
14 changed files with 607 additions and 40 deletions

View file

@ -0,0 +1,59 @@
-- CreateEnum
CREATE TYPE "LicenseType" AS ENUM ('PLUS', 'ORGANIZATION', 'ENTERPRISE');
-- CreateEnum
CREATE TYPE "LicenseStatus" AS ENUM ('ACTIVE', 'REVOKED');
-- CreateTable
CREATE TABLE "licenses" (
"id" TEXT NOT NULL,
"license_key" TEXT NOT NULL,
"version" INTEGER,
"type" "LicenseType" NOT NULL,
"seats" INTEGER,
"issued_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"expires_at" TIMESTAMP(3),
"licensee_email" TEXT,
"licensee_name" TEXT,
"status" "LicenseStatus" NOT NULL DEFAULT 'ACTIVE',
"stripe_customer_id" TEXT,
CONSTRAINT "licenses_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "license_validations" (
"id" TEXT NOT NULL,
"license_id" TEXT NOT NULL,
"ip_address" TEXT,
"fingerprint" TEXT,
"validated_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"user_agent" TEXT,
CONSTRAINT "license_validations_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "instance_licenses" (
"id" TEXT NOT NULL,
"license_key" TEXT NOT NULL,
"version" INTEGER,
"type" "LicenseType" NOT NULL,
"seats" INTEGER,
"issued_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"expires_at" TIMESTAMP(3),
"licensee_email" TEXT,
"licensee_name" TEXT,
"status" "LicenseStatus" NOT NULL DEFAULT 'ACTIVE',
CONSTRAINT "instance_licenses_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE UNIQUE INDEX "licenses_license_key_key" ON "licenses"("license_key");
-- CreateIndex
CREATE UNIQUE INDEX "instance_licenses_license_key_key" ON "instance_licenses"("license_key");
-- AddForeignKey
ALTER TABLE "license_validations" ADD CONSTRAINT "license_validations_license_id_fkey" FOREIGN KEY ("license_id") REFERENCES "licenses"("id") ON DELETE CASCADE ON UPDATE CASCADE;

View file

@ -0,0 +1,56 @@
enum LicenseType {
PLUS
ORGANIZATION
ENTERPRISE
}
enum LicenseStatus {
ACTIVE
REVOKED
}
model License {
id String @id @default(cuid())
licenseKey String @unique @map("license_key")
version Int? @map("version")
type LicenseType
seats Int? @map("seats")
issuedAt DateTime @default(now()) @map("issued_at")
expiresAt DateTime? @map("expires_at")
licenseeEmail String? @map("licensee_email")
licenseeName String? @map("licensee_name")
status LicenseStatus @default(ACTIVE) @map("status")
stripeCustomerId String? @map("stripe_customer_id")
validations LicenseValidation[]
@@map("licenses")
}
model LicenseValidation {
id String @id @default(cuid())
licenseId String @map("license_id")
license License @relation(fields: [licenseId], references: [id], onDelete: Cascade)
ipAddress String? @map("ip_address")
fingerprint String? @map("fingerprint")
validatedAt DateTime @default(now()) @map("validated_at")
userAgent String? @map("user_agent")
@@map("license_validations")
}
model InstanceLicense {
id String @id @default(cuid())
licenseKey String @unique @map("license_key")
version Int? @map("version")
type LicenseType
seats Int? @map("seats")
issuedAt DateTime @default(now()) @map("issued_at")
expiresAt DateTime? @map("expires_at")
licenseeEmail String? @map("licensee_email")
licenseeName String? @map("licensee_name")
status LicenseStatus @default(ACTIVE) @map("status")
@@map("instance_licenses")
}