Skip to content

Commit 805d48e

Browse files
authored
Remove programEnrollment dependency on notify-partner/program (dubinc#3099)
1 parent 2abce74 commit 805d48e

2 files changed

Lines changed: 75 additions & 86 deletions

File tree

apps/web/app/(ee)/api/cron/messages/notify-partner/route.ts

Lines changed: 36 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -33,52 +33,50 @@ export async function POST(req: Request) {
3333
JSON.parse(rawBody),
3434
);
3535

36-
const programEnrollment = await prisma.programEnrollment.findUniqueOrThrow({
37-
where: {
38-
partnerId_programId: {
39-
partnerId,
40-
programId,
36+
const [partner, program] = await Promise.all([
37+
prisma.partner.findUniqueOrThrow({
38+
where: {
39+
id: partnerId,
4140
},
42-
status: "approved",
43-
},
44-
include: {
45-
program: true,
46-
partner: {
47-
include: {
48-
messages: {
49-
where: {
50-
programId,
51-
createdAt: {
52-
gt: subDays(new Date(), 3), // sent in the last 3 days
53-
},
54-
senderPartnerId: null, // not sent by the partner
55-
readInApp: null, // unread messages only
56-
readInEmail: null, // unread messages only
57-
},
58-
orderBy: {
59-
createdAt: "desc",
60-
},
61-
include: {
62-
senderUser: true,
41+
include: {
42+
messages: {
43+
where: {
44+
programId,
45+
createdAt: {
46+
gt: subDays(new Date(), 3), // sent in the last 3 days
6347
},
48+
senderPartnerId: null, // not sent by the partner
49+
readInApp: null, // unread messages only
50+
readInEmail: null, // unread messages only
6451
},
65-
users: {
66-
include: {
67-
user: true,
68-
},
69-
where: {
70-
notificationPreferences: {
71-
newMessageFromProgram: true,
72-
},
52+
orderBy: {
53+
createdAt: "desc",
54+
},
55+
include: {
56+
senderUser: true,
57+
},
58+
},
59+
users: {
60+
include: {
61+
user: true,
62+
},
63+
where: {
64+
notificationPreferences: {
65+
newMessageFromProgram: true,
7366
},
7467
},
7568
},
7669
},
77-
},
78-
});
70+
}),
71+
prisma.program.findUniqueOrThrow({
72+
where: {
73+
id: programId,
74+
},
75+
}),
76+
]);
7977

8078
// unread messages are already sorted by latest message first
81-
const unreadMessages = programEnrollment.partner.messages;
79+
const unreadMessages = partner.messages;
8280

8381
if (unreadMessages.length === 0)
8482
return logAndRespond(
@@ -91,7 +89,7 @@ export async function POST(req: Request) {
9189
`There is a more recent unread message than ${lastMessageId}. Skipping...`,
9290
);
9391

94-
const partnerUsersToNotify = programEnrollment.partner.users
92+
const partnerUsersToNotify = partner.users
9593
.map(({ user }) => user)
9694
.filter(Boolean) as { email: string; id: string }[];
9795

@@ -100,8 +98,6 @@ export async function POST(req: Request) {
10098
`No partner emails to notify for partner ${partnerId}. Skipping...`,
10199
);
102100

103-
const program = programEnrollment.program;
104-
105101
const { data, error } = await sendBatchEmail(
106102
partnerUsersToNotify.map(({ email }) => ({
107103
subject: `${program.name} sent ${unreadMessages.length === 1 ? "a message" : `${unreadMessages.length} messages`}`,

apps/web/app/(ee)/api/cron/messages/notify-program/route.ts

Lines changed: 39 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -33,60 +33,55 @@ export async function POST(req: Request) {
3333
JSON.parse(rawBody),
3434
);
3535

36-
const programEnrollment = await prisma.programEnrollment.findUniqueOrThrow({
37-
where: {
38-
partnerId_programId: {
39-
partnerId,
40-
programId,
36+
const [program, partner] = await Promise.all([
37+
prisma.program.findUniqueOrThrow({
38+
where: {
39+
id: programId,
4140
},
42-
status: "approved",
43-
},
44-
include: {
45-
program: {
46-
include: {
47-
workspace: {
48-
include: {
49-
users: {
50-
include: {
51-
user: true,
52-
},
53-
where: {
54-
notificationPreference: {
55-
newMessageFromPartner: true,
56-
},
57-
},
58-
},
41+
include: {
42+
messages: {
43+
where: {
44+
partnerId,
45+
senderPartnerId: {
46+
not: null, // Sent by the partner
47+
},
48+
createdAt: {
49+
gt: subDays(new Date(), 3), // Sent in the last 3 days
5950
},
51+
readInApp: null, // Unread
52+
readInEmail: null, // Unread
53+
},
54+
orderBy: {
55+
createdAt: "desc",
56+
},
57+
include: {
58+
senderPartner: true,
6059
},
6160
},
62-
},
63-
partner: {
64-
include: {
65-
messages: {
66-
where: {
67-
programId,
68-
senderPartnerId: {
69-
not: null, // Sent by the partner
61+
workspace: {
62+
include: {
63+
users: {
64+
include: {
65+
user: true,
7066
},
71-
createdAt: {
72-
gt: subDays(new Date(), 3), // Sent in the last 3 days
67+
where: {
68+
notificationPreference: {
69+
newMessageFromPartner: true,
70+
},
7371
},
74-
readInApp: null, // Unread
75-
readInEmail: null, // Unread
76-
},
77-
orderBy: {
78-
createdAt: "desc",
79-
},
80-
include: {
81-
senderPartner: true,
8272
},
8373
},
8474
},
8575
},
86-
},
87-
});
76+
}),
77+
prisma.partner.findUniqueOrThrow({
78+
where: {
79+
id: partnerId,
80+
},
81+
}),
82+
]);
8883

89-
const unreadMessages = programEnrollment.partner.messages;
84+
const unreadMessages = program.messages;
9085

9186
// unread messages are already sorted by latest message first
9287
if (unreadMessages.length === 0)
@@ -100,7 +95,7 @@ export async function POST(req: Request) {
10095
`There is a more recent unread message than ${lastMessageId}. Skipping...`,
10196
);
10297

103-
const usersToNotify = programEnrollment.program.workspace.users
98+
const usersToNotify = program.workspace.users
10499
.map(({ user }) => user)
105100
.filter(Boolean) as { email: string; id: string }[];
106101

@@ -109,8 +104,6 @@ export async function POST(req: Request) {
109104
`No program user emails to notify from partner ${partnerId}. Skipping...`,
110105
);
111106

112-
const { program, partner } = programEnrollment;
113-
114107
const { data, error } = await sendBatchEmail(
115108
usersToNotify.map(({ email }) => ({
116109
subject: `${unreadMessages.length === 1 ? "New message from" : `${unreadMessages.length} new messages from`} ${partner.name}`,

0 commit comments

Comments
 (0)