automatizacion id
This commit is contained in:
parent
3eb4fb8cbf
commit
f5597255a9
|
@ -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 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;
|
||||
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');
|
||||
|
|
|
@ -57,7 +57,8 @@
|
|||
|
||||
<div class="mb-3">
|
||||
<label for="idPersonalizado" class="form-label">ID personalizado</label>
|
||||
<input type="text" id="idPersonalizado" class="form-control" placeholder="Ej: A, 1, V2">
|
||||
<input type="text" id="idPersonalizado" class="form-control" placeholder="Ej: A, 1, V2" readonly>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue