review-data/src/app/api/skus/route.ts

72 lines
1.8 KiB
TypeScript

import { NextRequest, NextResponse } from "next/server";
import { initDB } from "@/utils/init-db";
import { AppDataSource } from "@/utils/data-source";
import { Sku } from "@/entities/Sku";
export async function GET(req: NextRequest) {
await initDB();
const repo = AppDataSource.getRepository(Sku);
const { searchParams } = new URL(req.url);
const page = Number(searchParams.get("page") || 1);
const limit = Number(searchParams.get("limit") || 10);
const search = searchParams.get("search")?.trim() || "";
const skip = (page - 1) * limit;
const queryBuilder = repo.createQueryBuilder("sku");
if (search) {
queryBuilder.where("sku.sku LIKE :search", { search: `%${search}%` });
}
queryBuilder
.select([
"sku.id",
"sku.sku",
"sku.normalized_title",
"sku.normalized_short_description",
"sku.status",
"sku.normalized_html",
])
.orderBy("sku.created_at", "DESC")
.addOrderBy("sku.id", "DESC") // <--- quan trọng, tránh trùng record
.skip(skip)
.take(limit);
const [data, total] = await queryBuilder.getManyAndCount();
return NextResponse.json({
data,
pagination: {
total,
page,
limit,
totalPages: Math.ceil(total / limit),
},
});
}
export async function PUT(req: NextRequest) {
await initDB();
const body = await req.json();
const repo = AppDataSource.getRepository(Sku);
const sku = await repo.findOneBy({ id: body.id });
if (!sku) return NextResponse.json({ error: "Not found" }, { status: 404 });
const result = await repo.update({ id: sku.id }, { ...body });
if (!result)
return NextResponse.json(
{ error: "Can't update " + sku.sku },
{ status: 400 }
);
return NextResponse.json({
error: false,
message: `Updated ${sku.sku} success`,
});
}