'use client'; import { useState, useEffect } from 'react'; import { Button } from '@/components/ui/button'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { Alert, AlertDescription } from '@/components/ui/alert'; import { Plus, Edit, Trash2, Users, ArrowLeft } from 'lucide-react'; import Link from 'next/link'; interface Student { id: string; firstName: string; lastName: string; email: string; cedula: string; phone: string; isActive: boolean; createdAt: string; } interface FormData { firstName: string; lastName: string; email: string; cedula: string; phone: string; } export default function StudentsPage() { const [students, setStudents] = useState([]); const [isLoading, setIsLoading] = useState(true); const [showForm, setShowForm] = useState(false); const [editingStudent, setEditingStudent] = useState(null); const [formData, setFormData] = useState({ firstName: '', lastName: '', email: '', cedula: '', phone: '', }); const [error, setError] = useState(''); const [success, setSuccess] = useState(''); useEffect(() => { fetchStudents(); }, []); const fetchStudents = async () => { try { const response = await fetch('/api/admin/students'); if (response.ok) { const data = await response.json(); setStudents(data); } } catch (error) { console.error('Error fetching students:', error); } finally { setIsLoading(false); } }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setError(''); setSuccess(''); try { const url = editingStudent ? `/api/admin/students/${editingStudent.id}` : '/api/admin/students'; const method = editingStudent ? 'PUT' : 'POST'; const response = await fetch(url, { method, headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(formData), }); if (response.ok) { setSuccess(editingStudent ? 'Estudiante actualizado exitosamente' : 'Estudiante creado exitosamente'); setShowForm(false); setEditingStudent(null); setFormData({ firstName: '', lastName: '', email: '', cedula: '', phone: '' }); fetchStudents(); } else { const errorData = await response.json(); setError(errorData.error || 'Error al procesar la solicitud'); } } catch (error) { setError('Error de conexión'); } }; const handleEdit = (student: Student) => { setEditingStudent(student); setFormData({ firstName: student.firstName, lastName: student.lastName, email: student.email, cedula: student.cedula, phone: student.phone, }); setShowForm(true); setError(''); setSuccess(''); }; const handleDelete = async (studentId: string) => { if (!confirm('¿Estás seguro de que deseas eliminar este estudiante?')) { return; } try { const response = await fetch(`/api/admin/students/${studentId}`, { method: 'DELETE', }); if (response.ok) { setSuccess('Estudiante eliminado exitosamente'); fetchStudents(); } else { const errorData = await response.json(); setError(errorData.error || 'Error al eliminar el estudiante'); } } catch (error) { setError('Error de conexión'); } }; const resetForm = () => { setShowForm(false); setEditingStudent(null); setFormData({ firstName: '', lastName: '', email: '', cedula: '', phone: '' }); setError(''); setSuccess(''); }; if (isLoading) { return (
Cargando estudiantes...
); } return (

Gestión de Estudiantes

{error && ( {error} )} {success && ( {success} )} {showForm && ( {editingStudent ? 'Editar Estudiante' : 'Nuevo Estudiante'}
setFormData({ ...formData, firstName: e.target.value })} required />
setFormData({ ...formData, lastName: e.target.value })} required />
setFormData({ ...formData, email: e.target.value })} required />
setFormData({ ...formData, cedula: e.target.value })} required />
setFormData({ ...formData, phone: e.target.value })} required />
)} Lista de Estudiantes ({students.length}) {students.length === 0 ? (
No hay estudiantes registrados
) : (
{students.map((student) => ( ))}
Nombre Email Cédula Teléfono Estado Acciones
{student.firstName} {student.lastName} {student.email} {student.cedula} {student.phone} {student.isActive ? 'Activo' : 'Inactivo'}
)}
); }