# 🚀 Guía de Inicio Rápido - Document App

## Instalación en 5 Pasos

### 1️⃣ Crear Entorno Virtual

```bash
# Windows
python -m venv venv
venv\Scripts\activate

# Linux/Mac
python3 -m venv venv
source venv/bin/activate
```

### 2️⃣ Instalar Dependencias

```bash
pip install -r requirements.txt
```

### 3️⃣ Ejecutar Setup Automático

```bash
python setup.py
```

Este script automáticamente:
- ✅ Crea el archivo `.env`
- ✅ Ejecuta las migraciones de base de datos
- ✅ Crea un superusuario
- ✅ Opcionalmente crea datos de ejemplo

### 4️⃣ Iniciar el Servidor

```bash
python manage.py runserver
```

### 5️⃣ Acceder a la Aplicación

- **API Documentation**: http://localhost:8000/swagger/
- **Admin Panel**: http://localhost:8000/admin/
- **ReDoc**: http://localhost:8000/redoc/

---

## 📝 Credenciales por Defecto

Si usaste el setup automático con valores por defecto:

**Superusuario:**
- Email: `admin@core.com`
- Password: `admin123`

**Editor:**
- Email: `editor@core.com`
- Password: `editor123`

**Visualizador:**
- Email: `viewer@core.com`
- Password: `viewer123`

---

## 🧪 Probar la API

### Opción 1: Usar Postman

1. Importar la colección: `core_API.postman_collection.json`
2. Ejecutar el request "Login" para obtener el token
3. El token se guardará automáticamente en las variables de entorno
4. Probar los demás endpoints

### Opción 2: Usar cURL

```bash
# Login
curl -X POST http://localhost:8000/api/users/auth/login/ \
  -H "Content-Type: application/json" \
  -d "{\"email\":\"admin@core.com\",\"password\":\"admin123\"}"

# Guardar el token de la respuesta y usarlo en los siguientes requests
TOKEN="tu_token_aqui"

# Listar usuarios
curl -X GET http://localhost:8000/api/users/ \
  -H "Authorization: Bearer $TOKEN"

# Crear carpeta
curl -X POST http://localhost:8000/api/documents/folders/ \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d "{\"name\":\"Mi Carpeta\",\"is_public\":false}"

# Subir documento
curl -X POST http://localhost:8000/api/documents/files/ \
  -H "Authorization: Bearer $TOKEN" \
  -F "name=Mi Documento" \
  -F "file=@ruta/al/archivo.pdf" \
  -F "is_public=false"
```

### Opción 3: Usar Swagger UI

1. Ir a http://localhost:8000/swagger/
2. Click en "Authorize" (botón con candado)
3. Ingresar: `Bearer tu_token_aqui`
4. Probar los endpoints directamente desde la interfaz

---

## 📊 Estructura de Permisos

Cada usuario puede tener los siguientes permisos:

| Permiso | Descripción |
|---------|-------------|
| `can_view` | Puede visualizar documentos y carpetas |
| `can_download` | Puede descargar documentos |
| `can_add_documents` | Puede subir nuevos documentos |
| `can_create_folders` | Puede crear nuevas carpetas |
| `can_edit_documents` | Puede editar documentos existentes |
| `can_edit_folders` | Puede editar carpetas existentes |
| `can_delete_documents` | Puede eliminar documentos |
| `can_delete_folders` | Puede eliminar carpetas |
| `can_create_users` | Puede crear nuevos usuarios |

---

## 🔧 Comandos Útiles

```bash
# Crear migraciones
python manage.py makemigrations

# Aplicar migraciones
python manage.py migrate

# Crear superusuario manualmente
python manage.py createsuperuser

# Abrir shell de Django
python manage.py shell

# Ejecutar tests
python manage.py test

# Recolectar archivos estáticos
python manage.py collectstatic
```

---

## 📁 Tipos de Archivo Soportados

### Documentos
- PDF, DOC, DOCX, XLS, XLSX, PPT, PPTX, TXT, CSV

### Imágenes
- JPG, JPEG, PNG, GIF, BMP, SVG, WebP

### Videos
- MP4, AVI, MOV, WMV, FLV, MKV, WebM

### Comprimidos
- ZIP, RAR, 7Z, TAR, GZ

---

## ⚠️ Solución de Problemas

### Error: No module named 'rest_framework'
```bash
pip install -r requirements.txt
```

### Error: Database is locked
```bash
# Detener el servidor y volver a iniciar
python manage.py runserver
```

### Error al subir archivos grandes
Editar `core/settings.py`:
```python
FILE_UPLOAD_MAX_MEMORY_SIZE = 200 * 1024 * 1024  # 200 MB
```

### Puerto 8000 ya en uso
```bash
# Usar otro puerto
python manage.py runserver 8080
```

---

## 📞 Soporte

Para más información, consultar el archivo `README.md` completo.
