/** * Queries de servidores usando Prisma * Migrado de lib/db/queries/servers.ts */ import { prisma } from "../app"; export interface Server { server_id: number; server_name: string; server_type: "pvp" | "no-pvp" | "retro-pvp" | "hardcore-pvp" | null; location: "NA" | "SA" | "EU" | "OC" | "BR" | null; is_active: boolean; total_listings: number; total_users: number; total_subscribers: number; total_transactions: number; total_volume: number; average_listing_price: number; last_activity_at: Date | null; created_at: Date; updated_at: Date; } export interface ServerStats { total_listings?: number; total_users?: number; total_subscribers?: number; total_transactions?: number; total_volume?: number; average_listing_price?: number; last_activity_at?: Date; } /** * Lista todos os servidores */ export async function getAllServers(): Promise { const servers = await prisma.server.findMany({ orderBy: { server_name: "asc" }, }); return servers.map((server) => ({ ...server, server_type: server.server_type as | "pvp" | "no-pvp" | "retro-pvp" | "hardcore-pvp" | null, location: server.location as "NA" | "SA" | "EU" | "OC" | "BR" | null, total_volume: server.total_volume ? Number(server.total_volume) : 0, average_listing_price: server.average_listing_price ? Number(server.average_listing_price) : 0, })); } /** * Lista apenas servidores ativos */ export async function getActiveServers(): Promise { const servers = await prisma.server.findMany({ where: { is_active: true }, orderBy: { server_name: "asc" }, }); return servers.map((server) => ({ ...server, server_type: server.server_type as | "pvp" | "no-pvp" | "retro-pvp" | "hardcore-pvp" | null, location: server.location as "NA" | "SA" | "EU" | "OC" | "BR" | null, total_volume: server.total_volume ? Number(server.total_volume) : 0, average_listing_price: server.average_listing_price ? Number(server.average_listing_price) : 0, })); } /** * Busca servidor por nome */ export async function getServerByName( serverName: string, ): Promise { const server = await prisma.server.findUnique({ where: { server_name: serverName }, }); if (!server) return null; return { ...server, server_type: server.server_type as | "pvp" | "no-pvp" | "retro-pvp" | "hardcore-pvp" | null, location: server.location as "NA" | "SA" | "EU" | "OC" | "BR" | null, total_volume: server.total_volume ? Number(server.total_volume) : 0, average_listing_price: server.average_listing_price ? Number(server.average_listing_price) : 0, }; } /** * Busca servidor por ID */ export async function getServerById(serverId: number): Promise { const server = await prisma.server.findUnique({ where: { server_id: serverId }, }); if (!server) return null; return { ...server, server_type: server.server_type as | "pvp" | "no-pvp" | "retro-pvp" | "hardcore-pvp" | null, location: server.location as "NA" | "SA" | "EU" | "OC" | "BR" | null, total_volume: server.total_volume ? Number(server.total_volume) : 0, average_listing_price: server.average_listing_price ? Number(server.average_listing_price) : 0, }; } /** * Verifica se servidor existe e está ativo */ export async function isServerActive(serverName: string): Promise { const count = await prisma.server.count({ where: { server_name: serverName, is_active: true, }, }); return count > 0; } /** * Incrementa estatísticas do servidor */ export async function incrementServerStats( serverName: string, stats: Partial<{ total_listings: number; total_users: number; total_subscribers: number; total_transactions: number; total_volume: number; }>, ): Promise { const updateData: any = { last_activity_at: new Date(), }; if (stats.total_listings !== undefined) { updateData.total_listings = { increment: stats.total_listings }; } if (stats.total_users !== undefined) { updateData.total_users = { increment: stats.total_users }; } if (stats.total_subscribers !== undefined) { updateData.total_subscribers = { increment: stats.total_subscribers }; } if (stats.total_transactions !== undefined) { updateData.total_transactions = { increment: stats.total_transactions }; } if (stats.total_volume !== undefined) { updateData.total_volume = { increment: stats.total_volume }; } await prisma.server.update({ where: { server_name: serverName }, data: updateData, }); } /** * Atualiza estatísticas completas do servidor */ export async function updateServerStats( serverName: string, stats: ServerStats, ): Promise { const updateData: any = {}; if (stats.total_listings !== undefined) updateData.total_listings = stats.total_listings; if (stats.total_users !== undefined) updateData.total_users = stats.total_users; if (stats.total_subscribers !== undefined) updateData.total_subscribers = stats.total_subscribers; if (stats.total_transactions !== undefined) updateData.total_transactions = stats.total_transactions; if (stats.total_volume !== undefined) updateData.total_volume = stats.total_volume; if (stats.average_listing_price !== undefined) updateData.average_listing_price = stats.average_listing_price; if (stats.last_activity_at !== undefined) updateData.last_activity_at = stats.last_activity_at; if (Object.keys(updateData).length === 0) { return; } await prisma.server.update({ where: { server_name: serverName }, data: updateData, }); } /** * Incrementa total_users de múltiplos servidores */ export async function incrementUsersForServers( serverNames: string[], ): Promise { if (serverNames.length === 0) { return; } await prisma.server.updateMany({ where: { server_name: { in: serverNames }, }, data: { total_users: { increment: 1 }, last_activity_at: new Date(), }, }); }