54 lines
1.8 KiB
SQL
54 lines
1.8 KiB
SQL
-- CreateEnum
|
|
CREATE TYPE "NotificationType" AS ENUM ('SYSTEM', 'ACTIVITY', 'REWARD', 'UPGRADE', 'ANNOUNCEMENT');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "NotificationPriority" AS ENUM ('LOW', 'NORMAL', 'HIGH', 'URGENT');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "TargetType" AS ENUM ('ALL', 'NEW_USER', 'VIP');
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "notifications" (
|
|
"id" TEXT NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"content" TEXT NOT NULL,
|
|
"type" "NotificationType" NOT NULL,
|
|
"priority" "NotificationPriority" NOT NULL DEFAULT 'NORMAL',
|
|
"targetType" "TargetType" NOT NULL DEFAULT 'ALL',
|
|
"imageUrl" TEXT,
|
|
"linkUrl" TEXT,
|
|
"isEnabled" BOOLEAN NOT NULL DEFAULT true,
|
|
"publishedAt" TIMESTAMP(3),
|
|
"expiresAt" TIMESTAMP(3),
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
"createdBy" TEXT NOT NULL,
|
|
|
|
CONSTRAINT "notifications_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "notification_reads" (
|
|
"id" TEXT NOT NULL,
|
|
"notificationId" TEXT NOT NULL,
|
|
"userSerialNum" TEXT NOT NULL,
|
|
"readAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "notification_reads_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "notifications_isEnabled_publishedAt_idx" ON "notifications"("isEnabled", "publishedAt");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "notifications_type_idx" ON "notifications"("type");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "notification_reads_userSerialNum_idx" ON "notification_reads"("userSerialNum");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "notification_reads_notificationId_userSerialNum_key" ON "notification_reads"("notificationId", "userSerialNum");
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "notification_reads" ADD CONSTRAINT "notification_reads_notificationId_fkey" FOREIGN KEY ("notificationId") REFERENCES "notifications"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|