const getMockupsSchema = z
.object({
cursor: z.string().optional(),
limit: z.number().min(1).max(50).default(10),
})
.default({ limit: 10 });
export const getMockups = createServerFn({ method: "GET" })
.middleware([authMiddleware])
.inputValidator(getMockupsSchema)
.handler(async ({ context, data }) => {
const session = context.session;
if (!session) {
throw new Error("Unauthorized");
}
const conditions = [eq(mockup.userId, session.user.id)];
if (data.cursor) {
conditions.push(lt(mockup.createdAt, new Date(data.cursor)));
}
const items = await db
.select({
id: mockup.id,
url: mockup.url,
prompt: mockup.prompt,
crawlingStatus: mockup.crawlingStatus,
createdAt: mockup.createdAt,
})
.from(mockup)
.where(and(...conditions))
.orderBy(desc(mockup.createdAt))
.limit(data.limit + 1);
const hasMore = items.length > data.limit;
const mockups = hasMore ? items.slice(0, -1) : items;
return {
mockups,
nextCursor: hasMore ? mockups.at(-1)?.createdAt.toISOString() : null,
hasMore,
};
});
const getMockupsSchema = z
.object({
cursor: z.string().optional(),
limit: z.number().min(1).max(50).default(10),
})
.default({ limit: 10 });
export const getMockups = createServerFn({ method: "GET" })
.middleware([authMiddleware])
.inputValidator(getMockupsSchema)
.handler(async ({ context, data }) => {
const session = context.session;
if (!session) {
throw new Error("Unauthorized");
}
const conditions = [eq(mockup.userId, session.user.id)];
if (data.cursor) {
conditions.push(lt(mockup.createdAt, new Date(data.cursor)));
}
const items = await db
.select({
id: mockup.id,
url: mockup.url,
prompt: mockup.prompt,
crawlingStatus: mockup.crawlingStatus,
createdAt: mockup.createdAt,
})
.from(mockup)
.where(and(...conditions))
.orderBy(desc(mockup.createdAt))
.limit(data.limit + 1);
const hasMore = items.length > data.limit;
const mockups = hasMore ? items.slice(0, -1) : items;
return {
mockups,
nextCursor: hasMore ? mockups.at(-1)?.createdAt.toISOString() : null,
hasMore,
};
});