forked from hikmet4434/winninghunter
Initial WinningHunter MVP
This commit is contained in:
@@ -0,0 +1,30 @@
|
||||
import { NextResponse } from "next/server";
|
||||
import { Prisma } from "@prisma/client";
|
||||
import { prisma } from "@/lib/db";
|
||||
import { currentUser } from "@/lib/auth/current-user";
|
||||
|
||||
export async function GET(req: Request) {
|
||||
const user = await currentUser();
|
||||
if (!user) return NextResponse.json({ error: "UNAUTHORIZED" }, { status: 401 });
|
||||
|
||||
const url = new URL(req.url);
|
||||
const q = url.searchParams.get("q")?.trim();
|
||||
const niche = url.searchParams.get("niche");
|
||||
const country = url.searchParams.get("country");
|
||||
const sort = url.searchParams.get("sort") || "revenue_desc";
|
||||
const page = Math.max(1, Number(url.searchParams.get("page") || 1));
|
||||
const limit = Math.min(100, Math.max(1, Number(url.searchParams.get("limit") || 25)));
|
||||
|
||||
const where: Prisma.StoreWhereInput = {};
|
||||
if (niche) where.niche = { contains: niche, mode: "insensitive" };
|
||||
if (country) where.country = country;
|
||||
if (q) where.OR = [{ name: { contains: q, mode: "insensitive" } }, { domain: { contains: q, mode: "insensitive" } }, { niche: { contains: q, mode: "insensitive" } }];
|
||||
|
||||
const orderBy: Prisma.StoreOrderByWithRelationInput = sort === "traffic_desc" ? { monthlyVisits: "desc" } : sort === "growth_desc" ? { monthlyVisitGrowth: "desc" } : { estRevenue30dMax: "desc" };
|
||||
|
||||
const [total, rows] = await Promise.all([
|
||||
prisma.store.count({ where }),
|
||||
prisma.store.findMany({ where, orderBy, skip: (page - 1) * limit, take: limit, include: { products: { where: { isBestSeller: true }, take: 3 }, brandPages: { include: { _count: { select: { ads: true } } }, take: 1 } } })
|
||||
]);
|
||||
return NextResponse.json({ data: rows, pagination: { page, limit, total } });
|
||||
}
|
||||
Reference in New Issue
Block a user