# SISCON Backoffice

Frontend web para el Sistema de Control (SISCON), desarrollado con Laravel 11 y configurado para funcionar como cliente que consume la API de SISCON.

## Descripción

Este proyecto es el backoffice frontend para el Sistema de Control (SISCON). No maneja base de datos propia, sino que funciona como un cliente web que consume completamente la API del sistema SISCON principal, proporcionando una interfaz de administración limpia y moderna.

## Arquitectura

- **Frontend puro**: No maneja base de datos local
- **Consumo de API**: Todas las operaciones se realizan mediante llamadas HTTP a la API de SISCON
- **Autenticación basada en tokens**: Manejo de sesiones mediante tokens JWT de la API
- **Interfaz moderna**: Desarrollado con Tailwind CSS y Alpine.js

## Tecnologías

- **Laravel 11**: Framework PHP para el frontend
- **Docker**: Containerización del entorno de desarrollo
- **Nginx**: Servidor web
- **PHP 8.2**: Lenguaje de programación
- **Tailwind CSS**: Framework CSS para el diseño
- **Alpine.js**: Framework JavaScript ligero
- **Vite**: Herramienta de construcción para assets

## Estructura del Proyecto

```
siscon-backoffice/
├── app/
│   ├── Http/Controllers/        # Controladores que consumen la API
│   ├── Http/Middleware/         # Middleware para autenticación API
│   ├── Services/               # Servicios para consumo de API
│   └── Providers/              # Proveedores de servicios
├── bootstrap/                  # Archivos de arranque de Laravel
├── config/                     # Archivos de configuración
├── docker/                     # Configuraciones de Docker
├── public/                     # Archivos públicos
├── resources/                  # Vistas, CSS y JS
├── routes/                     # Definición de rutas
├── storage/                    # Archivos de almacenamiento
├── tests/                      # Pruebas unitarias y de integración
├── docker-compose.yml          # Configuración de servicios Docker
├── Dockerfile                  # Imagen Docker de la aplicación
└── README.md                  # Este archivo
```

## Servicios y Arquitectura

### Servicios de API
- **ApiService**: Servicio base para comunicación con la API
- **UserService**: Gestión de usuarios
- **ConfigService**: Gestión de configuraciones
- **ReportService**: Generación de reportes y estadísticas

### Middleware
- **ApiAuthenticate**: Validación de tokens y manejo de sesiones

### Controladores
- **AuthController**: Autenticación via API
- **DashboardController**: Dashboard principal con estadísticas
- **UserController**: CRUD de usuarios via API
- **ConfigController**: Gestión de configuraciones
- **ReportController**: Generación y descarga de reportes

## Instalación y Configuración

### Requisitos

- Docker
- Docker Compose
- API de SISCON ejecutándose (por defecto en http://localhost:8000/api)

### Pasos para instalar

1. **Clonar el repositorio**
   ```bash
   git clone <url-del-repositorio>
   cd siscon-backoffice
   ```

2. **Configurar variables de entorno**
   ```bash
   cp .env.example .env
   ```
   
   Editar `.env` y configurar:
   ```
   SISCON_API_URL=http://localhost:8000/api
   SISCON_API_TIMEOUT=30
   ```

3. **Construir y levantar los contenedores**
   ```bash
   docker-compose up -d --build
   ```

4. **Instalar dependencias de PHP**
   ```bash
   docker-compose exec app composer install
   ```

5. **Instalar dependencias de Node.js**
   ```bash
   docker-compose exec app npm install
   ```

6. **Generar la clave de aplicación**
   ```bash
   docker-compose exec app php artisan key:generate
   ```

7. **Compilar assets**
   ```bash
   docker-compose exec app npm run build
   ```

## Servicios Docker

El proyecto incluye los siguientes servicios:

- **app**: Aplicación Laravel (PHP 8.2-FPM)
- **webserver**: Servidor web Nginx

### Puertos

- **8080**: Aplicación web (Nginx)

## URLs de Acceso

- **Aplicación**: http://localhost:8080

## Configuración de API

### Variables de Entorno

- **SISCON_API_URL**: URL base de la API de SISCON (por defecto: http://localhost:8000/api)
- **SISCON_API_TIMEOUT**: Timeout para peticiones HTTP (por defecto: 30 segundos)

### Autenticación

El sistema utiliza autenticación basada en tokens JWT:
1. El usuario ingresa credenciales en el login
2. Se valida contra la API de SISCON
3. Se almacena el token en la sesión
4. Todas las peticiones posteriores incluyen el token
5. El middleware valida el token en cada request

## Credenciales

Las credenciales dependen de los usuarios configurados en la API de SISCON.

## Comandos Útiles

### Laravel Artisan
```bash
# Ejecutar comandos artisan
docker-compose exec app php artisan <comando>

# Limpiar cache
docker-compose exec app php artisan cache:clear

# Crear controlador
docker-compose exec app php artisan make:controller <nombre>

# Crear servicio
docker-compose exec app php artisan make:service <nombre>
```

### Desarrollo Frontend
```bash
# Modo desarrollo (watch)
docker-compose exec app npm run dev

# Construir para producción
docker-compose exec app npm run build
```

### API Testing
```bash
# Probar conectividad con la API
docker-compose exec app php artisan tinker
# Luego: app(\App\Services\ApiService::class)->get('health')
```

## Desarrollo

### Estructura para Nuevas Funcionalidades

- **Servicios de API**: `app/Services/` - Para comunicación con endpoints específicos
- **Controladores**: `app/Http/Controllers/` - Para manejar requests web
- **Middleware**: `app/Http/Middleware/` - Para validaciones y autenticación
- **Vistas**: `resources/views/` - Para interfaces de usuario
- **Rutas**: `routes/web.php` - Para definir endpoints web

### Agregar Nuevos Módulos

1. Crear servicio de API (`app/Services/ModuloService.php`)
2. Crear controlador (`app/Http/Controllers/ModuloController.php`)
3. Definir rutas en `routes/web.php`
4. Crear vistas en `resources/views/modulo/`
5. Agregar navegación en `resources/views/layouts/navigation.blade.php`

### Consumo de API

Todos los servicios extienden de `ApiService` que proporciona:
- Métodos HTTP (GET, POST, PUT, DELETE, PATCH)
- Manejo automático de tokens
- Logging de peticiones
- Manejo de errores

Ejemplo de uso:
```php
$userService = new UserService();
$userService->setToken($token);
$users = $userService->getUsers(['status' => 'active']);
```

## Problemas Comunes

### Error de permisos
```bash
# Dar permisos a storage y bootstrap/cache
docker-compose exec app chmod -R 775 storage bootstrap/cache
```

### Limpiar todo el cache
```bash
docker-compose exec app php artisan config:clear
docker-compose exec app php artisan cache:clear
docker-compose exec app php artisan view:clear
docker-compose exec app php artisan route:clear
```

## Contribución

1. Fork el proyecto
2. Crear 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. Abrir un Pull Request

## Licencia

Este proyecto está licenciado bajo la Licencia MIT.

## Contacto

Para preguntas o soporte, contactar al equipo de desarrollo.