--- template/app/migrations/20231213174854_init/migration.sql +++ opensaas-sh/app/migrations/20231213174854_init/migration.sql @@ -0,0 +1,118 @@ +-- CreateTable +CREATE TABLE "User" ( + "id" SERIAL NOT NULL, + "email" TEXT, + "username" TEXT, + "password" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "lastActiveTimestamp" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "isEmailVerified" BOOLEAN NOT NULL DEFAULT false, + "isMockUser" BOOLEAN NOT NULL DEFAULT false, + "isAdmin" BOOLEAN NOT NULL DEFAULT true, + "emailVerificationSentAt" TIMESTAMP(3), + "passwordResetSentAt" TIMESTAMP(3), + "stripeId" TEXT, + "checkoutSessionId" TEXT, + "hasPaid" BOOLEAN NOT NULL DEFAULT false, + "subscriptionTier" TEXT, + "subscriptionStatus" TEXT, + "sendEmail" BOOLEAN NOT NULL DEFAULT false, + "datePaid" TIMESTAMP(3), + "credits" INTEGER NOT NULL DEFAULT 3, + + CONSTRAINT "User_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "SocialLogin" ( + "id" TEXT NOT NULL, + "provider" TEXT NOT NULL, + "providerId" TEXT NOT NULL, + "userId" INTEGER NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "SocialLogin_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "GptResponse" ( + "id" TEXT NOT NULL, + "content" TEXT NOT NULL, + "userId" INTEGER NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "GptResponse_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "ContactFormMessage" ( + "id" TEXT NOT NULL, + "content" TEXT NOT NULL, + "userId" INTEGER NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "isRead" BOOLEAN NOT NULL DEFAULT false, + "repliedAt" TIMESTAMP(3), + + CONSTRAINT "ContactFormMessage_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "DailyStats" ( + "id" SERIAL NOT NULL, + "date" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "totalViews" INTEGER NOT NULL DEFAULT 0, + "prevDayViewsChangePercent" TEXT NOT NULL DEFAULT '0', + "userCount" INTEGER NOT NULL DEFAULT 0, + "paidUserCount" INTEGER NOT NULL DEFAULT 0, + "userDelta" INTEGER NOT NULL DEFAULT 0, + "paidUserDelta" INTEGER NOT NULL DEFAULT 0, + "totalRevenue" DOUBLE PRECISION NOT NULL DEFAULT 0, + "totalProfit" DOUBLE PRECISION NOT NULL DEFAULT 0, + + CONSTRAINT "DailyStats_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "PageViewSource" ( + "date" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "name" TEXT NOT NULL, + "visitors" INTEGER NOT NULL, + "dailyStatsId" INTEGER, + + CONSTRAINT "PageViewSource_pkey" PRIMARY KEY ("date","name") +); + +-- CreateTable +CREATE TABLE "Logs" ( + "id" SERIAL NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "message" TEXT NOT NULL, + "level" TEXT NOT NULL, + + CONSTRAINT "Logs_pkey" PRIMARY KEY ("id") +); + +-- CreateIndex +CREATE UNIQUE INDEX "User_email_key" ON "User"("email"); + +-- CreateIndex +CREATE UNIQUE INDEX "User_username_key" ON "User"("username"); + +-- CreateIndex +CREATE UNIQUE INDEX "SocialLogin_provider_providerId_userId_key" ON "SocialLogin"("provider", "providerId", "userId"); + +-- CreateIndex +CREATE UNIQUE INDEX "DailyStats_date_key" ON "DailyStats"("date"); + +-- AddForeignKey +ALTER TABLE "SocialLogin" ADD CONSTRAINT "SocialLogin_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "GptResponse" ADD CONSTRAINT "GptResponse_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "ContactFormMessage" ADD CONSTRAINT "ContactFormMessage_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "PageViewSource" ADD CONSTRAINT "PageViewSource_dailyStatsId_fkey" FOREIGN KEY ("dailyStatsId") REFERENCES "DailyStats"("id") ON DELETE SET NULL ON UPDATE CASCADE;