import bcrypt from "bcryptjs"; import jwt from "jsonwebtoken"; import User from "../models/User"; import dbConnect from "@/lib/db/connection"; const JWT_SECRET = process.env.JWT_SECRET || "your-secret-key"; export async function register(data: { username: string; email: string; password: string; }) { try { await dbConnect(); const { username, email, password } = data; const existingUser = await User.findOne({ $or: [{ email }, { username }] }); if (existingUser) { return { error: "User already exists", status: 400 }; } const hashedPassword = await bcrypt.hash(password, 10); const user = await User.create({ username, email, password: hashedPassword, }); const token = jwt.sign({ userId: user._id }, JWT_SECRET, { expiresIn: "7d", }); return { token, user: { id: user._id, username: user.username, email: user.email, }, }; } catch (error) { console.error("Error en el registro:", error); return { error: "Internal server error", status: 500 }; } } export async function loginUser(data: { email: string; password: string; rememberMe?: boolean; }) { try { await dbConnect(); const { email, password, rememberMe } = data; const user = await User.findOne({ email }); if (!user) { return { error: "Invalid credentials", status: 401 }; } const isValidPassword = await bcrypt.compare(password, user.password); if (!isValidPassword) { return { error: "Invalid credentials", status: 401 }; } let tokenOptions = {}; if (!rememberMe) { tokenOptions = { expiresIn: "7d" }; } const token = jwt.sign({ userId: user._id }, JWT_SECRET, tokenOptions); return { token, user: { id: user._id, username: user.username, email: user.email, }, }; } catch (error) { console.error("Error en el login:", error); return { error: "Internal server error", status: 500 }; } }