# Sistema de Gestión de Asistencia (NIMI) Este es un proyecto de [Next.js](https://nextjs.org) para gestión de asistencia estudiantil, construido con TypeScript, Drizzle ORM, NextAuth.js y PostgreSQL. ## Prerrequisitos Antes de comenzar, asegúrate de tener instalado: - [Node.js](https://nodejs.org/) (versión 18 o superior) - [PostgreSQL](https://www.postgresql.org/) (versión 12 o superior) - [npm](https://www.npmjs.com/) o [yarn](https://yarnpkg.com/) ## Configuración Local ### 1. Clonar el repositorio ```bash git clone cd nimi ``` ### 2. Instalar dependencias ```bash npm install # o yarn install ``` ### 3. Configurar variables de entorno Copia el archivo de ejemplo y configura las variables: ```bash cp .env.example .env.local ``` Edita el archivo `.env.local` con tus configuraciones: ```env # Database DATABASE_URL="postgresql://usuario:contraseña@localhost:5432/nimi_db" # NextAuth NEXTAUTH_URL="http://localhost:3000" NEXTAUTH_SECRET="tu-clave-secreta-aqui" # App NEXT_PUBLIC_APP_NAME="Sistema de Gestión de Asistencia" ``` **Importante:** - Reemplaza `usuario`, `contraseña` y `nimi_db` con tus credenciales reales de PostgreSQL - Genera una clave secreta segura para `NEXTAUTH_SECRET` (puedes usar: `openssl rand -base64 32`) ### 4. Configurar la base de datos #### Crear la base de datos Conéctate a PostgreSQL y crea la base de datos: ```sql CREATE DATABASE nimi_db; ``` #### Generar y ejecutar migraciones ```bash # Generar archivos de migración npm run db:generate # Ejecutar migraciones en la base de datos npm run db:migrate ``` #### (Opcional) Poblar con datos de prueba Si existe un archivo de seed: ```bash npm run db:seed ``` ### 5. Ejecutar el servidor de desarrollo ```bash npm run dev # o yarn dev ``` Abre [http://localhost:3000](http://localhost:3000) en tu navegador para ver la aplicación. ## Scripts Disponibles - `npm run dev` - Inicia el servidor de desarrollo - `npm run build` - Construye la aplicación para producción - `npm run start` - Inicia el servidor de producción - `npm run lint` - Ejecuta el linter - `npm run db:generate` - Genera archivos de migración de Drizzle - `npm run db:migrate` - Ejecuta las migraciones en la base de datos - `npm run db:studio` - Abre Drizzle Studio para administrar la base de datos - `npm run db:seed` - Pobla la base de datos con datos de prueba ## Estructura del Proyecto ``` src/ ├── app/ # App Router de Next.js │ ├── admin/ # Rutas de administrador │ ├── api/ # API Routes │ ├── auth/ # Páginas de autenticación │ ├── student/ # Rutas de estudiante │ └── teacher/ # Rutas de profesor ├── components/ # Componentes React reutilizables ├── lib/ # Utilidades y configuraciones │ ├── auth.ts # Configuración de NextAuth │ └── db/ # Configuración de base de datos └── types/ # Definiciones de tipos TypeScript ``` ## Tecnologías Utilizadas - **Framework:** Next.js 15 con App Router - **Lenguaje:** TypeScript - **Base de datos:** PostgreSQL con Drizzle ORM - **Autenticación:** NextAuth.js - **Estilos:** Tailwind CSS - **Componentes UI:** Radix UI - **Validación:** Zod ## Administración de Base de Datos ### Drizzle Studio Para una interfaz visual de la base de datos: ```bash npm run db:studio ``` Esto abrirá Drizzle Studio en tu navegador para administrar los datos. ### Migraciones Cuando hagas cambios al esquema en `src/lib/db/schema.ts`: 1. Genera la migración: `npm run db:generate` 2. Revisa el archivo de migración generado en `drizzle/` 3. Aplica la migración: `npm run db:migrate` ## Solución de Problemas ### Error de conexión a la base de datos - Verifica que PostgreSQL esté ejecutándose - Confirma que las credenciales en `.env.local` sean correctas - Asegúrate de que la base de datos `nimi_db` exista ### Error de autenticación - Verifica que `NEXTAUTH_SECRET` esté configurado - Confirma que `NEXTAUTH_URL` coincida con tu URL local ### Problemas con dependencias ```bash # Limpia node_modules y reinstala rm -rf node_modules package-lock.json npm install ``` ## Contribuir 1. Fork el proyecto 2. Crea una rama para tu feature (`git checkout -b feature/AmazingFeature`) 3. Commit tus cambios (`git commit -m 'Add some AmazingFeature'`) 4. Push a la rama (`git push origin feature/AmazingFeature`) 5. Abre un Pull Request ## Licencia Este proyecto está bajo la Licencia MIT - ver el archivo [LICENSE](LICENSE) para más detalles.