diff --git a/public/js/piscina.js b/public/js/piscina.js
index 0c99783..c8309a3 100644
--- a/public/js/piscina.js
+++ b/public/js/piscina.js
@@ -29,14 +29,25 @@ document.addEventListener('DOMContentLoaded', async () => {
tipoRutina.textContent = rutina.tipoCompetencia;
modalidadRutina.textContent = modalidad;
- const atletas = await fetch('/api/users/athletes').then(res => res.json());
- atletas.forEach(a => {
- const opt = document.createElement('option');
- opt.value = a._id;
- opt.textContent = a.name;
- select.appendChild(opt);
- });
+const atletas = await fetch('/api/users/athletes').then(res => res.json());
+atletas.forEach(a => {
+ const opt = document.createElement('option');
+ opt.value = JSON.stringify({ id: a._id, nombre: a.name, idPers: a.idPersonalizado });
+ opt.textContent = `${a.name} (${a.idPersonalizado || 'sin ID'})`;
+ select.appendChild(opt);
+});
+
+select.addEventListener('change', () => {
+ const datos = JSON.parse(select.value || '{}');
+ if (datos.idPers) {
+ document.getElementById('idPersonalizado').value = datos.idPers;
+ document.getElementById('idPersonalizado').disabled = true;
+ } else {
+ document.getElementById('idPersonalizado').value = '';
+ document.getElementById('idPersonalizado').disabled = false;
+ }
+});
let figurasFINA = [];
try {
const res = await fetch('/catalog/figurasFINA.json');
diff --git a/public/piscina.html b/public/piscina.html
index 13404b4..8d7f051 100644
--- a/public/piscina.html
+++ b/public/piscina.html
@@ -57,7 +57,8 @@
-
+
+
diff --git a/routes/auth.js b/routes/auth.js
index 541efa9..0e8b9ad 100644
--- a/routes/auth.js
+++ b/routes/auth.js
@@ -4,27 +4,33 @@ 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 ===
+// Schema corregido
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, default: 'es' }, // <- CAMPO AÑADIDO
- createdAt: { type: Date, default: Date.now }
+ language: { type: String, default: 'es' },
+ createdAt: { type: Date, default: Date.now },
+ idPersonalizado: { type: String, unique: true } // <- CAMBIO AQUÍ
});
const User = mongoose.model('User', userSchema);
-// === Ruta: Registro de usuario ===
+// Genera ID como JP, FM, etc.
+function generarIdPersonalizado(name) {
+ const [nombre, apellido = ''] = name.trim().toUpperCase().split(' ');
+ return (nombre[0] || '') + (apellido[0] || '');
+}
+
+// Registro de usuario
router.post('/register', async (req, res) => {
const { name, username, email, password, role, language } = req.body;
@@ -33,19 +39,34 @@ router.post('/register', async (req, res) => {
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 });
+
+ let idPersonalizado = generarIdPersonalizado(name);
+
+ const repetido = await User.findOne({ idPersonalizado });
+ if (repetido) {
+ idPersonalizado += Math.floor(100 + Math.random() * 900);
+ }
+
+ const user = new User({
+ name,
+ username,
+ email,
+ passwordHash,
+ role,
+ language,
+ idPersonalizado // <- CAMBIO AQUÍ
+ });
+
await user.save();
- //res.redirect('/index.html');
res.status(200).send('Usuario registrado correctamente');
-
} catch (error) {
console.error('Error en registro:', error);
res.status(500).send('Error interno del servidor');
}
});
-// === Ruta: Login de usuario ===
+// Login
router.post('/login', async (req, res) => {
const { email, password } = req.body;
@@ -60,7 +81,7 @@ router.post('/login', async (req, res) => {
userId: user._id,
name: user.name,
role: user.role,
- language: user.language // <- También puedes enviar este dato al frontend
+ language: user.language
});
} catch (error) {
console.error('Error en login:', error);
diff --git a/routes/user.js b/routes/user.js
index 3a5c2bf..5eaa6e5 100644
--- a/routes/user.js
+++ b/routes/user.js
@@ -2,7 +2,8 @@ const mongoose = require('mongoose');
const userSchema = new mongoose.Schema({
name: String,
- role: String
+ role: String,
+ idPersonalizado: { type: String, unique: true }
});
module.exports = mongoose.models.User || mongoose.model('User', userSchema);
diff --git a/routes/users.js b/routes/users.js
index b2fe061..f0d6717 100644
--- a/routes/users.js
+++ b/routes/users.js
@@ -13,7 +13,7 @@ router.get('/athletes', async (req, res) => {
const db = client.db('swimartdb');
const athletes = await db.collection('users')
.find({ role: 'athlete' })
- .project({ _id: 1, name: 1 })
+ .project({ _id: 1, name: 1, idPersonalizado: 1 })
.toArray();
res.json(athletes);