import { PrismaClient } from '@prisma/client' const prisma = new PrismaClient() export const getAllUsers = async () => { try { const users = await prisma.user.findMany() return users } catch (error) { console.error('Error fetching users:', error) throw new Error('Error fetching users') } } export const getUserByEmail = async (email: string) => { try { const user = await prisma.user.findUnique({ where: { email: email }, include: { Like: true, Favorite: true } }) return user } catch (error) { console.error('Error fetching user by ID:', error) throw new Error('Error fetching user by ID') } } export const deleteUserByEmail = async (email: string) => { try { const userDeleted = await prisma.user.delete({ where: { email: email }, include: { Like: true, Comment: true, sessions: true, accounts: true } }) return userDeleted } catch (error) { console.error(`Error deleting user with email ${email}:`, error) throw new Error(`Unable to delete user with email ${email}`) } } export const updateUserByEmail = async (email: string, newData: any) => { try { const { name } = newData if (name) { const existingUserWithSameName = await prisma.user.findFirst({ where: { name: name, email: { not: email } } }) if (existingUserWithSameName) { return { success: false, status: 409, error: `Name ${name} is already in use by another user` } } } // Verificar si el usuario existe const existingUser = await prisma.user.findUnique({ where: { email: email } }) if (!existingUser) { return { status: 404, error: `User with email ${email} not found` } } // Actualizar el usuario con los nuevos datos const updatedUser = await prisma.user.update({ where: { email: email }, data: newData }) return updatedUser } catch (error) { console.error(`Error updating user with email ${email}:`, error) return { status: 500, error: `Unable to update user with email ${email}` } } finally { await prisma.$disconnect() } }