|
@@ -1,36 +1,179 @@
|
|
|
-This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app).
|
|
|
|
|
|
|
+# 🎓 Tapir - Sistema de Gestión de Asistencia Académica
|
|
|
|
|
|
|
|
-## Getting Started
|
|
|
|
|
|
|
+Sistema web moderno para la gestión de asistencia estudiantil en instituciones educativas, desarrollado con Next.js 15, TypeScript, Prisma y PostgreSQL.
|
|
|
|
|
|
|
|
-First, run the development server:
|
|
|
|
|
|
|
+## ✨ Características Principales
|
|
|
|
|
|
|
|
|
|
+- **Gestión de Usuarios**: Administradores, profesores y estudiantes con roles diferenciados
|
|
|
|
|
+- **Control de Asistencia**: Registro y seguimiento detallado de asistencia por clase
|
|
|
|
|
+- **Gestión Académica**: Manejo de periodos, materias, secciones y horarios
|
|
|
|
|
+- **Dashboard Interactivo**: Visualización de estadísticas y reportes en tiempo real
|
|
|
|
|
+- **Autenticación Segura**: Sistema de login con NextAuth.js y encriptación bcrypt
|
|
|
|
|
+- **Interfaz Moderna**: UI responsiva con shadcn/ui y TailwindCSS
|
|
|
|
|
+
|
|
|
|
|
+## 🛠️ Stack Tecnológico
|
|
|
|
|
+
|
|
|
|
|
+- **Frontend**: Next.js 15, React 19, TypeScript
|
|
|
|
|
+- **Backend**: Next.js API Routes, Prisma ORM
|
|
|
|
|
+- **Base de Datos**: PostgreSQL
|
|
|
|
|
+- **Autenticación**: NextAuth.js
|
|
|
|
|
+- **UI/UX**: shadcn/ui, TailwindCSS 3, Radix UI
|
|
|
|
|
+- **Validación**: Zod, React Hook Form
|
|
|
|
|
+- **Notificaciones**: Sonner
|
|
|
|
|
+
|
|
|
|
|
+## 📋 Requisitos Previos
|
|
|
|
|
+
|
|
|
|
|
+- Node.js 18+
|
|
|
|
|
+- PostgreSQL 12+
|
|
|
|
|
+- npm, yarn, pnpm o bun
|
|
|
|
|
+
|
|
|
|
|
+## 🚀 Instalación
|
|
|
|
|
+
|
|
|
|
|
+### 1. Clonar el repositorio
|
|
|
|
|
+```bash
|
|
|
|
|
+git clone <url-del-repositorio>
|
|
|
|
|
+cd tapir
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 2. Instalar dependencias
|
|
|
|
|
+```bash
|
|
|
|
|
+npm install
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 3. Configurar variables de entorno
|
|
|
|
|
+Crea un archivo `.env` en la raíz del proyecto:
|
|
|
|
|
+
|
|
|
|
|
+```env
|
|
|
|
|
+# Base de datos PostgreSQL
|
|
|
|
|
+DATABASE_URL="postgresql://usuario:contraseña@localhost:5432/tapir_db"
|
|
|
|
|
+
|
|
|
|
|
+# NextAuth.js
|
|
|
|
|
+NEXTAUTH_SECRET="tu-clave-secreta-muy-segura-aqui"
|
|
|
|
|
+NEXTAUTH_URL="http://localhost:3000"
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 4. Configurar la base de datos
|
|
|
|
|
+
|
|
|
|
|
+#### Crear la base de datos
|
|
|
|
|
+```sql
|
|
|
|
|
+-- Conectarse a PostgreSQL y crear la base de datos
|
|
|
|
|
+CREATE DATABASE tapir_db;
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+#### Ejecutar migraciones
|
|
|
|
|
+```bash
|
|
|
|
|
+npx prisma migrate dev
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+#### Poblar con datos iniciales
|
|
|
|
|
+```bash
|
|
|
|
|
+npm run db:seed
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+Esto creará:
|
|
|
|
|
+- Usuario administrador: `admin@universidad.edu` / `admin123`
|
|
|
|
|
+- Periodo académico de ejemplo
|
|
|
|
|
+- Datos de prueba para desarrollo
|
|
|
|
|
+
|
|
|
|
|
+## 🏃♂️ Ejecutar el Proyecto
|
|
|
|
|
+
|
|
|
|
|
+### Modo Desarrollo
|
|
|
```bash
|
|
```bash
|
|
|
npm run dev
|
|
npm run dev
|
|
|
-# or
|
|
|
|
|
-yarn dev
|
|
|
|
|
-# or
|
|
|
|
|
-pnpm dev
|
|
|
|
|
-# or
|
|
|
|
|
-bun dev
|
|
|
|
|
|
|
+```
|
|
|
|
|
+Abre [http://localhost:3000](http://localhost:3000) en tu navegador.
|
|
|
|
|
+
|
|
|
|
|
+### Modo Producción
|
|
|
|
|
+```bash
|
|
|
|
|
+npm run build
|
|
|
|
|
+npm run start
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+## 📊 Comandos Útiles
|
|
|
|
|
+
|
|
|
|
|
+```bash
|
|
|
|
|
+# Desarrollo
|
|
|
|
|
+npm run dev # Servidor de desarrollo con Turbopack
|
|
|
|
|
+npm run build # Build de producción
|
|
|
|
|
+npm run start # Servidor de producción
|
|
|
|
|
+npm run lint # Linting del código
|
|
|
|
|
+
|
|
|
|
|
+# Base de datos
|
|
|
|
|
+npm run db:seed # Poblar base de datos con datos iniciales
|
|
|
|
|
+npx prisma studio # Interfaz gráfica para explorar la BD
|
|
|
|
|
+npx prisma migrate dev # Crear y aplicar migraciones
|
|
|
|
|
+npx prisma generate # Regenerar cliente de Prisma
|
|
|
|
|
+npx prisma db push # Sincronizar esquema sin migraciones
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
-Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
|
|
|
|
|
|
|
+## 🗄️ Estructura de la Base de Datos
|
|
|
|
|
|
|
|
-You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file.
|
|
|
|
|
|
|
+### Entidades Principales
|
|
|
|
|
|
|
|
-This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel.
|
|
|
|
|
|
|
+- **Users**: Usuarios del sistema (Admin, Profesores, Estudiantes)
|
|
|
|
|
+- **Teachers**: Información específica de profesores
|
|
|
|
|
+- **Students**: Información específica de estudiantes
|
|
|
|
|
+- **Periods**: Periodos académicos
|
|
|
|
|
+- **Subjects**: Materias/Asignaturas
|
|
|
|
|
+- **Classes**: Clases específicas (Materia + Profesor + Periodo)
|
|
|
|
|
+- **Sections**: Secciones de clases
|
|
|
|
|
+- **Attendances**: Registros de asistencia
|
|
|
|
|
+- **TeacherAssignments**: Asignaciones de profesores a materias
|
|
|
|
|
+- **StudentEnrollments**: Inscripciones de estudiantes
|
|
|
|
|
|
|
|
-## Learn More
|
|
|
|
|
|
|
+### Roles de Usuario
|
|
|
|
|
|
|
|
-To learn more about Next.js, take a look at the following resources:
|
|
|
|
|
|
|
+- **ADMIN**: Acceso completo al sistema
|
|
|
|
|
+- **TEACHER**: Gestión de sus clases y asistencia
|
|
|
|
|
+- **STUDENT**: Visualización de su asistencia
|
|
|
|
|
|
|
|
-- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
|
|
|
|
|
-- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
|
|
|
|
|
|
|
+## 🔐 Credenciales por Defecto
|
|
|
|
|
|
|
|
-You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome!
|
|
|
|
|
|
|
+Después de ejecutar el seed:
|
|
|
|
|
|
|
|
-## Deploy on Vercel
|
|
|
|
|
|
|
+- **Email**: `admin@universidad.edu`
|
|
|
|
|
+- **Contraseña**: `admin123`
|
|
|
|
|
+- **Rol**: Administrador
|
|
|
|
|
|
|
|
-The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
|
|
|
|
|
|
|
+> ⚠️ **Importante**: Cambia estas credenciales en producción.
|
|
|
|
|
|
|
|
-Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details.
|
|
|
|
|
|
|
+## 📁 Estructura del Proyecto
|
|
|
|
|
+
|
|
|
|
|
+```
|
|
|
|
|
+tapir/
|
|
|
|
|
+├── src/
|
|
|
|
|
+│ ├── app/ # App Router de Next.js
|
|
|
|
|
+│ │ ├── api/ # API Routes
|
|
|
|
|
+│ │ ├── admin/ # Panel de administración
|
|
|
|
|
+│ │ ├── teacher/ # Panel de profesores
|
|
|
|
|
+│ │ └── student/ # Panel de estudiantes
|
|
|
|
|
+│ ├── components/ # Componentes reutilizables
|
|
|
|
|
+│ ├── lib/ # Utilidades y configuraciones
|
|
|
|
|
+│ └── types/ # Definiciones de tipos TypeScript
|
|
|
|
|
+├── prisma/
|
|
|
|
|
+│ ├── schema.prisma # Esquema de base de datos
|
|
|
|
|
+│ ├── migrations/ # Migraciones de BD
|
|
|
|
|
+│ └── seed.ts # Datos iniciales
|
|
|
|
|
+└── public/ # Archivos estáticos
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+## 🔧 Configuración Adicional
|
|
|
|
|
+
|
|
|
|
|
+### Variables de Entorno Opcionales
|
|
|
|
|
+
|
|
|
|
|
+```env
|
|
|
|
|
+# Configuración de desarrollo
|
|
|
|
|
+NODE_ENV="development"
|
|
|
|
|
+
|
|
|
|
|
+# Configuración de base de datos (opcional)
|
|
|
|
|
+DATABASE_POOL_SIZE=10
|
|
|
|
|
+DATABASE_TIMEOUT=30000
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### Variables de Entorno para Producción
|
|
|
|
|
+
|
|
|
|
|
+```env
|
|
|
|
|
+DATABASE_URL="postgresql://..."
|
|
|
|
|
+NEXTAUTH_SECRET="clave-super-segura-para-produccion"
|
|
|
|
|
+NEXTAUTH_URL="https://tu-dominio.com"
|
|
|
|
|
+```
|