FEAT: Optimize data retrieval and add new indexes for performance improvements

This commit is contained in:
Dries Augustyns
2025-08-22 14:17:21 +02:00
parent 179250d74e
commit 51b40cc069
3 changed files with 146 additions and 28 deletions
+46 -27
View File
@@ -145,41 +145,60 @@ export class ProjectService {
const itemsPerPage = 10;
const skip = (page - 1) * itemsPerPage;
const triggers = await prisma.trigger.findMany({
where: { contact: { projectId: id } },
include: {
contact: {
select: {
id: true,
email: true,
const [triggers, emails] = await Promise.all([
prisma.trigger.findMany({
where: {
contact: {
projectId: id
}
},
select: {
id: true,
createdAt: true,
contact: {
select: {
id: true,
email: true,
},
},
event: {
select: {
name: true,
},
},
},
event: {
select: {
name: true,
orderBy: {createdAt: 'desc'},
take: itemsPerPage,
skip,
}),
prisma.email.findMany({
where: {
contact: {
projectId: id
}
},
select: {
id: true,
createdAt: true,
messageId: true,
status: true,
contact: {
select: {
id: true,
email: true,
},
},
},
},
orderBy: { createdAt: "desc" },
});
const emails = await prisma.email.findMany({
where: { contact: { projectId: id } },
include: {
contact: {
select: {
id: true,
email: true,
},
},
},
orderBy: { createdAt: "desc" },
});
orderBy: {createdAt: 'desc'},
take: itemsPerPage,
skip,
}),
]);
const combined = [...triggers, ...emails];
combined.sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime());
return combined.slice(skip, skip + itemsPerPage);
return combined.slice(0, itemsPerPage);
}
public static usage(id: string) {