paginate payments history

This commit is contained in:
m5r
2021-10-03 20:24:46 +02:00
parent bbfe08959c
commit 5f3060c591
5 changed files with 168 additions and 14 deletions

View File

@ -1,21 +1,56 @@
import { resolver } from "blitz";
import { paginate, resolver } from "blitz";
import { z } from "zod";
import db from "db";
import { getPayments } from "integrations/paddle";
export default resolver.pipe(resolver.authorize(), async (_ = null, { session }) => {
const Body = z.object({
skip: z.number().optional(),
take: z.number().optional(),
});
export default resolver.pipe(resolver.zod(Body), resolver.authorize(), async ({ skip, take }, { session }) => {
if (!session.orgId) {
return [];
return {
payments: [],
nextPage: null,
hasMore: false,
count: 0,
};
}
const subscriptions = await db.subscription.findMany({ where: { organizationId: session.orgId } });
if (subscriptions.length === 0) {
return [];
return {
payments: [],
nextPage: null,
hasMore: false,
count: 0,
};
}
const paymentsBySubscription = await Promise.all(
subscriptions.map((subscription) => getPayments({ subscriptionId: subscription.paddleSubscriptionId })),
);
const payments = paymentsBySubscription.flat();
return payments.sort((a, b) => b.payout_date.localeCompare(a.payout_date));
const unsortedPayments = paymentsBySubscription.flat();
const allPayments = Array.from(unsortedPayments).sort((a, b) => b.payout_date.localeCompare(a.payout_date));
const {
items: payments,
hasMore,
nextPage,
count,
} = await paginate({
skip,
take,
count: () => Promise.resolve(allPayments.length),
query: ({ skip, take }) => Promise.resolve(allPayments.slice(skip, skip + take)),
});
return {
payments,
nextPage,
hasMore,
count,
};
});