Files
pagodera/lib/prisma/queries/favorites.ts
T
Evandro Fonseca Junior ab37b477df feat: implement market page with QueryProvider and dynamic listings
- wrap root layout with QueryProvider for React Query
- replace market UnderConstruction placeholder with MarketClient and real data fetching
- implement search, pagination, and sort via search params using getActiveListings
- add necessary client components and queries
- update dependencies (e.g., prisma, pkg-types)
2025-11-05 01:58:03 -03:00

73 lines
1.5 KiB
TypeScript

/**
* 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<boolean> {
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<void> {
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<void> {
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<boolean> {
const isFavorited = await isFavorite(userId, listingId);
if (isFavorited) {
await removeFavorite(userId, listingId);
return false;
} else {
await addFavorite(userId, listingId);
return true;
}
}