swimmingArt/routes/auth.js

74 lines
2.3 KiB
JavaScript

const express = require('express');
const router = express.Router();
const mongoose = require('mongoose');
const bcrypt = require('bcrypt');
require('dotenv').config();
// === Conexión a MongoDB ===
mongoose.connect(process.env.MONGODB_URI, {
useNewUrlParser: true,
useUnifiedTopology: true
}).then(() => console.log('[auth.js] Conectado a MongoDB'))
.catch(err => console.error(' [auth.js] Error de conexión:', err));
// === Modelo de usuario ===
const userSchema = new mongoose.Schema({
name: String,
username: { type: String, unique: true, required: true },
email: { type: String, unique: true, required: true },
passwordHash: String,
role: { type: String, enum: ['coach', 'athlete'], required: true },
language: { type: String, enum: ['es', 'en', 'fr'], default: 'es' },
createdAt: { type: Date, default: Date.now }
});
const User = mongoose.model('User', userSchema);
// === Ruta: Registro de usuario ===
router.post('/register', async (req, res) => {
const { name, username, email, password, role, language } = req.body;
try {
const existing = await User.findOne({ email });
if (existing) return res.status(400).send('Correo ya registrado');
const passwordHash = await bcrypt.hash(password, 10);
const user = new User({ name, username, email, passwordHash, role, language });
await user.save();
res.redirect('/index.html');
} catch (error) {
console.error('Error en registro:', error);
res.status(500).send('Error interno del servidor');
}
});
// === Ruta: Login de usuario ===
router.post('/login', async (req, res) => {
const { email, password } = req.body;
try {
const user = await User.findOne({ email });
if (!user) return res.status(401).send('Correo no registrado');
const valid = await bcrypt.compare(password, user.passwordHash);
if (!valid) return res.status(401).send('Contraseña incorrecta');
// Redirección por rol
if (user.role === 'coach') {
return res.redirect('/coach.html');
} else if (user.role === 'athlete') {
return res.redirect('/atleta.html');
} else {
return res.redirect('/ventanaPrincipal.html'); // fallback
}
} catch (error) {
console.error('Error en login:', error);
res.status(500).send('Error interno del servidor');
}
});
module.exports = router;