/** * Queries de favoritos usando Prisma */ import { prisma } from "../app"; /** * Verifica se um anúncio está favoritado por um usuário */ export async function isFavorite( userId: number, listingId: number, ): Promise { const favorite = await prisma.userFavorite.findUnique({ where: { user_id_ad_id: { user_id: userId, ad_id: listingId, }, }, }); return !!favorite; } /** * Favorita um anúncio */ export async function addFavorite( userId: number, listingId: number, ): Promise { await prisma.userFavorite.upsert({ where: { user_id_ad_id: { user_id: userId, ad_id: listingId, }, }, create: { user_id: userId, ad_id: listingId, }, update: {}, // Se já existe, não faz nada }); } /** * Remove favorito de um anúncio */ export async function removeFavorite( userId: number, listingId: number, ): Promise { await prisma.userFavorite .delete({ where: { user_id_ad_id: { user_id: userId, ad_id: listingId, }, }, }) .catch(() => { // Ignorar erro se não existir (idempotente) }); } /** * Toggle favorite (favorita se não estiver, desfavorita se estiver) */ export async function toggleFavorite( userId: number, listingId: number, ): Promise { const isFavorited = await isFavorite(userId, listingId); if (isFavorited) { await removeFavorite(userId, listingId); return false; } else { await addFavorite(userId, listingId); return true; } }