147 lines
4.5 KiB
SQL
147 lines
4.5 KiB
SQL
-- CreateEnum
|
|
CREATE TYPE "MembershipRole" AS ENUM ('OWNER', 'ADMIN', 'SUBSCRIBER');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "PageType" AS ENUM ('POST', 'PAGE');
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "users" (
|
|
"id" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"username" TEXT NOT NULL,
|
|
"email" TEXT NOT NULL,
|
|
"emailVerified" TIMESTAMP(3),
|
|
"avatar" TEXT,
|
|
"bio" TEXT,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
"deletedAt" TIMESTAMP(3),
|
|
|
|
CONSTRAINT "users_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "login_tokens" (
|
|
"id" TEXT NOT NULL,
|
|
"email" TEXT NOT NULL,
|
|
"expiresAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "login_tokens_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "access_tokens" (
|
|
"id" TEXT NOT NULL,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"name" TEXT NOT NULL,
|
|
"token" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"publicId" TEXT,
|
|
"publicIdExpiresAt" TIMESTAMP(3),
|
|
|
|
CONSTRAINT "access_tokens_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "memberships" (
|
|
"id" TEXT NOT NULL,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"userId" TEXT NOT NULL,
|
|
"siteId" TEXT NOT NULL,
|
|
"role" "MembershipRole" NOT NULL,
|
|
"acceptedAt" TIMESTAMP(3),
|
|
"lastSwitchedTo" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"config" JSONB NOT NULL DEFAULT '{}',
|
|
|
|
CONSTRAINT "memberships_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "sites" (
|
|
"id" TEXT NOT NULL,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"icon" TEXT,
|
|
"subdomain" TEXT NOT NULL,
|
|
"primaryDomainId" TEXT,
|
|
"description" TEXT,
|
|
"twitter" TEXT,
|
|
"deletedAt" TIMESTAMP(3),
|
|
|
|
CONSTRAINT "sites_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "pages" (
|
|
"id" TEXT NOT NULL,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
"contentUpdatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"publishedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"published" BOOLEAN NOT NULL DEFAULT false,
|
|
"type" "PageType" NOT NULL DEFAULT E'POST',
|
|
"title" TEXT NOT NULL,
|
|
"content" TEXT NOT NULL,
|
|
"excerpt" TEXT NOT NULL,
|
|
"format" TEXT NOT NULL DEFAULT E'markdown',
|
|
"slug" TEXT NOT NULL,
|
|
"siteId" TEXT NOT NULL,
|
|
"deletedAt" TIMESTAMP(3),
|
|
|
|
CONSTRAINT "pages_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "domains" (
|
|
"id" TEXT NOT NULL,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
"siteId" TEXT NOT NULL,
|
|
"domain" TEXT NOT NULL,
|
|
|
|
CONSTRAINT "domains_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "users_username_key" ON "users"("username");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "users_email_key" ON "users"("email");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "access_tokens_token_key" ON "access_tokens"("token");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "access_tokens_publicId_key" ON "access_tokens"("publicId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "sites_subdomain_key" ON "sites"("subdomain");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "sites_primaryDomainId_key" ON "sites"("primaryDomainId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "pages_siteId_slug_key" ON "pages"("siteId", "slug");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "domains_domain_key" ON "domains"("domain");
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "access_tokens" ADD CONSTRAINT "access_tokens_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "memberships" ADD CONSTRAINT "memberships_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "memberships" ADD CONSTRAINT "memberships_siteId_fkey" FOREIGN KEY ("siteId") REFERENCES "sites"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "sites" ADD CONSTRAINT "sites_primaryDomainId_fkey" FOREIGN KEY ("primaryDomainId") REFERENCES "domains"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "pages" ADD CONSTRAINT "pages_siteId_fkey" FOREIGN KEY ("siteId") REFERENCES "sites"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "domains" ADD CONSTRAINT "domains_siteId_fkey" FOREIGN KEY ("siteId") REFERENCES "sites"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|