72 lines
1.8 KiB
TypeScript
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`,
|
|
});
|
|
}
|