# JobHero Backend API REST para la aplicacion JobHero - Plataforma de servicios. ## Stack Tecnologico | Tecnologia | Version | |------------|---------| | Laravel | 11.47.0 | | PHP | 8.2+ | | MySQL | 8.0+ | | Laravel Passport | 13.x | | Composer | 2.x | ## Requisitos Previos - **PHP 8.2** o superior - **Composer 2.x** - **MySQL 8.0** o superior - **Nginx** o **Apache** - **OpenSSL** (para Passport) ### Extensiones PHP requeridas ``` php-mbstring php-xml php-mysql php-curl php-gd php-zip php-bcmath php-json ``` ## Instalacion ### 1. Clonar el repositorio ```bash git clone cd jobhero-backend ``` ### 2. Instalar dependencias ```bash composer install ``` ### 3. Configurar variables de entorno ```bash cp .env.example .env ``` Editar `.env` con tus configuraciones: ```env APP_NAME=JobHero APP_ENV=local APP_KEY= APP_DEBUG=true APP_URL=http://localhost:8000 # Base de datos DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=jobhero DB_USERNAME=tu_usuario DB_PASSWORD=tu_password # Email MAIL_MAILER=smtp MAIL_HOST=smtp.ejemplo.com MAIL_PORT=587 MAIL_USERNAME=tu_email MAIL_PASSWORD=tu_password MAIL_ENCRYPTION=tls MAIL_FROM_ADDRESS=noreply@jobhero.com MAIL_FROM_NAME="JobHero" # Openpay (Pagos) OPENPAY_ID=tu_openpay_id OPENPAY_APIKEY=tu_openpay_apikey OPENPAY_PRODUCTION=false # OneSignal (Notificaciones push) ONESIGNAL_APP_ID=tu_onesignal_app_id ONESIGNAL_REST_API_KEY=tu_onesignal_api_key # Google Cloud Storage GOOGLE_CLOUD_PROJECT_ID=tu_proyecto GOOGLE_CLOUD_STORAGE_BUCKET=tu_bucket GOOGLE_CLOUD_KEY_FILE=storage/credentials.json # OAuth (Login social) FACEBOOK_CLIENT_ID= FACEBOOK_CLIENT_SECRET= FACEBOOK_CALLBACK_URL= GOOGLE_CLIENT_ID= GOOGLE_CLIENT_SECRET= GOOGLE_CALLBACK_URL= # reCAPTCHA RECAPTCHA_SITE_KEY= RECAPTCHA_SECRET_KEY= ``` ### 4. Generar clave de aplicacion ```bash php artisan key:generate ``` ### 5. Crear base de datos ```sql CREATE DATABASE jobhero CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` ### 6. Ejecutar migraciones ```bash php artisan migrate ``` ### 7. Ejecutar seeders (datos iniciales) ```bash php artisan db:seed ``` ### 8. Instalar Passport (autenticacion API) ```bash php artisan passport:install ``` Guardar las claves generadas en `.env`: ```env PASSPORT_PERSONAL_ACCESS_CLIENT_ID=1 PASSPORT_PERSONAL_ACCESS_CLIENT_SECRET=xxxxxx ``` ### 9. Crear enlace simbolico para storage ```bash php artisan storage:link ``` ### 10. Configurar permisos ```bash chmod -R 775 storage bootstrap/cache chown -R www-data:www-data storage bootstrap/cache ``` ## Desarrollo ### Ejecutar servidor de desarrollo ```bash php artisan serve ``` La API estara disponible en `http://localhost:8000` ### Ejecutar en produccion Configurar Nginx o Apache. Ejemplo de configuracion Nginx: ```nginx server { listen 80; server_name api.jobhero.com; root /var/www/jobhero-backend/public; add_header X-Frame-Options "SAMEORIGIN"; add_header X-Content-Type-Options "nosniff"; index index.php; charset utf-8; location / { try_files $uri $uri/ /index.php?$query_string; } location = /favicon.ico { access_log off; log_not_found off; } location = /robots.txt { access_log off; log_not_found off; } error_page 404 /index.php; location ~ \.php$ { fastcgi_pass unix:/var/run/php/php8.2-fpm.sock; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; include fastcgi_params; } location ~ /\.(?!well-known).* { deny all; } } ``` ## Estructura del Proyecto ``` app/ ├── Http/ │ ├── Controllers/ │ │ ├── Auth/ # Autenticacion │ │ ├── ContractController.php │ │ ├── PostulationController.php │ │ ├── SupplierController.php │ │ ├── UserController.php │ │ └── ... │ └── Middleware/ │ ├── RoleCheck.php # Verificacion de roles │ └── SuperAdmin.php # Solo superadmin ├── Models/ # Modelos Eloquent │ ├── User.php │ ├── Suppliers.php │ ├── Postulations.php │ ├── CurrentContracts.php │ ├── FinishedContracts.php │ └── ... ├── Services/ # Servicios │ └── SocialAccountsService.php └── Notifications/ # Notificaciones email └── PasswordReset.php config/ # Configuracion database/ ├── migrations/ # Migraciones de BD ├── seeders/ # Datos iniciales └── factories/ # Factories para tests routes/ ├── api.php # Rutas de la API └── web.php # Rutas web (admin) resources/views/ # Vistas Blade (admin panel) ``` ## Endpoints API Principales ### Autenticacion ``` POST /api/auth/register # Registro POST /api/auth/login # Login POST /api/auth/logout # Logout POST /api/auth/fb # Login Facebook POST /api/auth/google # Login Google GET /api/auth/user # Usuario actual POST /api/auth/verify # Verificar telefono ``` ### Contratos ``` POST /api/contracts/create # Crear contrato GET /api/contracts/current # Contratos activos GET /api/contracts/pending # Contratos pendientes GET /api/contracts/finished # Contratos terminados POST /api/contracts/start # Iniciar contrato POST /api/contracts/cancel # Cancelar contrato POST /api/contracts/review # Calificar contrato ``` ### Proveedores ``` POST /api/add-hero # Registrar como proveedor GET /api/check-category # Verificar categoria GET /api/get-contracted-postulations # Postulaciones contratadas ``` ### Pagos ``` POST /api/cards/add # Agregar tarjeta GET /api/cards/get # Listar tarjetas POST /api/cards/delete # Eliminar tarjeta ``` ## Roles de Usuario | ID | Rol | Permisos | |----|-----|----------| | 1 | Usuario | Crear postulaciones, contratar | | 2 | Proveedor | Postularse a trabajos | | 3 | Analisis | Ver estadisticas | | 4 | Facturacion | Gestionar pagos | | 5 | Moderador | Panel admin basico | | 6 | Administrador | Panel admin completo | | 7 | SuperAdmin | Eliminar registros | ## Comandos Utiles ```bash # Cache php artisan cache:clear # Limpiar cache php artisan config:clear # Limpiar config cache php artisan route:clear # Limpiar rutas cache php artisan view:clear # Limpiar vistas cache php artisan optimize # Optimizar para produccion # Base de datos php artisan migrate # Ejecutar migraciones php artisan migrate:fresh # Recrear BD (BORRA TODO) php artisan db:seed # Ejecutar seeders # Passport php artisan passport:install # Instalar claves php artisan passport:keys # Regenerar claves # Mantenimiento php artisan down # Modo mantenimiento php artisan up # Salir de mantenimiento # Logs tail -f storage/logs/laravel.log # Ver logs en tiempo real ``` ## Solucion de Problemas ### Error 500 en produccion ```bash # Verificar permisos chmod -R 775 storage bootstrap/cache chown -R www-data:www-data storage bootstrap/cache # Limpiar cache php artisan cache:clear php artisan config:clear ``` ### Error de Passport ```bash # Regenerar claves php artisan passport:keys php artisan passport:client --personal ``` ### Error de base de datos ```bash # Verificar conexion php artisan tinker >>> DB::connection()->getPdo(); ``` ### Error de permisos storage ```bash # Linux chmod -R 775 storage chown -R www-data:www-data storage # Si persiste chmod -R 777 storage/logs ``` ## Integraciones Externas ### Openpay (Pagos) - Crear cuenta en openpay.mx - Obtener credenciales de sandbox/produccion - Configurar webhooks ### OneSignal (Push Notifications) - Crear app en onesignal.com - Configurar plataformas (Android/iOS) - Obtener App ID y REST API Key ### Google Cloud Storage - Crear proyecto en Google Cloud - Crear bucket de storage - Descargar credenciales JSON ## Seguridad - Todas las rutas API requieren autenticacion Bearer Token - Passport maneja tokens OAuth 2.0 - CORS configurado en `config/cors.php` - Rate limiting en rutas sensibles - Validacion de entrada en todos los endpoints ## Testing ```bash # Ejecutar tests php artisan test # Con coverage php artisan test --coverage ``` ## Licencia Proyecto privado - Todos los derechos reservados