# Guía: Instalar PostgreSQL y correr INPROD Campus completo (Windows)

Esta guía te lleva de cero a tener el campus funcionando con base de datos real.
Tiempo estimado: 20–30 min.

---

## Paso 1 — Descargar PostgreSQL

1. Entra a: https://www.postgresql.org/download/windows/
2. Click en **"Download the installer"** (te lleva a la página de EDB).
3. Descarga la última versión (16.x o 17.x) para Windows x86-64.

---

## Paso 2 — Instalar

1. Ejecuta el instalador descargado.
2. Acepta la carpeta por defecto (`C:\Program Files\PostgreSQL\16`).
3. **Componentes:** deja marcados todos (PostgreSQL Server, pgAdmin 4, Command Line Tools).
4. **Contraseña del superusuario `postgres`:** te pedirá crear una.
   👉 **ANÓTALA**, la necesitas en el Paso 4. (Ej: `postgres123` para pruebas locales.)
5. **Puerto:** déjalo en `5432` (el que usa el proyecto).
6. **Locale:** déjalo por defecto.
7. Termina la instalación. Al final puede ofrecer "Stack Builder" → puedes **cancelarlo**, no hace falta.

---

## Paso 3 — Crear la base de datos `inprod_campus`

Opción fácil (con interfaz):

1. Abre **pgAdmin 4** (se instaló junto con PostgreSQL).
2. Te pedirá la contraseña maestra de pgAdmin (la creas la primera vez).
3. En el árbol de la izquierda: **Servers → PostgreSQL 16** → te pide la contraseña del Paso 4 (la de `postgres`).
4. Click derecho en **Databases → Create → Database…**
5. Nombre: `inprod_campus` → **Save**.

✅ Listo, ya tienes la base de datos vacía.

---

## Paso 4 — Configurar el backend

1. En la carpeta `backend`, copia el archivo `.env.example` y renómbralo a `.env`.
2. Ábrelo en VSCode y déjalo así (cambia la contraseña por la tuya del Paso 2):

```env
PORT=4000
NODE_ENV=development

DB_TYPE=postgres
DB_HOST=localhost
DB_PORT=5432
DB_USER=postgres
DB_PASSWORD=TU_CONTRASEÑA_DE_POSTGRES
DB_NAME=inprod_campus

JWT_SECRET=pega_aqui_una_clave_larga_y_aleatoria
JWT_EXPIRES_IN=8h

CORS_ORIGINS=http://localhost:5500,http://127.0.0.1:5500

# Opcional: contraseñas de los 2 admins (si las dejas vacías usa las del código)
ADMIN_1_PASS=
ADMIN_2_PASS=
```

3. Para generar el `JWT_SECRET`, abre la terminal de VSCode y corre:
   ```
   node -e "console.log(require('crypto').randomBytes(48).toString('hex'))"
   ```
   Copia el resultado y pégalo en `JWT_SECRET=`.

---

## Paso 5 — Crear las tablas y arrancar el backend

En la terminal de VSCode, dentro de la carpeta `backend`:

```
npm install
npm run init-db
npm run dev
```

- `npm install` → instala dependencias (solo la primera vez).
- `npm run init-db` → crea las tablas y los usuarios admin. Verás los nombres de admin creados.
- `npm run dev` → arranca el servidor. Debe decir:
  ```
  ✅ Conectado a la base de datos (POSTGRES)
  🚀 INPROD Campus API corriendo en http://localhost:4000
  ```

👉 Deja esta terminal abierta (el backend corre ahí).

**Credenciales de admin** (creadas por `init-db`):
- Usuario: `sebastian.rios` · Contraseña: `INPROD-RLQxC335@`
- Usuario: `juanpablo.ramirez` · Contraseña: `INPROD-TNOaz063#`

(Si pusiste `ADMIN_1_PASS`/`ADMIN_2_PASS` en el `.env`, usa esas.)

---

## Paso 6 — Conectar el frontend al backend

1. Abre `frontend/campus.html` en VSCode.
2. Busca (Ctrl+F) `AUTO_DETECT` (cerca de la línea 1672).
3. Cámbialo a:
   ```js
   AUTO_DETECT: true,
   ```
4. Guarda.

---

## Paso 7 — Abrir el campus

1. Instala la extensión **Live Server** en VSCode (de Ritwick Dey) si no la tienes.
2. Click derecho en `frontend/index.html` → **"Open with Live Server"**.
3. Se abre el navegador. Click en **"Soy alumno →"**.
4. Abajo a la izquierda debe aparecer **"🟢 Modo backend (servidor conectado)"** en vez de "Modo demostración".
5. Inicia sesión con un admin. Ahora todo lo que crees/edites/elimines **se guarda en PostgreSQL**.

---

## Problemas comunes

**"Error conectando a la base de datos"**
- ¿La contraseña en `.env` es correcta? ¿El servicio de PostgreSQL está corriendo? (Busca "Services" en Windows → `postgresql-x64-16` debe estar "Running".)
- ¿Creaste la base de datos `inprod_campus` (Paso 3)?

**Sigue diciendo "Modo demostración"**
- ¿Cambiaste `AUTO_DETECT: true` y guardaste? ¿El backend está corriendo (terminal del Paso 5)?
- Refresca el navegador con Ctrl+Shift+R.

**"password authentication failed for user postgres"**
- La contraseña del `.env` no coincide con la que pusiste al instalar PostgreSQL.

**El puerto 4000 está ocupado**
- Cierra otra terminal donde tengas el backend corriendo, o cambia `PORT` en el `.env`.

**Para apagar todo:** cierra Live Server y presiona `Ctrl+C` en la terminal del backend.

---

## ¿Prefieres MySQL en vez de PostgreSQL?
El proyecto también soporta MySQL. Solo cambia en el `.env`:
```env
DB_TYPE=mysql
DB_PORT=3306
```
y crea la base de datos `inprod_campus` en MySQL. El resto es igual.
