support paged launcher history queries
ci/woodpecker/push/woodpecker Pipeline was successful

This commit is contained in:
2026-07-07 09:25:03 +09:00
parent 0951283c8b
commit 2b46274865
+24 -8
View File
@@ -428,18 +428,34 @@ export class LauncherService {
} }
listBuildJobs(query: ListLauncherBuildJobsQuery = {}) { listBuildJobs(query: ListLauncherBuildJobsQuery = {}) {
const paged = Boolean(query.page || query.limit || query.target || query.since);
const page = toPositiveInt(query.page, 1); const page = toPositiveInt(query.page, 1);
const limit = Math.min(toPositiveInt(query.limit, 30), 100); const limit = Math.min(toPositiveInt(query.limit, 30), 100);
const since = query.since ? new Date(query.since) : null; const since = query.since ? new Date(query.since) : null;
const where = {
...(query.target ? { target: query.target } : {}),
...(since && Number.isFinite(since.getTime()) ? { createdAt: { gte: since } } : {}),
};
return this.prisma.launcherBuildJob.findMany({ if (!paged) {
where: { return this.prisma.launcherBuildJob.findMany({
...(query.target ? { target: query.target } : {}), orderBy: { createdAt: 'desc' },
...(since && Number.isFinite(since.getTime()) ? { createdAt: { gte: since } } : {}), take: 30,
}, });
orderBy: { createdAt: 'desc' }, }
skip: (page - 1) * limit,
take: limit, return this.prisma.$transaction(async (tx) => {
const [jobs, total] = await Promise.all([
tx.launcherBuildJob.findMany({
where,
orderBy: { createdAt: 'desc' },
skip: (page - 1) * limit,
take: limit,
}),
tx.launcherBuildJob.count({ where }),
]);
return { jobs, total, page, limit };
}); });
} }