Skip to content

Commit 3549e72

Browse files
authored
Merge pull request #361 from Merit-Systems/br/email-campaigns
add apps dashboard and email outbound util to admin
2 parents b9ee6b5 + 853a1b9 commit 3549e72

File tree

16 files changed

+1256
-130
lines changed

16 files changed

+1256
-130
lines changed

echo-control/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
"@radix-ui/react-slot": "^1.2.3",
5656
"@radix-ui/react-switch": "^1.2.5",
5757
"@radix-ui/react-tabs": "^1.1.13",
58+
"@react-email/render": "^1.2.3",
5859
"@shikijs/core": "^3.11.0",
5960
"@shikijs/engine-javascript": "^3.11.0",
6061
"@shikijs/langs": "^3.11.0",
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
-- CreateTable
2+
CREATE TABLE "public"."outbound_emails_sent" (
3+
"id" UUID NOT NULL,
4+
"emailCampaignId" TEXT NOT NULL,
5+
"userId" UUID NOT NULL,
6+
"echoAppId" UUID,
7+
"createdAt" TIMESTAMPTZ(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
8+
9+
CONSTRAINT "outbound_emails_sent_pkey" PRIMARY KEY ("id")
10+
);
11+
12+
-- CreateIndex
13+
CREATE INDEX "outbound_emails_sent_emailCampaignId_idx" ON "public"."outbound_emails_sent"("emailCampaignId");
14+
15+
-- AddForeignKey
16+
ALTER TABLE "public"."outbound_emails_sent" ADD CONSTRAINT "outbound_emails_sent_userId_fkey" FOREIGN KEY ("userId") REFERENCES "public"."users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
17+
18+
-- AddForeignKey
19+
ALTER TABLE "public"."outbound_emails_sent" ADD CONSTRAINT "outbound_emails_sent_echoAppId_fkey" FOREIGN KEY ("echoAppId") REFERENCES "public"."echo_apps"("id") ON DELETE CASCADE ON UPDATE CASCADE;

echo-control/prisma/schema.prisma

Lines changed: 80 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -10,34 +10,35 @@ datasource db {
1010
}
1111

1212
model User {
13-
id String @id @default(uuid()) @db.Uuid
14-
email String @unique
15-
name String?
16-
emailVerified DateTime?
17-
image String?
18-
isArchived Boolean @default(false)
19-
archivedAt DateTime? @db.Timestamptz(6)
20-
createdAt DateTime @default(now()) @db.Timestamptz(6)
21-
updatedAt DateTime @updatedAt @db.Timestamptz(6)
22-
totalPaid Decimal @default(0) @db.Decimal(65, 14)
23-
totalSpent Decimal @default(0) @db.Decimal(65, 14)
24-
admin Boolean @default(false)
25-
referralGithubUserId String? @db.Uuid
26-
accounts Account[]
27-
sessions Session[]
28-
apiKeys ApiKey[]
29-
appMemberships AppMembership[]
30-
payments Payment[]
31-
refreshTokens RefreshToken[]
32-
transactions Transaction[]
33-
spendPoolUsage UserSpendPoolUsage[]
34-
ReferralCode ReferralCode[]
35-
appSessions AppSession[]
36-
Payout Payout[]
37-
githubLink GithubLink?
38-
latestTosVersion Decimal?
39-
latestPrivacyVersion Decimal?
13+
id String @id @default(uuid()) @db.Uuid
14+
email String @unique
15+
name String?
16+
emailVerified DateTime?
17+
image String?
18+
isArchived Boolean @default(false)
19+
archivedAt DateTime? @db.Timestamptz(6)
20+
createdAt DateTime @default(now()) @db.Timestamptz(6)
21+
updatedAt DateTime @updatedAt @db.Timestamptz(6)
22+
totalPaid Decimal @default(0) @db.Decimal(65, 14)
23+
totalSpent Decimal @default(0) @db.Decimal(65, 14)
24+
admin Boolean @default(false)
25+
referralGithubUserId String? @db.Uuid
26+
accounts Account[]
27+
sessions Session[]
28+
apiKeys ApiKey[]
29+
appMemberships AppMembership[]
30+
payments Payment[]
31+
refreshTokens RefreshToken[]
32+
transactions Transaction[]
33+
spendPoolUsage UserSpendPoolUsage[]
34+
ReferralCode ReferralCode[]
35+
appSessions AppSession[]
36+
Payout Payout[]
37+
githubLink GithubLink?
38+
latestTosVersion Decimal?
39+
latestPrivacyVersion Decimal?
4040
latestFreeCreditsVersion Decimal?
41+
OutboundEmailSent OutboundEmailSent[]
4142
4243
@@map("users")
4344
}
@@ -100,11 +101,12 @@ model EchoApp {
100101
githubLink GithubLink? // The GitHub link for this app (one-to-one)
101102
spendPools SpendPool[] // Spend pools associated with this app
102103
ReferralCode ReferralCode[]
103-
currentReferralRewardId String? @db.Uuid // Reference to current active referral reward
104-
currentReferralReward ReferralReward? @relation("CurrentReferralReward", fields: [currentReferralRewardId], references: [id])
105-
ReferralRewards ReferralReward[] @relation("AppReferralRewards") // All referral rewards for this app
104+
currentReferralRewardId String? @db.Uuid // Reference to current active referral reward
105+
currentReferralReward ReferralReward? @relation("CurrentReferralReward", fields: [currentReferralRewardId], references: [id])
106+
ReferralRewards ReferralReward[] @relation("AppReferralRewards") // All referral rewards for this app
106107
appSessions AppSession[]
107108
payouts Payout[]
109+
OutboundEmailSent OutboundEmailSent[]
108110
109111
@@map("echo_apps")
110112
}
@@ -198,21 +200,21 @@ model AppSession {
198200
}
199201

200202
model Payment {
201-
id String @id @default(uuid()) @db.Uuid
202-
paymentId String @unique
203-
amount Decimal @db.Decimal(65, 14)
204-
currency String @default("usd")
203+
id String @id @default(uuid()) @db.Uuid
204+
paymentId String @unique
205+
amount Decimal @db.Decimal(65, 14)
206+
currency String @default("usd")
205207
status String
206208
source EnumPaymentSource @default(stripe)
207209
description String?
208-
isArchived Boolean @default(false)
209-
archivedAt DateTime? @db.Timestamptz(6)
210-
createdAt DateTime @default(now()) @db.Timestamptz(6)
211-
updatedAt DateTime @updatedAt @db.Timestamptz(6)
212-
userId String @db.Uuid
213-
spendPoolId String? @db.Uuid
214-
spendPool SpendPool? @relation(fields: [spendPoolId], references: [id])
215-
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
210+
isArchived Boolean @default(false)
211+
archivedAt DateTime? @db.Timestamptz(6)
212+
createdAt DateTime @default(now()) @db.Timestamptz(6)
213+
updatedAt DateTime @updatedAt @db.Timestamptz(6)
214+
userId String @db.Uuid
215+
spendPoolId String? @db.Uuid
216+
spendPool SpendPool? @relation(fields: [spendPoolId], references: [id])
217+
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
216218
217219
@@map("payments")
218220
}
@@ -254,20 +256,20 @@ model MarkUp {
254256
}
255257

256258
model GithubLink {
257-
id String @id @default(uuid()) @db.Uuid
258-
githubId Int
259-
githubType GithubType
260-
githubUrl String
261-
description String?
262-
isArchived Boolean @default(false)
263-
archivedAt DateTime? @db.Timestamptz(6)
264-
createdAt DateTime @default(now()) @db.Timestamptz(6)
265-
updatedAt DateTime @updatedAt @db.Timestamptz(6)
266-
echoAppId String? @unique @db.Uuid
267-
userId String? @unique @db.Uuid
268-
echoApp EchoApp? @relation(fields: [echoAppId], references: [id], onDelete: Cascade)
269-
user User? @relation(fields: [userId], references: [id], onDelete: Cascade)
270-
Payout Payout[]
259+
id String @id @default(uuid()) @db.Uuid
260+
githubId Int
261+
githubType GithubType
262+
githubUrl String
263+
description String?
264+
isArchived Boolean @default(false)
265+
archivedAt DateTime? @db.Timestamptz(6)
266+
createdAt DateTime @default(now()) @db.Timestamptz(6)
267+
updatedAt DateTime @updatedAt @db.Timestamptz(6)
268+
echoAppId String? @unique @db.Uuid
269+
userId String? @unique @db.Uuid
270+
echoApp EchoApp? @relation(fields: [echoAppId], references: [id], onDelete: Cascade)
271+
user User? @relation(fields: [userId], references: [id], onDelete: Cascade)
272+
Payout Payout[]
271273
272274
@@map("github_links")
273275
}
@@ -414,18 +416,29 @@ model ReferralReward {
414416
@@map("referral_rewards")
415417
}
416418

417-
418-
419-
420419
model InFlightRequest {
421-
id String @id @default(uuid()) @db.Uuid
422-
userId String @db.Uuid
423-
echoAppId String @db.Uuid
424-
numberInFlight Int @default(0)
425-
totalEscrowed Decimal @default(0.0) @db.Decimal(65, 14)
426-
createdAt DateTime @default(now()) @db.Timestamptz(6)
427-
updatedAt DateTime @updatedAt @db.Timestamptz(6)
420+
id String @id @default(uuid()) @db.Uuid
421+
userId String @db.Uuid
422+
echoAppId String @db.Uuid
423+
numberInFlight Int @default(0)
424+
totalEscrowed Decimal @default(0.0) @db.Decimal(65, 14)
425+
createdAt DateTime @default(now()) @db.Timestamptz(6)
426+
updatedAt DateTime @updatedAt @db.Timestamptz(6)
428427
429428
@@unique([userId, echoAppId])
430429
@@map("in_flight_requests")
431-
}
430+
}
431+
432+
model OutboundEmailSent {
433+
id String @id @default(uuid()) @db.Uuid
434+
emailCampaignId String
435+
userId String @db.Uuid
436+
echoAppId String? @db.Uuid
437+
createdAt DateTime @default(now()) @db.Timestamptz(6)
438+
439+
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
440+
echoApp EchoApp? @relation(fields: [echoAppId], references: [id], onDelete: Cascade)
441+
442+
@@index([emailCampaignId])
443+
@@map("outbound_emails_sent")
444+
}

0 commit comments

Comments
 (0)