diff --git a/backend/services/mining-admin-service/prisma/migrations/20260302_add_notifications/migration.sql b/backend/services/mining-admin-service/prisma/migrations/20260302_add_notifications/migration.sql new file mode 100644 index 00000000..b5318d5d --- /dev/null +++ b/backend/services/mining-admin-service/prisma/migrations/20260302_add_notifications/migration.sql @@ -0,0 +1,63 @@ +-- 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', 'SPECIFIC'); + +-- CreateTable +CREATE TABLE "notifications" ( + "id" TEXT NOT NULL, + "title" TEXT NOT NULL, + "content" TEXT NOT NULL, + "type" "NotificationType" NOT NULL DEFAULT 'SYSTEM', + "priority" "NotificationPriority" NOT NULL DEFAULT 'NORMAL', + "target_type" "TargetType" NOT NULL DEFAULT 'ALL', + "image_url" TEXT, + "link_url" TEXT, + "is_enabled" BOOLEAN NOT NULL DEFAULT true, + "requires_force_read" BOOLEAN NOT NULL DEFAULT false, + "published_at" TIMESTAMP(3), + "expires_at" TIMESTAMP(3), + "created_by" TEXT NOT NULL DEFAULT 'admin', + "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updated_at" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "notifications_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "notification_reads" ( + "id" TEXT NOT NULL, + "notification_id" TEXT NOT NULL, + "user_serial_num" TEXT NOT NULL, + "read_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "notification_reads_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "notification_user_targets" ( + "id" TEXT NOT NULL, + "notification_id" TEXT NOT NULL, + "account_sequence" TEXT NOT NULL, + + CONSTRAINT "notification_user_targets_pkey" PRIMARY KEY ("id") +); + +-- CreateIndex +CREATE INDEX "notifications_is_enabled_published_at_idx" ON "notifications"("is_enabled", "published_at"); + +-- CreateIndex +CREATE INDEX "notifications_type_idx" ON "notifications"("type"); + +-- CreateIndex +CREATE UNIQUE INDEX "notification_reads_notification_id_user_serial_num_key" ON "notification_reads"("notification_id", "user_serial_num"); + +-- CreateIndex +CREATE INDEX "notification_reads_user_serial_num_idx" ON "notification_reads"("user_serial_num"); + +-- CreateIndex +CREATE UNIQUE INDEX "notification_user_targets_notification_id_account_sequence_key" ON "notification_user_targets"("notification_id", "account_sequence");