This commit is contained in:
parent
8df6427723
commit
1cca9e10df
|
@ -3,13 +3,33 @@
|
|||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>SwimArt Manager – Crear Rutina</title>
|
||||
<title>Inicializar rutina</title>
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" />
|
||||
</head>
|
||||
<body class="bg-light">
|
||||
<div class="container py-5">
|
||||
<h1 class="mb-4 text-center">Crear Rutina – SwimArt Manager</h1>
|
||||
<h1 class="mb-4 text-center">Inicializar rutina</h1>
|
||||
|
||||
<nav class="navbar navbar-expand-lg navbar-dark bg-primary fixed-top">
|
||||
<div class="container-fluid">
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navbarNav">
|
||||
<ul class="navbar-nav ms-auto">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="#inicializarRutina">Inicializar Rutina</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="equipoDisponibles.html">Crear Formaciones</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="#otroLink2">Catalogo de formaciones</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
<form id="routineForm" class="row g-3">
|
||||
<div class="col-md-6">
|
||||
<label for="title" class="form-label">Título de la rutina</label>
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
.card-container {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 15px;
|
||||
}
|
||||
.card {
|
||||
width: 18rem;
|
||||
margin-top: 10px;
|
||||
}
|
|
@ -0,0 +1,73 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="es">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Equipos Disponibles</title>
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link href="css/equipoDisponible.css" rel="stylesheet">
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<nav class="navbar navbar-expand-lg navbar-dark bg-primary fixed-top">
|
||||
<div class="container-fluid">
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navbarNav">
|
||||
<ul class="navbar-nav ms-auto">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="coach.html">Inicializar Rutina</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="equipoDisponibles.html">Crear Formaciones</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="#otroLink2">Catalogo de formaciones</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
<div class="container mt-5">
|
||||
<h2>Rutinas Disponibles</h2>
|
||||
<div class="card-container" id="routinesList"></div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
// Función para cargar las rutinas
|
||||
async function loadRoutines() {
|
||||
const response = await fetch('/routines'); // Llama a la API para obtener las rutinas
|
||||
const routines = await response.json();
|
||||
const routinesList = document.getElementById('routinesList');
|
||||
routinesList.innerHTML = ''; // Limpiar cualquier contenido anterior
|
||||
|
||||
// Iterar sobre las rutinas y crear cards
|
||||
routines.forEach(routine => {
|
||||
const card = document.createElement('div');
|
||||
card.classList.add('card', 'text-center', 'border-primary');
|
||||
card.innerHTML = `
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">${routine.nombreCompetencia}</h5>
|
||||
<p class="card-text"><strong>Competencia:</strong> ${routine.tipoCompetencia}</p>
|
||||
<p class="card-text"><strong>Modalidad:</strong> ${routine.modalidad}</p>
|
||||
<h6>Atletas:</h6>
|
||||
<ul>
|
||||
${Array.isArray(routine.participants) && routine.participants.length > 0
|
||||
? routine.participants.map(participant =>
|
||||
`<li>${participant.atletaId.nombre} - ${participant.rol}</li>`
|
||||
).join('')
|
||||
: '<li>No hay atletas asignados</li>'}
|
||||
</ul>
|
||||
</div>
|
||||
`;
|
||||
routinesList.appendChild(card); // Agregar la card al contenedor
|
||||
});
|
||||
}
|
||||
|
||||
// Cargar rutinas cuando se cargue la página
|
||||
document.addEventListener('DOMContentLoaded', loadRoutines);
|
||||
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -84,13 +84,13 @@ async function saveRoutine() {
|
|||
|
||||
const result = await res.json();
|
||||
if (res.ok) {
|
||||
alert("✅ Rutina guardada correctamente.");
|
||||
alert(" Rutina guardada correctamente.");
|
||||
window.location.reload();
|
||||
} else {
|
||||
alert("❌ Error: " + result.error);
|
||||
alert("Error: " + result.error);
|
||||
}
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
alert("❌ Error al guardar la rutina.");
|
||||
alert(" Error al guardar la rutina.");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,62 @@
|
|||
const express = require('express');
|
||||
const mongoose = require('mongoose');
|
||||
const router = express.Router();
|
||||
|
||||
const routineSchema = new mongoose.Schema({
|
||||
title: String,
|
||||
createdBy: { type: String, default: "coach-id-ejemplo" },
|
||||
language: { type: String, enum: ['es', 'en', 'fr'], default: 'es' },
|
||||
duration: Number,
|
||||
musicUrl: { type: String, default: "" },
|
||||
nombreCompetencia: String,
|
||||
tipoCompetencia: { type: String, enum: ['libre', 'técnica'], default: 'libre' },
|
||||
modalidad: { type: String, enum: ['solo', 'duo', 'equipo'], default: 'solo' },
|
||||
participantes: [
|
||||
{
|
||||
atletaId: { type: mongoose.Schema.Types.ObjectId, ref: 'User' },
|
||||
rol: String,
|
||||
idPersonalizado: String
|
||||
}
|
||||
],
|
||||
elements: [
|
||||
{
|
||||
code: String,
|
||||
startTime: Number,
|
||||
duration: Number,
|
||||
position: {
|
||||
x: Number,
|
||||
y: Number
|
||||
}
|
||||
}
|
||||
],
|
||||
createdAt: { type: Date, default: Date.now }
|
||||
});
|
||||
|
||||
const Routine = mongoose.model('Routine', routineSchema);
|
||||
|
||||
router.post('/', async (req, res) => {
|
||||
try {
|
||||
console.log("📩 Recibido en backend:", JSON.stringify(req.body, null, 2)); // 👈 LOG
|
||||
|
||||
const nuevaRutina = new Routine(req.body);
|
||||
await nuevaRutina.save();
|
||||
|
||||
console.log("✅ Rutina guardada.");
|
||||
res.status(201).json({ message: 'Rutina creada correctamente' });
|
||||
} catch (err) {
|
||||
console.error("❌ Error al guardar rutina:", err); // 👈 ERROR DETALLADO
|
||||
res.status(500).json({ error: 'Error al guardar la rutina' });
|
||||
}
|
||||
});
|
||||
|
||||
// Ruta para obtener todas las rutinas
|
||||
router.get('/routines', async (req, res) => {
|
||||
try {
|
||||
const routines = await Routine.find(); // Obtén todas las rutinas de la base de datos
|
||||
res.json(routines);
|
||||
} catch (error) {
|
||||
res.status(500).json({ message: 'Error al obtener las rutinas', error });
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = router;
|
Loading…
Reference in New Issue