/** * Queries de bids usando Prisma * Migrado de lib/db/queries/bids.ts */ import { prisma } from "../app"; export interface Bid { bid_id: number; listing_id: number; bidder_id: number; bid_amount: number; bid_type: "pix" | "tibia_coins" | "gold_coins" | null; created_at: Date; is_active: boolean; } export interface CreateBidData { listing_id: number; bidder_id: number; bid_amount: number; bid_type?: "pix" | "tibia_coins" | "gold_coins"; } /** * Cria um novo lance */ export async function createBid(data: CreateBidData): Promise { const bid = await prisma.bid.create({ data: { listing_id: data.listing_id, bidder_id: data.bidder_id, bid_amount: data.bid_amount, bid_type: data.bid_type || null, }, }); return { ...bid, bid_amount: Number(bid.bid_amount), bid_type: bid.bid_type as "pix" | "tibia_coins" | "gold_coins" | null, }; } /** * Busca lances de um anĂșncio */ export async function getBidsByListing( listingId: number, activeOnly: boolean = true, ): Promise { const bids = await prisma.bid.findMany({ where: { listing_id: listingId, ...(activeOnly ? { is_active: true } : {}), }, orderBy: [{ bid_amount: "desc" }, { created_at: "desc" }], }); return bids.map((bid) => ({ ...bid, bid_amount: Number(bid.bid_amount), bid_type: bid.bid_type as "pix" | "tibia_coins" | "gold_coins" | null, })); } /** * Busca o maior lance de um anĂșncio */ export async function getHighestBid(listingId: number): Promise { const bid = await prisma.bid.findFirst({ where: { listing_id: listingId, is_active: true, }, orderBy: [{ bid_amount: "desc" }, { created_at: "desc" }], }); if (!bid) return null; return { ...bid, bid_amount: Number(bid.bid_amount), bid_type: bid.bid_type as "pix" | "tibia_coins" | "gold_coins" | null, }; } /** * Cancela um lance (desativa) */ export async function cancelBid(bidId: number): Promise { const result = await prisma.bid.updateMany({ where: { bid_id: bidId }, data: { is_active: false }, }); return result.count > 0; } /** * Busca lance por ID */ export async function getBidById(bidId: number): Promise { const bid = await prisma.bid.findUnique({ where: { bid_id: bidId }, }); if (!bid) return null; return { ...bid, bid_amount: Number(bid.bid_amount), bid_type: bid.bid_type as "pix" | "tibia_coins" | "gold_coins" | null, }; }