# Guía de Instalación del Proyecto

## Requisitos de Servidor

Para ejecutar Laravel 10 sin problemas, asegúrate de que tu servidor cumpla con los siguientes requisitos:

- **PHP**: Versión 8.1 o superior
- **NodeJS**: Versión 20.17.0 o superior
- **Servidor Web**: Apache
- **Composer**: Versión 2.7.9 o superior
- **Extensiones de PHP necesarias**:
  - `extension=zip`
  - `extension=fileinfo`
  - `extension=gd`

## Instalación de Dependencias

1. Para instalar las dependencias de PHP, ejecuta el siguiente comando:

    ```bash
    composer install
    ```

2. Para instalar las dependencias de Node.js, ejecuta el siguiente comando:

    ```bash
    npm install
    ```

3. Si existen vulnerabilidades después de instalar el package.json, puedes solucionarlas ejecutando:

    ```bash
    npm audit fix
    ```

4. Después de instalar las dependencias de Node.js, puedes iniciar el proyecto en diferentes modos:

    - **Modo Desarrollo**: Para compilar el proyecto para desarrollo:

      ```bash
      npm run dev
      ```

    - **Modo Producción**: Para compilar el proyecto para producción:

      ```bash
      npm run build
      ```


## Configuración del Archivo de Entorno

5. Renombra el archivo `.env.example` a `.env`:

    ```bash
    cp .env.example .env
    ```

6. Luego, abre el archivo `.env` y actualiza las variables de entorno, especialmente la configuración de la base de datos:

    ```plaintext
    DB_CONNECTION=mysql
    DB_HOST=127.0.0.1
    DB_PORT=3306
    DB_DATABASE=emisoftsystem
    DB_USERNAME=tu_usuario
    DB_PASSWORD=tu_contraseña
    ```

## Generar una Clave de Aplicación

7. Para generar una clave de aplicación, ejecuta el siguiente comando:

    ```bash
    php artisan key:generate
    ```

## Configuración de la Base de Datos en Producción

Para configurar la base de datos en el entorno de producción, sigue estos pasos:

1. **Ejecuta las migraciones**: Este comando crea las tablas necesarias en la base de datos según las migraciones definidas en tu proyecto.

    ```bash
    php artisan migrate
    ```

2. **Seed de Profesiones**: Ejecuta el seeder para poblar la tabla de profesiones con datos iniciales.

    ```bash
    php artisan db:seed --class=ProfessionsSeeder
    ```

3. **Acceder a Tinker**: Tinker es una herramienta de consola que te permite interactuar con tu aplicación a través de la línea de comandos.

    ```bash
    php artisan tinker
    ```

4. **Desactivar las verificaciones de claves foráneas**: Esto es necesario para poder truncar las tablas de roles y permisos sin restricciones.

    ```php
    DB::statement('SET FOREIGN_KEY_CHECKS=0;');
    ```

5. **Vaciar las tablas principales de roles y permisos**: Esto eliminará todos los registros de estas tablas, preparándolas para ser rellenadas nuevamente.

    ```php
    \Spatie\Permission\Models\Role::truncate();
    \Spatie\Permission\Models\Permission::truncate();
    DB::table('model_has_permissions')->truncate();
    DB::table('role_has_permissions')->truncate();
    ```

6. **Reactivar las verificaciones de claves foráneas**: Vuelve a habilitar las verificaciones de claves foráneas para mantener la integridad de la base de datos.

    ```php
    DB::statement('SET FOREIGN_KEY_CHECKS=1;');
    ```

7. **Ejecutar el seeder de Roles**: Esto rellenará las tablas de roles y permisos con datos iniciales.

    ```bash
    php artisan db:seed --class=RoleSeeder
    ```

