import Link from "next/link";
import { and, desc, eq, gt, isNull } from "drizzle-orm";
import { redirect } from "next/navigation";
import { connection } from "next/server";
import { getDb } from "@/db";
import { commissionCheckouts, commissionTickets } from "@/db/schema";
import { CommissionLiveRefresh } from "@/components/commission/live-refresh";
import { SiteHeader } from "@/components/public/site-header";
import { Badge } from "@/components/ui/badge";
import { Card, CardAction, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
import { getCustomerSession } from "@/lib/auth/server";
import { CHECKOUT_DURATION_MS, checkoutNow } from "@/lib/commission/checkout-expiration";
export const instant = false;
export default async function CommissionTicketsPage() {
await connection();
const session = await getCustomerSession();
if (!session) redirect("/auth/login?next=%2Fcommission%2Ftickets");
const [tickets, pending] = await Promise.all([
getDb().select({ ticket: commissionTickets, amount: commissionCheckouts.amountBaht })
.from(commissionTickets).innerJoin(commissionCheckouts, eq(commissionTickets.checkoutId, commissionCheckouts.id))
.where(eq(commissionTickets.userId, session.user.id)).orderBy(desc(commissionTickets.updatedAt)).limit(50),
getDb().select({ id: commissionCheckouts.id, amount: commissionCheckouts.amountBaht,
createdAt: commissionCheckouts.createdAt }).from(commissionCheckouts)
.leftJoin(commissionTickets, eq(commissionTickets.checkoutId, commissionCheckouts.id))
.where(and(eq(commissionCheckouts.userId, session.user.id), isNull(commissionTickets.id),
gt(commissionCheckouts.createdAt, new Date(checkoutNow() - CHECKOUT_DURATION_MS))))
.orderBy(desc(commissionCheckouts.createdAt)).limit(20),
]);
return
คำขอของฉัน
แต่ละคำขอมีแชตสำหรับรับผลและพูดคุยกับทีมงาน (Ticket) สถานะแชตบอกว่ายังส่งข้อความได้หรือไม่ ส่วนความคืบหน้าของงานสอบถามได้ในแชต
สร้างคำขอเพิ่ม
{pending.length > 0 && รอชำระเงิน
}
{pending.map((checkout) =>
รอชำระเงิน - ฿{checkout.amount}
{checkout.createdAt.toLocaleString("th-TH")}
)}
คำขอที่ชำระเงินแล้ว
{tickets.length === 0 && ยังไม่มีคำขอที่ชำระเงินแล้ว
}
{tickets.map(({ ticket, amount }) =>
{ticket.title || `Ticket #${ticket.id.slice(0, 8)}`}
{ticket.status === "open" ? "แชตเปิดอยู่" : "แชตปิดแล้ว"}
฿{amount} - {ticket.updatedAt.toLocaleString("th-TH")}
)}
;
}