Refactor code
This commit is contained in:
@ -1,39 +1,24 @@
|
||||
"use server";
|
||||
|
||||
import type { Prisma } from "@/generated/prisma/client";
|
||||
import { prisma } from "@/lib/prisma";
|
||||
import {
|
||||
commissionRequestTableRowSchema,
|
||||
commissionStatusSchema,
|
||||
} from "@/schemas/commissions/requests";
|
||||
import { z } from "zod";
|
||||
|
||||
export type CursorPagination = { pageIndex: number; pageSize: number };
|
||||
export type SortDir = "asc" | "desc";
|
||||
|
||||
const triStateSchema = z.enum(["any", "true", "false"]);
|
||||
|
||||
const sortingSchema = z.array(
|
||||
z.object({
|
||||
id: z.string(),
|
||||
desc: z.boolean(),
|
||||
})
|
||||
);
|
||||
|
||||
const filtersSchema = z.object({
|
||||
q: z.string().optional(),
|
||||
email: z.string().optional(),
|
||||
status: z.union([z.literal("any"), commissionStatusSchema]).default("any"),
|
||||
hasFiles: triStateSchema.default("any"),
|
||||
});
|
||||
import { commissionRequestTableRowSchema } from "@/schemas/commissions/requests";
|
||||
import type {
|
||||
CommissionRequestsTableFilters,
|
||||
CommissionRequestsTableSorting,
|
||||
} from "@/schemas/commissions/requestsTable";
|
||||
import type { CursorPagination } from "@/types/pagination";
|
||||
import { z } from "zod/v4";
|
||||
|
||||
// Builds a paginated, filtered, and sorted commission-requests table payload for the admin UI.
|
||||
export async function getCommissionRequestsTablePage(input: {
|
||||
pagination: CursorPagination;
|
||||
sorting: z.infer<typeof sortingSchema>;
|
||||
filters: z.infer<typeof filtersSchema>;
|
||||
sorting: CommissionRequestsTableSorting;
|
||||
filters: CommissionRequestsTableFilters;
|
||||
}) {
|
||||
const { pagination, sorting, filters } = input;
|
||||
|
||||
const where: any = {};
|
||||
const where: Prisma.CommissionRequestWhereInput = {};
|
||||
|
||||
if (filters.q) {
|
||||
const q = filters.q.trim();
|
||||
@ -60,7 +45,7 @@ export async function getCommissionRequestsTablePage(input: {
|
||||
|
||||
// sorting
|
||||
const sort = sorting?.[0] ?? { id: "createdAt", desc: true };
|
||||
const orderBy: any =
|
||||
const orderBy: Prisma.CommissionRequestOrderByWithRelationInput =
|
||||
sort.id === "createdAt"
|
||||
? { createdAt: sort.desc ? "desc" : "asc" }
|
||||
: sort.id === "status"
|
||||
@ -94,7 +79,7 @@ export async function getCommissionRequestsTablePage(input: {
|
||||
customerName: r.customerName,
|
||||
customerEmail: r.customerEmail,
|
||||
customerSocials: r.customerSocials ?? null,
|
||||
status: r.status as any,
|
||||
status: r.status,
|
||||
fileCount: r._count.files,
|
||||
}));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user