@varaos/db 1.5.2 → 1.5.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
-- Migration: add_system_announcements
|
|
2
|
+
-- Description:
|
|
3
|
+
-- 1. Add TargetSegment enum for audience targeting
|
|
4
|
+
-- 2. Add SystemAnnouncement table for broadcast messages
|
|
5
|
+
-- 3. Add UserAnnouncementRead table for read receipts
|
|
6
|
+
|
|
7
|
+
-- ============================================================
|
|
8
|
+
-- 1. ENUM: TargetSegment
|
|
9
|
+
-- ============================================================
|
|
10
|
+
|
|
11
|
+
CREATE TYPE "TargetSegment" AS ENUM (
|
|
12
|
+
'all',
|
|
13
|
+
'free_plan',
|
|
14
|
+
'pro_plan',
|
|
15
|
+
'business',
|
|
16
|
+
'enterprise',
|
|
17
|
+
'admin'
|
|
18
|
+
);
|
|
19
|
+
|
|
20
|
+
-- ============================================================
|
|
21
|
+
-- 2. TABLE: SystemAnnouncement
|
|
22
|
+
-- ============================================================
|
|
23
|
+
|
|
24
|
+
CREATE TABLE "SystemAnnouncement" (
|
|
25
|
+
"id" TEXT NOT NULL,
|
|
26
|
+
"title" TEXT NOT NULL,
|
|
27
|
+
"body" TEXT,
|
|
28
|
+
"type" TEXT NOT NULL,
|
|
29
|
+
"actionUrl" TEXT,
|
|
30
|
+
"targetSegment" "TargetSegment" NOT NULL DEFAULT 'all',
|
|
31
|
+
"active" BOOLEAN NOT NULL DEFAULT true,
|
|
32
|
+
"expiresAt" TIMESTAMP(3),
|
|
33
|
+
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
34
|
+
|
|
35
|
+
CONSTRAINT "SystemAnnouncement_pkey" PRIMARY KEY ("id")
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
-- ============================================================
|
|
39
|
+
-- 3. TABLE: UserAnnouncementRead
|
|
40
|
+
-- ============================================================
|
|
41
|
+
|
|
42
|
+
CREATE TABLE "UserAnnouncementRead" (
|
|
43
|
+
"id" TEXT NOT NULL,
|
|
44
|
+
"userId" TEXT NOT NULL,
|
|
45
|
+
"announcementId" TEXT NOT NULL,
|
|
46
|
+
"readAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
47
|
+
|
|
48
|
+
CONSTRAINT "UserAnnouncementRead_pkey" PRIMARY KEY ("id")
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
-- ============================================================
|
|
52
|
+
-- 4. UNIQUE CONSTRAINT
|
|
53
|
+
-- ============================================================
|
|
54
|
+
|
|
55
|
+
CREATE UNIQUE INDEX "UserAnnouncementRead_userId_announcementId_key"
|
|
56
|
+
ON "UserAnnouncementRead"("userId", "announcementId");
|
|
57
|
+
|
|
58
|
+
-- ============================================================
|
|
59
|
+
-- 5. INDEX
|
|
60
|
+
-- ============================================================
|
|
61
|
+
|
|
62
|
+
CREATE INDEX "UserAnnouncementRead_userId_idx"
|
|
63
|
+
ON "UserAnnouncementRead"("userId");
|
|
64
|
+
|
|
65
|
+
-- ============================================================
|
|
66
|
+
-- 6. FOREIGN KEYS
|
|
67
|
+
-- ============================================================
|
|
68
|
+
|
|
69
|
+
ALTER TABLE "UserAnnouncementRead"
|
|
70
|
+
ADD CONSTRAINT "UserAnnouncementRead_userId_fkey"
|
|
71
|
+
FOREIGN KEY ("userId") REFERENCES "User"("id")
|
|
72
|
+
ON DELETE CASCADE ON UPDATE CASCADE;
|
|
73
|
+
|
|
74
|
+
ALTER TABLE "UserAnnouncementRead"
|
|
75
|
+
ADD CONSTRAINT "UserAnnouncementRead_announcementId_fkey"
|
|
76
|
+
FOREIGN KEY ("announcementId") REFERENCES "SystemAnnouncement"("id")
|
|
77
|
+
ON DELETE CASCADE ON UPDATE CASCADE;
|
package/prisma/schema.prisma
CHANGED
|
@@ -307,6 +307,15 @@ enum ToolStatus {
|
|
|
307
307
|
beta
|
|
308
308
|
}
|
|
309
309
|
|
|
310
|
+
enum TargetSegment {
|
|
311
|
+
all // Broadcast to every active user in the system
|
|
312
|
+
free_plan // Broadcast only to users on the free plan (e.g. upselling campaigns)
|
|
313
|
+
pro_plan // Broadcast only to users on the pro plan (e.g. announcing new premium features)
|
|
314
|
+
business // Broadcast to users on the business plan
|
|
315
|
+
enterprise // Broadcast only to enterprise plan users
|
|
316
|
+
admin // Internal broadcast only for system admins and moderators
|
|
317
|
+
}
|
|
318
|
+
|
|
310
319
|
/// ─────────────────────────────────────────────
|
|
311
320
|
/// USERS & AUTH
|
|
312
321
|
/// ─────────────────────────────────────────────
|
|
@@ -1115,6 +1124,35 @@ model Notification {
|
|
|
1115
1124
|
@@index([type])
|
|
1116
1125
|
}
|
|
1117
1126
|
|
|
1127
|
+
model SystemAnnouncement {
|
|
1128
|
+
id String @id @default(uuid())
|
|
1129
|
+
title String
|
|
1130
|
+
body String? @db.Text
|
|
1131
|
+
type String // e.g. 'info', 'warning', 'feature', 'maintenance'
|
|
1132
|
+
actionUrl String?
|
|
1133
|
+
|
|
1134
|
+
targetSegment TargetSegment @default(all)
|
|
1135
|
+
|
|
1136
|
+
active Boolean @default(true)
|
|
1137
|
+
expiresAt DateTime?
|
|
1138
|
+
createdAt DateTime @default(now())
|
|
1139
|
+
|
|
1140
|
+
readReceipts UserAnnouncementRead[]
|
|
1141
|
+
}
|
|
1142
|
+
|
|
1143
|
+
model UserAnnouncementRead {
|
|
1144
|
+
id String @id @default(uuid())
|
|
1145
|
+
userId String
|
|
1146
|
+
announcementId String
|
|
1147
|
+
readAt DateTime @default(now())
|
|
1148
|
+
|
|
1149
|
+
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
1150
|
+
announcement SystemAnnouncement @relation(fields: [announcementId], references: [id], onDelete: Cascade)
|
|
1151
|
+
|
|
1152
|
+
@@unique([userId, announcementId])
|
|
1153
|
+
@@index([userId])
|
|
1154
|
+
}
|
|
1155
|
+
|
|
1118
1156
|
model ChatSession {
|
|
1119
1157
|
id String @id @default(uuid())
|
|
1120
1158
|
title String?
|