Capítulo 1: Inicio con GitHub Codespaces
Objetivos
- Configurar un entorno de desarrollo en la nube con GitHub Codespaces
- Lanzar el proyecto e-contact-backend
- Comprender la estructura del proyecto
- Realizar las primeras pruebas de la API
🌐 ¿Qué es GitHub Codespaces?
GitHub Codespaces es un entorno de desarrollo en la nube que permite:
- Desarrollar directamente desde el navegador
- Tener un entorno preconfigurado
- Evitar problemas de instalación local
- Colaborar fácilmente
¡No necesita instalar Java, Maven, PostgreSQL ni ninguna otra herramienta en su máquina!
Requisitos previos
- Cuenta de GitHub (gratuita)
- Navegador web moderno
Pasos de Configuración
Paso 1: Acceder al Repositorio
- Abrir el repositorio principal:
Paso 2: Crear un Codespace
- Hacer clic en el botón verde Code
- Seleccionar la pestaña Codespaces
- Hacer clic en Create codespace on main
┌─────────────────────────────────────────┐
│ Code ▼ │
├─────────────────────────────────────────┤
│ Local │ Codespaces │
│ │ │
│ │ ┌──────────────────────┐ │
│ │ │ + Create codespace │ │
│ │ │ on main │ │
│ │ └──────────────────────┘ │
└─────────────────────────────────────────┘
Paso 3: Esperar la Inicialización
El Codespace va a:
- Crear una máquina virtual
- Clonar el repositorio
- Instalar las dependencias
- Abrir VS Code en el navegador
⏱️ Tiempo estimado: 2-3 minutos
Paso 4: Verificar el Entorno
Una vez que el Codespace esté listo, abra la terminal y verifique:
# Verificar Java
java -version
# Esperado: openjdk 17.x.x o superior
# Verificar Maven
./mvnw -version
# Esperado: Apache Maven 3.x.x
🏃 Lanzar la Aplicación
Comando de Inicio
En la terminal del Codespace:
./mvnw spring-boot:run
Salida Esperada
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v3.2.x)
...
Started EContactApplication in X.XXX seconds
Acceder a la Aplicación
Cuando la aplicación se inicia, Codespaces muestra una notificación:
┌──────────────────────────────────────────────────┐
│ Your application running on port 8080 is │
│ available. │
│ │
│ [Open in Browser] [Make Public] │
└──────────────────────────────────────────────────┘
Haga clic en Open in Browser para acceder a la API.
🔍 Explorar la Estructura del Proyecto
inskillflow-docs-formation-spring-boot-projet-e-contact-backend/
│
├── 📁 src/main/java/com/example/econtact/
│ │
│ ├── 📄 EContactApplication.java # Punto de entrada
│ │
│ ├── 📁 config/
│ │ ├── SecurityConfig.java # Configuración de seguridad
│ │ └── CorsConfig.java # Configuración CORS
│ │
│ ├── 📁 controller/
│ │ ├── ContactController.java # Endpoint público /api/contact
│ │ ├── AuthController.java # Endpoints de autenticación
│ │ └── AdminController.java # Endpoints de administración protegidos
│ │
│ ├── 📁 model/
│ │ ├── Lead.java # Entidad Contacto/Lead
│ │ ├── User.java # Entidad Usuario
│ │ └── enums/ # RequestType, LeadStatus, Role
│ │
│ ├── 📁 dto/
│ │ ├── ContactRequest.java # DTO formulario de contacto
│ │ ├── LoginRequest.java # DTO autenticación
│ │ └── LeadResponse.java # DTO respuesta lead
│ │
│ ├── 📁 repository/
│ │ ├── LeadRepository.java
│ │ └── UserRepository.java
│ │
│ ├── 📁 service/
│ │ ├── LeadService.java
│ │ ├── UserService.java
│ │ └── EmailService.java
│ │
│ └── 📁 security/
│ ├── JwtService.java # Generación/validación JWT
│ ├── JwtAuthenticationFilter.java # Filtro de autenticación
│ └── UserDetailsServiceImpl.java
│
├── 📁 src/main/resources/
│ └── application.yml # Configuración
│
├── 📁 frontend/ # Frontend de prueba
│
├── 📁 troubleshooting/ # Guías de resolución de problemas
│
└── 📁 cours/ # Documentación y cursos
Primeras Pruebas de la API
Prueba 1: Verificar que la API está accesible
curl http://localhost:8080/api/health
Respuesta esperada:
{"status": "UP"}
Prueba 2: Enviar un Contacto (Endpoint Público)
curl -X POST http://localhost:8080/api/contact \
-H "Content-Type: application/json" \
-d '{
"fullName": "Jean Dupont",
"email": "jean.dupont@example.com",
"company": "Ma Société",
"phone": "514-555-1234",
"requestType": "INFO",
"message": "Je voudrais plus d'\''informations sur vos services."
}'
Respuesta esperada:
{
"id": 1,
"fullName": "Jean Dupont",
"email": "jean.dupont@example.com",
"status": "NEW",
"createdAt": "2025-02-02T12:00:00"
}
Prueba 3: Acceder a un Endpoint Protegido (Sin Token)
curl http://localhost:8080/api/admin/leads
Respuesta esperada:
{
"status": 401,
"error": "Unauthorized"
}
⚠️ Problemas Comunes
Puerto 8080 ya en uso
# Identificar el proceso
lsof -i :8080
# O usar otro puerto
./mvnw spring-boot:run -Dspring-boot.run.arguments="--server.port=8081"
Error de base de datos
Verifique que la configuración H2 esté activa para desarrollo en application.yml.
Codespace se desconecta
Los Codespaces gratuitos tienen un límite de tiempo. Reinicie si es necesario.
Recursos de Troubleshooting
Para más detalles sobre los pasos y la resolución de problemas:
Checklist de Validación
Antes de pasar al siguiente capítulo, verifique que haya:
- Creado un Codespace con éxito
- Lanzado la aplicación Spring Boot
- Probado el endpoint
/api/contact - Comprendido la estructura del proyecto